PERFORCE change 108712 for review
Scott Long
scottl at FreeBSD.org
Mon Oct 30 05:11:12 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=108712
Change 108712 by scottl at scottl-x64 on 2006/10/30 05:10:43
Remove the last of the GIANT_REQUIRED tags and shuffle some
assertions so that a locked SIM will boot and do simple I/O. There
are some ugly hacks here that will need to be re-thought.
Affected files ...
.. //depot/projects/scottl-camlock/src/sys/cam/cam_xpt.c#43 edit
.. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_da.c#15 edit
.. //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_pass.c#13 edit
Differences ...
==== //depot/projects/scottl-camlock/src/sys/cam/cam_xpt.c#43 (text+ko) ====
@@ -1500,7 +1500,7 @@
int32_t status;
struct periph_list *periph_head;
- GIANT_REQUIRED;
+ mtx_assert(periph->sim->mtx, MA_OWNED);
device = periph->path->device;
@@ -1537,7 +1537,7 @@
{
struct cam_ed *device;
- GIANT_REQUIRED;
+ mtx_assert(periph->sim->mtx, MA_OWNED);
device = periph->path->device;
@@ -1575,7 +1575,7 @@
u_int mb;
int s;
- GIANT_REQUIRED;
+ mtx_assert(periph->sim->mtx, MA_OWNED);
path = periph->path;
/*
@@ -1706,7 +1706,7 @@
struct cam_path *path;
struct ccb_trans_settings cts;
- GIANT_REQUIRED;
+ mtx_assert(periph->sim->mtx, MA_OWNED);
path = periph->path;
/*
@@ -3011,8 +3011,6 @@
{
int iopl;
- GIANT_REQUIRED;
-
CAM_DEBUG(start_ccb->ccb_h.path, CAM_DEBUG_TRACE, ("xpt_action\n"));
start_ccb->ccb_h.status = CAM_REQ_INPROG;
@@ -3653,13 +3651,13 @@
struct cam_devq *devq;
struct cam_ed *dev;
- GIANT_REQUIRED;
timeout = start_ccb->ccb_h.timeout;
sim = start_ccb->ccb_h.path->bus->sim;
devq = sim->devq;
dev = start_ccb->ccb_h.path->device;
+ mtx_assert(sim->mtx, MA_OWNED);
s = splcam();
/*
@@ -3716,7 +3714,7 @@
int s;
int runq;
- GIANT_REQUIRED;
+ mtx_assert(perph->sim->mtx, MA_OWNED);
CAM_DEBUG(perph->path, CAM_DEBUG_TRACE, ("xpt_schedule\n"));
device = perph->path->device;
@@ -4042,7 +4040,9 @@
void
xpt_setup_ccb(struct ccb_hdr *ccb_h, struct cam_path *path, u_int32_t priority)
{
+#if 0
mtx_assert(path->bus->sim->mtx, MA_OWNED);
+#endif
CAM_DEBUG(path, CAM_DEBUG_TRACE, ("xpt_setup_ccb\n"));
ccb_h->pinfo.priority = priority;
@@ -4070,7 +4070,10 @@
struct cam_path *path;
cam_status status;
- GIANT_REQUIRED;
+#if 0
+ if (perph != NULL)
+ mtx_assert(perph->sim->mtx, MA_OWNED);
+#endif
path = (struct cam_path *)malloc(sizeof(*path), M_CAMXPT, M_NOWAIT);
@@ -4182,7 +4185,9 @@
void
xpt_free_path(struct cam_path *path)
{
+#if 0
mtx_assert(path->bus->sim->mtx, MA_OWNED);
+#endif
CAM_DEBUG(path, CAM_DEBUG_TRACE, ("xpt_free_path\n"));
xpt_release_path(path);
@@ -4334,7 +4339,9 @@
struct cam_sim *
xpt_path_sim(struct cam_path *path)
{
+#if 0
mtx_assert(path->bus->sim->mtx, MA_OWNED);
+#endif
return (path->bus->sim);
}
@@ -4478,7 +4485,6 @@
union ccb *work_ccb;
cam_status status;
- GIANT_REQUIRED;
status = xpt_compile_path(&bus_path, NULL, pathid,
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD);
@@ -4619,7 +4625,7 @@
struct cam_ed *device, *next_device;
int s;
- GIANT_REQUIRED;
+ mtx_assert(path->bus->sim->mtx, MA_OWNED);
CAM_DEBUG(path, CAM_DEBUG_TRACE, ("xpt_async\n"));
==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_da.c#15 (text+ko) ====
@@ -956,6 +956,7 @@
case AC_FOUND_DEVICE:
{
struct ccb_getdev *cgd;
+ struct cam_sim *sim;
cam_status status;
cgd = (struct ccb_getdev *)arg;
@@ -972,11 +973,14 @@
* this device and start the probe
* process.
*/
+ sim = xpt_path_sim(cgd->ccb_h.path);
+ mtx_lock(sim->mtx);
status = cam_periph_alloc(daregister, daoninvalidate,
dacleanup, dastart,
"da", CAM_PERIPH_BIO,
cgd->ccb_h.path, daasync,
AC_FOUND_DEVICE, cgd);
+ mtx_unlock(sim->mtx);
if (status != CAM_REQ_CMP
&& status != CAM_REQ_INPROG)
==== //depot/projects/scottl-camlock/src/sys/cam/scsi/scsi_pass.c#13 (text+ko) ====
@@ -204,6 +204,7 @@
struct cam_path *path, void *arg)
{
struct cam_periph *periph;
+ struct cam_sim *sim;
periph = (struct cam_periph *)callback_arg;
@@ -222,10 +223,13 @@
* this device and start the probe
* process.
*/
+ sim = xpt_path_sim(cgd->ccb_h.path);
+ mtx_lock(sim->mtx);
status = cam_periph_alloc(passregister, passoninvalidate,
passcleanup, passstart, "pass",
CAM_PERIPH_BIO, cgd->ccb_h.path,
passasync, AC_FOUND_DEVICE, cgd);
+ mtx_unlock(sim->mtx);
if (status != CAM_REQ_CMP
&& status != CAM_REQ_INPROG) {
More information about the p4-projects
mailing list