Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 May 2000 11:52:06 +0400 (MSD)
From:      Oleg Sharoiko <os@rsu.ru>
To:        freebsd-hackers@FreeBSD.ORG
Subject:   Bug in advansys driver
Message-ID:  <Pine.BSF.4.10.10005231137570.86096-200000@altos.rsu.ru>

next in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
Hello!

It seems that during porting to newbus architecture adv_attach was left
unchanged and current version (I mean the current version of -STABLE
sources, I didn't check -CURRENT) returns incorrect values (1 on success, 0 in
all other cases). I've fixed this, the patch is in the attached file. I'm not
sure that I put correct error codes for all cases so I think it would be good
if someone looks through it. Anyway this code works (at least for me) and
-STABLE sources don't. Hope this small work will be useful.

--
Oleg Sharoiko.
Computer Center of
Rostov State University.

[-- Attachment #2 --]
Index: advansys.c
===================================================================
RCS file: /usr/cvs/FreeBSD/src/sys/dev/advansys/advansys.c,v
retrieving revision 1.14.2.1
diff -u -r1.14.2.1 advansys.c
--- advansys.c	2000/04/14 13:32:47	1.14.2.1
+++ advansys.c	2000/05/23 07:21:34
@@ -1303,7 +1303,7 @@
 				M_DEVBUF, M_NOWAIT);
 
 	if (adv->ccb_infos == NULL)
-		goto error_exit;
+		return (ENOMEM);
 
 	adv->init_level++;
 		
@@ -1345,7 +1345,7 @@
 			       /*maxsegsz*/BUS_SPACE_MAXSIZE_32BIT,
 			       /*flags*/BUS_DMA_ALLOCNOW,
 			       &adv->buffer_dmat) != 0) {
-		goto error_exit;
+		return (ENXIO);
 	}
 	adv->init_level++;
 
@@ -1358,7 +1358,7 @@
 			       /*nsegments*/1,
 			       /*maxsegsz*/BUS_SPACE_MAXSIZE_32BIT,
 			       /*flags*/0, &adv->sense_dmat) != 0) {
-		goto error_exit;
+		return (ENXIO);
         }
 
 	adv->init_level++;
@@ -1366,7 +1366,7 @@
 	/* Allocation for our sense buffers */
 	if (bus_dmamem_alloc(adv->sense_dmat, (void **)&adv->sense_buffers,
 			     BUS_DMA_NOWAIT, &adv->sense_dmamap) != 0) {
-		goto error_exit;
+		return (ENOMEM);
 	}
 
 	adv->init_level++;
@@ -1385,7 +1385,7 @@
 	if (adv_start_chip(adv) != 1) {
 		printf("adv%d: Unable to start on board processor. Aborting.\n",
 		       adv->unit);
-		return (0);
+		return (ENXIO);
 	}
 
 	/*
@@ -1393,7 +1393,7 @@
 	 */
 	devq = cam_simq_alloc(adv->max_openings);
 	if (devq == NULL)
-		return (0);
+		return (ENOMEM);
 
 	/*
 	 * Construct our SIM entry.
@@ -1401,7 +1401,7 @@
 	adv->sim = cam_sim_alloc(adv_action, adv_poll, "adv", adv, adv->unit,
 				 1, adv->max_openings, devq);
 	if (adv->sim == NULL)
-		return (0);
+		return (ENOMEM);
 
 	/*
 	 * Register the bus.
@@ -1410,21 +1410,18 @@
 	 */
 	if (xpt_bus_register(adv->sim, 0) != CAM_SUCCESS) {
 		cam_sim_free(adv->sim, /*free devq*/TRUE);
-		return (0);
+		return (ENXIO);
 	}
 
 	if (xpt_create_path(&adv->path, /*periph*/NULL, cam_sim_path(adv->sim),
-			    CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD)
-	   == CAM_REQ_CMP) {
-		xpt_setup_ccb(&csa.ccb_h, adv->path, /*priority*/5);
-		csa.ccb_h.func_code = XPT_SASYNC_CB;
-		csa.event_enable = AC_FOUND_DEVICE|AC_LOST_DEVICE;
-		csa.callback = advasync;
-		csa.callback_arg = adv;
-		xpt_action((union ccb *)&csa);
-	}
-	return (1);
+		CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP)
+		return (ENXIO);
 
-error_exit:
+	xpt_setup_ccb(&csa.ccb_h, adv->path, /*priority*/5);
+	csa.ccb_h.func_code = XPT_SASYNC_CB;
+	csa.event_enable = AC_FOUND_DEVICE|AC_LOST_DEVICE;
+	csa.callback = advasync;
+	csa.callback_arg = adv;
+	xpt_action((union ccb *)&csa);
 	return (0);
 }

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.10.10005231137570.86096-200000>