diff options
| author | mrg <mrg@NetBSD.org> | 2011-05-02 07:29:18 +0000 |
|---|---|---|
| committer | mrg <mrg@NetBSD.org> | 2011-05-02 07:29:18 +0000 |
| commit | 1c2d213c105fdec20cdfb5d839ca777e3d68a874 (patch) | |
| tree | 7f7378ef83185d8bb781652597b246385d3dd00e /sys/dev/raidframe | |
| parent | f95f85df7a9933b1f68517b5df5dbb4199aaf09b (diff) | |
convert rb_mutex to a kmutex/cv.
Diffstat (limited to 'sys/dev/raidframe')
| -rw-r--r-- | sys/dev/raidframe/rf_raid1.c | 16 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_reconbuffer.c | 34 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_reconstruct.c | 68 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_reconstruct.h | 6 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_reconutil.c | 14 |
5 files changed, 71 insertions, 67 deletions
diff --git a/sys/dev/raidframe/rf_raid1.c b/sys/dev/raidframe/rf_raid1.c index 40fa4347af9..7155d06434a 100644 --- a/sys/dev/raidframe/rf_raid1.c +++ b/sys/dev/raidframe/rf_raid1.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_raid1.c,v 1.33 2011/05/01 01:09:05 mrg Exp $ */ +/* $NetBSD: rf_raid1.c,v 1.34 2011/05/02 07:29:18 mrg Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -33,7 +33,7 @@ *****************************************************************************/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_raid1.c,v 1.33 2011/05/01 01:09:05 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_raid1.c,v 1.34 2011/05/02 07:29:18 mrg Exp $"); #include "rf_raid.h" #include "rf_raid1.h" @@ -581,12 +581,12 @@ rf_SubmitReconBufferRAID1(RF_ReconBuffer_t *rbuf, int keep_it, } RF_LOCK_PSS_MUTEX(raidPtr, rbuf->parityStripeID); - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); while(reconCtrlPtr->rb_lock) { - ltsleep(&reconCtrlPtr->rb_lock, PRIBIO, "reconctlcnmhs", 0, &reconCtrlPtr->rb_mutex); + rf_wait_cond2(reconCtrlPtr->rb_cv, reconCtrlPtr->rb_mutex); } reconCtrlPtr->rb_lock = 1; - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); pssPtr = rf_LookupRUStatus(raidPtr, reconCtrlPtr->pssTable, rbuf->parityStripeID, rbuf->which_ru, RF_PSS_NONE, NULL); @@ -688,10 +688,10 @@ rf_SubmitReconBufferRAID1(RF_ReconBuffer_t *rbuf, int keep_it, out: RF_UNLOCK_PSS_MUTEX(raidPtr, rbuf->parityStripeID); - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); reconCtrlPtr->rb_lock = 0; - wakeup(&reconCtrlPtr->rb_lock); - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_broadcast_cond2(reconCtrlPtr->rb_cv); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); #if RF_DEBUG_RECON if (rf_reconbufferDebug) { printf("raid%d: RAID1 rbuf submission: returning %d\n", diff --git a/sys/dev/raidframe/rf_reconbuffer.c b/sys/dev/raidframe/rf_reconbuffer.c index b13afcb0b6d..3cc742c251c 100644 --- a/sys/dev/raidframe/rf_reconbuffer.c +++ b/sys/dev/raidframe/rf_reconbuffer.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_reconbuffer.c,v 1.24 2007/03/04 06:02:39 christos Exp $ */ +/* $NetBSD: rf_reconbuffer.c,v 1.25 2011/05/02 07:29:18 mrg Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -33,7 +33,7 @@ ***************************************************/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_reconbuffer.c,v 1.24 2007/03/04 06:02:39 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_reconbuffer.c,v 1.25 2011/05/02 07:29:18 mrg Exp $"); #include "rf_raid.h" #include "rf_reconbuffer.h" @@ -140,12 +140,12 @@ rf_SubmitReconBufferBasic(RF_ReconBuffer_t *rbuf, int keep_it, RF_LOCK_PSS_MUTEX(raidPtr, rbuf->parityStripeID); - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); while(reconCtrlPtr->rb_lock) { - ltsleep(&reconCtrlPtr->rb_lock, PRIBIO, "reconctlcnmhs", 0, &reconCtrlPtr->rb_mutex); + rf_wait_cond2(reconCtrlPtr->rb_cv, reconCtrlPtr->rb_mutex); } reconCtrlPtr->rb_lock = 1; - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); pssPtr = rf_LookupRUStatus(raidPtr, reconCtrlPtr->pssTable, rbuf->parityStripeID, rbuf->which_ru, RF_PSS_NONE, NULL); RF_ASSERT(pssPtr); /* if it didn't exist, we wouldn't have gotten @@ -193,10 +193,10 @@ rf_SubmitReconBufferBasic(RF_ReconBuffer_t *rbuf, int keep_it, } if (keep_it) { RF_UNLOCK_PSS_MUTEX(raidPtr, rbuf->parityStripeID); - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); reconCtrlPtr->rb_lock = 0; - wakeup(&reconCtrlPtr->rb_lock); - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_broadcast_cond2(reconCtrlPtr->rb_cv); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); rf_FreeReconBuffer(rbuf); return (retcode); } @@ -286,10 +286,10 @@ rf_SubmitReconBufferBasic(RF_ReconBuffer_t *rbuf, int keep_it, out: RF_UNLOCK_PSS_MUTEX(raidPtr, rbuf->parityStripeID); - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); reconCtrlPtr->rb_lock = 0; - wakeup(&reconCtrlPtr->rb_lock); - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_broadcast_cond2(reconCtrlPtr->rb_cv); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); return (retcode); } /* pssPtr - the pss descriptor for this parity stripe */ @@ -339,21 +339,21 @@ rf_GetFullReconBuffer(RF_ReconCtrl_t *reconCtrlPtr) { RF_ReconBuffer_t *p; - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); while(reconCtrlPtr->rb_lock) { - ltsleep(&reconCtrlPtr->rb_lock, PRIBIO, "reconctlcnmhs", 0, &reconCtrlPtr->rb_mutex); + rf_wait_cond2(reconCtrlPtr->rb_cv, reconCtrlPtr->rb_mutex); } reconCtrlPtr->rb_lock = 1; - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); if ((p = reconCtrlPtr->fullBufferList) != NULL) { reconCtrlPtr->fullBufferList = p->next; p->next = NULL; } - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); reconCtrlPtr->rb_lock = 0; - wakeup(&reconCtrlPtr->rb_lock); - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_broadcast_cond2(reconCtrlPtr->rb_cv); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); return (p); } diff --git a/sys/dev/raidframe/rf_reconstruct.c b/sys/dev/raidframe/rf_reconstruct.c index f3cc67926bd..69b47ea3370 100644 --- a/sys/dev/raidframe/rf_reconstruct.c +++ b/sys/dev/raidframe/rf_reconstruct.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_reconstruct.c,v 1.111 2011/02/19 07:11:09 enami Exp $ */ +/* $NetBSD: rf_reconstruct.c,v 1.112 2011/05/02 07:29:18 mrg Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -33,7 +33,7 @@ ************************************************************/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_reconstruct.c,v 1.111 2011/02/19 07:11:09 enami Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_reconstruct.c,v 1.112 2011/05/02 07:29:18 mrg Exp $"); #include <sys/param.h> #include <sys/time.h> @@ -952,26 +952,26 @@ ProcessReconEvent(RF_Raid_t *raidPtr, RF_ReconEvent_t *event) rbuf->failedDiskSectorOffset, rbuf->failedDiskSectorOffset + sectorsPerRU - 1); rf_RemoveFromActiveReconTable(raidPtr, rbuf->parityStripeID, rbuf->which_ru); - RF_LOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_lock_mutex2(raidPtr->reconControl->rb_mutex); raidPtr->reconControl->pending_writes--; - RF_UNLOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_unlock_mutex2(raidPtr->reconControl->rb_mutex); if (rbuf->type == RF_RBUF_TYPE_FLOATING) { - RF_LOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_lock_mutex2(raidPtr->reconControl->rb_mutex); while(raidPtr->reconControl->rb_lock) { - ltsleep(&raidPtr->reconControl->rb_lock, PRIBIO, "reconctrlpre1", 0, - &raidPtr->reconControl->rb_mutex); + rf_wait_cond2(raidPtr->reconControl->rb_cv, + raidPtr->reconControl->rb_mutex); } raidPtr->reconControl->rb_lock = 1; - RF_UNLOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_unlock_mutex2(raidPtr->reconControl->rb_mutex); raidPtr->numFullReconBuffers--; rf_ReleaseFloatingReconBuffer(raidPtr, rbuf); - RF_LOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_lock_mutex2(raidPtr->reconControl->rb_mutex); raidPtr->reconControl->rb_lock = 0; - wakeup(&raidPtr->reconControl->rb_lock); - RF_UNLOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_broadcast_cond2(raidPtr->reconControl->rb_cv); + rf_unlock_mutex2(raidPtr->reconControl->rb_mutex); } else if (rbuf->type == RF_RBUF_TYPE_FORCED) rf_FreeReconBuffer(rbuf); @@ -1056,9 +1056,9 @@ ProcessReconEvent(RF_Raid_t *raidPtr, RF_ReconEvent_t *event) /* This is an error, but it was a pending write. Account for it. */ - RF_LOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_lock_mutex2(raidPtr->reconControl->rb_mutex); raidPtr->reconControl->pending_writes--; - RF_UNLOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_unlock_mutex2(raidPtr->reconControl->rb_mutex); rbuf = (RF_ReconBuffer_t *) event->arg; @@ -1442,9 +1442,9 @@ IssueNextWriteRequest(RF_Raid_t *raidPtr) (void *) raidPtr, 0, NULL, PR_WAITOK); rbuf->arg = (void *) req; - RF_LOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_lock_mutex2(raidPtr->reconControl->rb_mutex); raidPtr->reconControl->pending_writes++; - RF_UNLOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_unlock_mutex2(raidPtr->reconControl->rb_mutex); rf_DiskIOEnqueue(&raidPtr->Queues[rbuf->spCol], req, RF_IO_RECON_PRIORITY); return (0); @@ -1531,12 +1531,12 @@ CheckForNewMinHeadSep(RF_Raid_t *raidPtr, RF_HeadSepLimit_t hsCtr) * of a minimum */ - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); while(reconCtrlPtr->rb_lock) { - ltsleep(&reconCtrlPtr->rb_lock, PRIBIO, "reconctlcnmhs", 0, &reconCtrlPtr->rb_mutex); + rf_wait_cond2(reconCtrlPtr->rb_cv, reconCtrlPtr->rb_mutex); } reconCtrlPtr->rb_lock = 1; - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); new_min = ~(1L << (8 * sizeof(long) - 1)); /* 0x7FFF....FFF */ for (i = 0; i < raidPtr->numCol; i++) @@ -1559,10 +1559,10 @@ CheckForNewMinHeadSep(RF_Raid_t *raidPtr, RF_HeadSepLimit_t hsCtr) } } - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); reconCtrlPtr->rb_lock = 0; - wakeup(&reconCtrlPtr->rb_lock); - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_broadcast_cond2(reconCtrlPtr->rb_cv); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); } /* @@ -1594,12 +1594,12 @@ CheckHeadSeparation(RF_Raid_t *raidPtr, RF_PerDiskReconCtrl_t *ctrl, * separation before we'll wake up. * */ - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); while(reconCtrlPtr->rb_lock) { - ltsleep(&reconCtrlPtr->rb_lock, PRIBIO, "reconctlchs", 0, &reconCtrlPtr->rb_mutex); + rf_wait_cond2(reconCtrlPtr->rb_cv, reconCtrlPtr->rb_mutex); } reconCtrlPtr->rb_lock = 1; - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); if ((raidPtr->headSepLimit >= 0) && ((ctrl->headSepCounter - reconCtrlPtr->minHeadSepCounter) > raidPtr->headSepLimit)) { Dprintf5("raid%d: RECON: head sep stall: col %d hsCtr %ld minHSCtr %ld limit %ld\n", @@ -1632,10 +1632,10 @@ CheckHeadSeparation(RF_Raid_t *raidPtr, RF_PerDiskReconCtrl_t *ctrl, ctrl->reconCtrl->reconDesc->hsStallCount++; #endif /* RF_RECON_STATS > 0 */ } - RF_LOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_lock_mutex2(reconCtrlPtr->rb_mutex); reconCtrlPtr->rb_lock = 0; - wakeup(&reconCtrlPtr->rb_lock); - RF_UNLOCK_MUTEX(reconCtrlPtr->rb_mutex); + rf_broadcast_cond2(reconCtrlPtr->rb_cv); + rf_unlock_mutex2(reconCtrlPtr->rb_mutex); return (retval); } @@ -1878,14 +1878,14 @@ rf_WakeupHeadSepCBWaiters(RF_Raid_t *raidPtr) { RF_CallbackDesc_t *p; - RF_LOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_lock_mutex2(raidPtr->reconControl->rb_mutex); while(raidPtr->reconControl->rb_lock) { - ltsleep(&raidPtr->reconControl->rb_lock, PRIBIO, - "rf_wakeuphscbw", 0, &raidPtr->reconControl->rb_mutex); + rf_wait_cond2(raidPtr->reconControl->rb_cv, + raidPtr->reconControl->rb_mutex); } raidPtr->reconControl->rb_lock = 1; - RF_UNLOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_unlock_mutex2(raidPtr->reconControl->rb_mutex); while (raidPtr->reconControl->headSepCBList) { p = raidPtr->reconControl->headSepCBList; @@ -1894,10 +1894,10 @@ rf_WakeupHeadSepCBWaiters(RF_Raid_t *raidPtr) rf_CauseReconEvent(raidPtr, p->col, NULL, RF_REVENT_HEADSEPCLEAR); rf_FreeCallbackDesc(p); } - RF_LOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_lock_mutex2(raidPtr->reconControl->rb_mutex); raidPtr->reconControl->rb_lock = 0; - wakeup(&raidPtr->reconControl->rb_lock); - RF_UNLOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_broadcast_cond2(raidPtr->reconControl->rb_cv); + rf_unlock_mutex2(raidPtr->reconControl->rb_mutex); } diff --git a/sys/dev/raidframe/rf_reconstruct.h b/sys/dev/raidframe/rf_reconstruct.h index 41e55f96af1..f93ab2969e8 100644 --- a/sys/dev/raidframe/rf_reconstruct.h +++ b/sys/dev/raidframe/rf_reconstruct.h @@ -1,4 +1,4 @@ -/* $NetBSD: rf_reconstruct.h,v 1.27 2011/05/02 01:07:24 mrg Exp $ */ +/* $NetBSD: rf_reconstruct.h,v 1.28 2011/05/02 07:29:18 mrg Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -142,8 +142,8 @@ struct RF_ReconCtrl_s { int eq_count; /* debug only */ /* reconstruction buffer management */ - RF_DECLARE_MUTEX(rb_mutex) /* mutex for messing around - * with recon buffers */ + rf_declare_mutex2(rb_mutex); /* mutex/cv for messing */ + rf_declare_cond2(rb_cv); /* around with recon buffers */ int rb_lock; /* 1 if someone is mucking with recon buffers, 0 otherwise */ diff --git a/sys/dev/raidframe/rf_reconutil.c b/sys/dev/raidframe/rf_reconutil.c index 6b82cf0fff0..f86e74dcd9f 100644 --- a/sys/dev/raidframe/rf_reconutil.c +++ b/sys/dev/raidframe/rf_reconutil.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_reconutil.c,v 1.32 2011/05/02 01:07:24 mrg Exp $ */ +/* $NetBSD: rf_reconutil.c,v 1.33 2011/05/02 07:29:18 mrg Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -31,7 +31,7 @@ ********************************************/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_reconutil.c,v 1.32 2011/05/02 01:07:24 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_reconutil.c,v 1.33 2011/05/02 07:29:18 mrg Exp $"); #include <dev/raidframe/raidframevar.h> @@ -132,7 +132,8 @@ rf_MakeReconControl(RF_RaidReconDesc_t *reconDesc, reconCtrlPtr->eq_count = 0; /* make the floating recon buffers and append them to the free list */ - rf_mutex_init(&reconCtrlPtr->rb_mutex); + rf_init_mutex2(reconCtrlPtr->rb_mutex, IPL_VM); + rf_init_cond2(reconCtrlPtr->rb_cv, "rfrcw"); reconCtrlPtr->fullBufferList = NULL; reconCtrlPtr->floatingRbufs = NULL; @@ -175,6 +176,9 @@ rf_FreeReconControl(RF_Raid_t *raidPtr) rf_destroy_mutex2(reconCtrlPtr->eq_mutex); rf_destroy_cond2(reconCtrlPtr->eq_cv); + rf_destroy_mutex2(reconCtrlPtr->rb_mutex); + rf_destroy_cond2(reconCtrlPtr->rb_cv); + rf_FreeReconMap(reconCtrlPtr->reconMap); rf_FreeParityStripeStatusTable(raidPtr, reconCtrlPtr->pssTable); RF_Free(reconCtrlPtr->perDiskInfo, @@ -266,7 +270,7 @@ rf_CheckFloatingRbufCount(RF_Raid_t *raidPtr, int dolock) int i, j, sum = 0; if (dolock) - RF_LOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_lock_mutex2(raidPtr->reconControl->rb_mutex); pssTable = raidPtr->reconControl->pssTable; for (i = 0; i < raidPtr->pssTableSize; i++) { @@ -308,7 +312,7 @@ rf_CheckFloatingRbufCount(RF_Raid_t *raidPtr, int dolock) RF_ASSERT(sum == raidPtr->numFloatingReconBufs); if (dolock) - RF_UNLOCK_MUTEX(raidPtr->reconControl->rb_mutex); + rf_unlock_mutex2(raidPtr->reconControl->rb_mutex); } #endif |
