convert mcpair to kmutex.

This commit is contained in:
mrg 2011-05-01 01:09:05 +00:00
parent 38964b45cb
commit 14a4134463
5 changed files with 44 additions and 41 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: rf_copyback.c,v 1.45 2011/02/19 07:11:09 enami Exp $ */
/* $NetBSD: rf_copyback.c,v 1.46 2011/05/01 01:09:05 mrg Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@ -38,7 +38,7 @@
****************************************************************************/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: rf_copyback.c,v 1.45 2011/02/19 07:11:09 enami Exp $");
__KERNEL_RCSID(0, "$NetBSD: rf_copyback.c,v 1.46 2011/05/01 01:09:05 mrg Exp $");
#include <dev/raidframe/raidframevar.h>
@ -350,17 +350,17 @@ rf_CopybackOne(RF_CopybackDesc_t *desc, int typ, RF_RaidAddr_t addr,
* pair to complete. in the simulator, just return, since everything
* will happen as callbacks */
RF_LOCK_MUTEX(desc->mcpair->mutex);
RF_LOCK_MCPAIR(desc->mcpair);
desc->mcpair->flag = 0;
RF_UNLOCK_MUTEX(desc->mcpair->mutex);
RF_UNLOCK_MCPAIR(desc->mcpair);
rf_DiskIOEnqueue(&raidPtr->Queues[spCol], desc->readreq, RF_IO_NORMAL_PRIORITY);
RF_LOCK_MUTEX(desc->mcpair->mutex);
RF_LOCK_MCPAIR(desc->mcpair);
while (!desc->mcpair->flag) {
RF_WAIT_MCPAIR(desc->mcpair);
}
RF_UNLOCK_MUTEX(desc->mcpair->mutex);
RF_UNLOCK_MCPAIR(desc->mcpair);
rf_FreeDiskQueueData(desc->readreq);
rf_FreeDiskQueueData(desc->writereq);

View File

@ -1,4 +1,4 @@
/* $NetBSD: rf_mcpair.c,v 1.23 2011/04/30 01:44:36 mrg Exp $ */
/* $NetBSD: rf_mcpair.c,v 1.24 2011/05/01 01:09:05 mrg Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: rf_mcpair.c,v 1.23 2011/04/30 01:44:36 mrg Exp $");
__KERNEL_RCSID(0, "$NetBSD: rf_mcpair.c,v 1.24 2011/05/01 01:09:05 mrg Exp $");
#include <dev/raidframe/raidframevar.h>
@ -75,8 +75,8 @@ rf_AllocMCPair(void)
RF_MCPair_t *t;
t = pool_get(&rf_pools.mcpair, PR_WAITOK);
rf_mutex_init(&t->mutex);
t->cond = 0;
rf_init_mutex2(t->mutex, IPL_VM);
rf_init_cond2(t->cond, "mcpair");
t->flag = 0;
return (t);
@ -85,6 +85,8 @@ rf_AllocMCPair(void)
void
rf_FreeMCPair(RF_MCPair_t *t)
{
rf_destroy_cond2(t->cond);
rf_destroy_mutex2(t->mutex);
pool_put(&rf_pools.mcpair, t);
}
@ -93,8 +95,8 @@ rf_FreeMCPair(RF_MCPair_t *t)
void
rf_MCPairWakeupFunc(RF_MCPair_t *mcpair)
{
RF_LOCK_MUTEX(mcpair->mutex);
RF_LOCK_MCPAIR(mcpair);
mcpair->flag = 1;
wakeup(&(mcpair->cond));
RF_UNLOCK_MUTEX(mcpair->mutex);
rf_broadcast_cond2(mcpair->cond);
RF_UNLOCK_MCPAIR(mcpair);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: rf_mcpair.h,v 1.9 2005/12/11 12:23:37 christos Exp $ */
/* $NetBSD: rf_mcpair.h,v 1.10 2011/05/01 01:09:05 mrg Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@ -37,12 +37,13 @@
#include "rf_threadstuff.h"
struct RF_MCPair_s {
RF_DECLARE_MUTEX(mutex)
RF_DECLARE_COND(cond)
rf_declare_mutex2(mutex);
rf_declare_cond2(cond);
int flag;
};
#define RF_WAIT_MCPAIR(_mcp) \
ltsleep(&((_mcp)->cond), PRIBIO, "mcpair", 0, &((_mcp)->mutex))
#define RF_WAIT_MCPAIR(_mcp) rf_wait_cond2((_mcp)->cond, (_mcp)->mutex)
#define RF_LOCK_MCPAIR(_mcp) rf_lock_mutex2((_mcp)->mutex)
#define RF_UNLOCK_MCPAIR(_mcp) rf_unlock_mutex2((_mcp)->mutex)
int rf_ConfigureMCPair(RF_ShutdownList_t ** listp);
RF_MCPair_t *rf_AllocMCPair(void);

View File

@ -1,4 +1,4 @@
/* $NetBSD: rf_parityscan.c,v 1.33 2009/11/17 18:54:26 jld Exp $ */
/* $NetBSD: rf_parityscan.c,v 1.34 2011/05/01 01:09:05 mrg Exp $ */
/*
* Copyright (c) 1995 Carnegie-Mellon University.
* All rights reserved.
@ -33,7 +33,7 @@
****************************************************************************/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: rf_parityscan.c,v 1.33 2009/11/17 18:54:26 jld Exp $");
__KERNEL_RCSID(0, "$NetBSD: rf_parityscan.c,v 1.34 2011/05/01 01:09:05 mrg Exp $");
#include <dev/raidframe/raidframevar.h>
@ -262,17 +262,17 @@ rf_VerifyParityBasic(RF_Raid_t *raidPtr, RF_RaidAddr_t raidAddr,
rf_PrintDAGList(rd_dag_h);
}
#endif
RF_LOCK_MUTEX(mcpair->mutex);
RF_LOCK_MCPAIR(mcpair);
mcpair->flag = 0;
RF_UNLOCK_MUTEX(mcpair->mutex);
RF_UNLOCK_MCPAIR(mcpair);
rf_DispatchDAG(rd_dag_h, (void (*) (void *)) rf_MCPairWakeupFunc,
(void *) mcpair);
RF_LOCK_MUTEX(mcpair->mutex);
RF_LOCK_MCPAIR(mcpair);
while (!mcpair->flag)
RF_WAIT_COND(mcpair->cond, mcpair->mutex);
RF_UNLOCK_MUTEX(mcpair->mutex);
RF_WAIT_MCPAIR(mcpair);
RF_UNLOCK_MCPAIR(mcpair);
if (rd_dag_h->status != rf_enable) {
RF_ERRORMSG("Unable to verify parity: can't read the stripe\n");
retcode = RF_PARITY_COULD_NOT_VERIFY;
@ -308,17 +308,17 @@ rf_VerifyParityBasic(RF_Raid_t *raidPtr, RF_RaidAddr_t raidAddr,
rf_PrintDAGList(wr_dag_h);
}
#endif
RF_LOCK_MUTEX(mcpair->mutex);
RF_LOCK_MCPAIR(mcpair);
mcpair->flag = 0;
RF_UNLOCK_MUTEX(mcpair->mutex);
RF_UNLOCK_MCPAIR(mcpair);
rf_DispatchDAG(wr_dag_h, (void (*) (void *)) rf_MCPairWakeupFunc,
(void *) mcpair);
RF_LOCK_MUTEX(mcpair->mutex);
RF_LOCK_MCPAIR(mcpair);
while (!mcpair->flag)
RF_WAIT_COND(mcpair->cond, mcpair->mutex);
RF_UNLOCK_MUTEX(mcpair->mutex);
RF_WAIT_MCPAIR(mcpair);
RF_UNLOCK_MCPAIR(mcpair);
if (wr_dag_h->status != rf_enable) {
RF_ERRORMSG("Unable to correct parity in VerifyParity: can't write the stripe\n");
retcode = RF_PARITY_COULD_NOT_CORRECT;

View File

@ -1,4 +1,4 @@
/* $NetBSD: rf_raid1.c,v 1.32 2010/04/15 15:49:00 oster Exp $ */
/* $NetBSD: rf_raid1.c,v 1.33 2011/05/01 01:09:05 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.32 2010/04/15 15:49:00 oster Exp $");
__KERNEL_RCSID(0, "$NetBSD: rf_raid1.c,v 1.33 2011/05/01 01:09:05 mrg Exp $");
#include "rf_raid.h"
#include "rf_raid1.h"
@ -378,18 +378,18 @@ rf_VerifyParityRAID1(RF_Raid_t *raidPtr, RF_RaidAddr_t raidAddr,
rf_PrintDAGList(rd_dag_h);
}
#endif
RF_LOCK_MUTEX(mcpair->mutex);
RF_LOCK_MCPAIR(mcpair);
mcpair->flag = 0;
RF_UNLOCK_MUTEX(mcpair->mutex);
RF_UNLOCK_MCPAIR(mcpair);
rf_DispatchDAG(rd_dag_h, (void (*) (void *)) rf_MCPairWakeupFunc,
(void *) mcpair);
RF_LOCK_MUTEX(mcpair->mutex);
RF_LOCK_MCPAIR(mcpair);
while (mcpair->flag == 0) {
RF_WAIT_MCPAIR(mcpair);
}
RF_UNLOCK_MUTEX(mcpair->mutex);
RF_UNLOCK_MCPAIR(mcpair);
if (rd_dag_h->status != rf_enable) {
RF_ERRORMSG("Unable to verify raid1 parity: can't read stripe\n");
@ -497,19 +497,19 @@ rf_VerifyParityRAID1(RF_Raid_t *raidPtr, RF_RaidAddr_t raidAddr,
rf_PrintDAGList(wr_dag_h);
}
#endif
RF_LOCK_MUTEX(mcpair->mutex);
RF_LOCK_MCPAIR(mcpair);
mcpair->flag = 0;
RF_UNLOCK_MUTEX(mcpair->mutex);
RF_UNLOCK_MCPAIR(mcpair);
/* fire off the write DAG */
rf_DispatchDAG(wr_dag_h, (void (*) (void *)) rf_MCPairWakeupFunc,
(void *) mcpair);
RF_LOCK_MUTEX(mcpair->mutex);
RF_LOCK_MCPAIR(mcpair);
while (!mcpair->flag) {
RF_WAIT_COND(mcpair->cond, mcpair->mutex);
RF_WAIT_MCPAIR(mcpair);
}
RF_UNLOCK_MUTEX(mcpair->mutex);
RF_UNLOCK_MCPAIR(mcpair);
if (wr_dag_h->status != rf_enable) {
RF_ERRORMSG("Unable to correct RAID1 parity in VerifyParity\n");
goto done;