Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 May 2007 14:20:38 GMT
From:      Warner Losh <imp@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 119970 for review
Message-ID:  <200705171420.l4HEKckf019997@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=119970

Change 119970 by imp@imp_paco-paco on 2007/05/17 14:19:42

	IFC @119967

Affected files ...

.. //depot/projects/arm/src/sys/amd64/linux32/linux32_sysvec.c#15 integrate
.. //depot/projects/arm/src/sys/cam/cam_periph.c#10 integrate
.. //depot/projects/arm/src/sys/cam/cam_xpt.c#19 integrate
.. //depot/projects/arm/src/sys/cam/cam_xpt.h#5 integrate
.. //depot/projects/arm/src/sys/cam/scsi/scsi_cd.c#8 integrate
.. //depot/projects/arm/src/sys/cam/scsi/scsi_ch.c#5 integrate
.. //depot/projects/arm/src/sys/cam/scsi/scsi_da.c#19 integrate
.. //depot/projects/arm/src/sys/cam/scsi/scsi_pass.c#6 integrate
.. //depot/projects/arm/src/sys/cam/scsi/scsi_pt.c#5 integrate
.. //depot/projects/arm/src/sys/cam/scsi/scsi_sa.c#7 integrate
.. //depot/projects/arm/src/sys/cam/scsi/scsi_ses.c#5 integrate
.. //depot/projects/arm/src/sys/cam/scsi/scsi_sg.c#5 integrate
.. //depot/projects/arm/src/sys/cam/scsi/scsi_targ_bh.c#5 integrate
.. //depot/projects/arm/src/sys/compat/ia32/ia32_sysvec.c#5 integrate
.. //depot/projects/arm/src/sys/conf/Makefile.amd64#5 integrate
.. //depot/projects/arm/src/sys/conf/Makefile.arm#18 integrate
.. //depot/projects/arm/src/sys/conf/Makefile.i386#6 integrate
.. //depot/projects/arm/src/sys/conf/Makefile.ia64#5 integrate
.. //depot/projects/arm/src/sys/conf/Makefile.pc98#6 integrate
.. //depot/projects/arm/src/sys/conf/Makefile.powerpc#5 integrate
.. //depot/projects/arm/src/sys/conf/Makefile.sparc64#5 integrate
.. //depot/projects/arm/src/sys/conf/Makefile.sun4v#3 integrate
.. //depot/projects/arm/src/sys/conf/NOTES#48 integrate
.. //depot/projects/arm/src/sys/conf/files#72 integrate
.. //depot/projects/arm/src/sys/conf/options#45 integrate
.. //depot/projects/arm/src/sys/dev/acpica/acpi.c#20 integrate
.. //depot/projects/arm/src/sys/dev/acpica/acpi_hpet.c#5 integrate
.. //depot/projects/arm/src/sys/dev/acpica/acpivar.h#10 integrate
.. //depot/projects/arm/src/sys/dev/bce/if_bce.c#18 integrate
.. //depot/projects/arm/src/sys/dev/bce/if_bcefw.h#3 integrate
.. //depot/projects/arm/src/sys/dev/bce/if_bcereg.h#8 integrate
.. //depot/projects/arm/src/sys/dev/cardbus/cardbus.c#10 integrate
.. //depot/projects/arm/src/sys/dev/cardbus/cardbus_cis.c#7 integrate
.. //depot/projects/arm/src/sys/dev/ciss/ciss.c#14 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_80003es2lan.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_80003es2lan.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82540.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82541.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82541.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82542.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82543.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82543.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82571.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82571.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82575.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_82575.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_api.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_api.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_defines.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_hw.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_ich8lan.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_ich8lan.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_mac.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_mac.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_manage.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_manage.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_nvm.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_nvm.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_osdep.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_phy.c#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_phy.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/e1000_regs.h#2 integrate
.. //depot/projects/arm/src/sys/dev/em/if_em.c#38 integrate
.. //depot/projects/arm/src/sys/dev/em/if_em.h#16 integrate
.. //depot/projects/arm/src/sys/dev/mfi/mfi.c#16 integrate
.. //depot/projects/arm/src/sys/dev/mfi/mfi_cam.c#1 branch
.. //depot/projects/arm/src/sys/dev/mfi/mfireg.h#7 integrate
.. //depot/projects/arm/src/sys/dev/mfi/mfivar.h#7 integrate
.. //depot/projects/arm/src/sys/dev/mmc/mmc.c#24 integrate
.. //depot/projects/arm/src/sys/dev/mmc/mmcsd.c#12 integrate
.. //depot/projects/arm/src/sys/dev/mmc/mmcvar.h#3 integrate
.. //depot/projects/arm/src/sys/dev/pccbb/pccbb.c#16 integrate
.. //depot/projects/arm/src/sys/dev/pci/pci.c#28 integrate
.. //depot/projects/arm/src/sys/dev/pci/pci_private.h#12 integrate
.. //depot/projects/arm/src/sys/dev/pci/pcireg.h#12 integrate
.. //depot/projects/arm/src/sys/dev/uart/uart_bus_pci.c#7 integrate
.. //depot/projects/arm/src/sys/geom/part/g_part.c#4 integrate
.. //depot/projects/arm/src/sys/kern/imgact_elf.c#9 integrate
.. //depot/projects/arm/src/sys/kern/kern_exec.c#17 integrate
.. //depot/projects/arm/src/sys/kern/kern_exit.c#22 integrate
.. //depot/projects/arm/src/sys/kern/kern_mib.c#6 integrate
.. //depot/projects/arm/src/sys/kern/kern_resource.c#16 integrate
.. //depot/projects/arm/src/sys/kern/uipc_domain.c#6 integrate
.. //depot/projects/arm/src/sys/kern/uipc_mbuf.c#19 integrate
.. //depot/projects/arm/src/sys/kern/uipc_sockbuf.c#8 integrate
.. //depot/projects/arm/src/sys/kern/uipc_socket.c#37 integrate
.. //depot/projects/arm/src/sys/kern/uipc_syscalls.c#24 integrate
.. //depot/projects/arm/src/sys/modules/mfi/Makefile#5 integrate
.. //depot/projects/arm/src/sys/modules/mfi/mfip/Makefile#1 branch
.. //depot/projects/arm/src/sys/modules/netgraph/Makefile#6 integrate
.. //depot/projects/arm/src/sys/modules/netgraph/car/Makefile#1 branch
.. //depot/projects/arm/src/sys/net/ieee8023ad_lacp.c#4 integrate
.. //depot/projects/arm/src/sys/net/ieee8023ad_lacp.h#3 integrate
.. //depot/projects/arm/src/sys/net/if.c#21 integrate
.. //depot/projects/arm/src/sys/net/if.h#10 integrate
.. //depot/projects/arm/src/sys/net/if_lagg.c#4 integrate
.. //depot/projects/arm/src/sys/net/if_lagg.h#4 integrate
.. //depot/projects/arm/src/sys/net/if_var.h#10 integrate
.. //depot/projects/arm/src/sys/netgraph/ng_car.c#1 branch
.. //depot/projects/arm/src/sys/netgraph/ng_car.h#1 branch
.. //depot/projects/arm/src/sys/netinet/ip_input.c#19 integrate
.. //depot/projects/arm/src/sys/netinet/sctp.h#6 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_asconf.c#9 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_auth.c#9 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_constants.h#11 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_indata.c#14 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_input.c#14 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_output.c#14 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_pcb.c#14 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_sysctl.c#4 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_timer.c#10 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_uio.h#12 integrate
.. //depot/projects/arm/src/sys/netinet/sctp_usrreq.c#14 integrate
.. //depot/projects/arm/src/sys/netinet/sctputil.c#14 integrate
.. //depot/projects/arm/src/sys/netinet/tcp_input.c#30 integrate
.. //depot/projects/arm/src/sys/netinet/tcp_subr.c#25 integrate
.. //depot/projects/arm/src/sys/netinet/tcp_timer.c#16 integrate
.. //depot/projects/arm/src/sys/netinet/tcp_timer.h#8 integrate
.. //depot/projects/arm/src/sys/netinet/tcp_timewait.c#2 integrate
.. //depot/projects/arm/src/sys/netinet/tcp_var.h#19 integrate
.. //depot/projects/arm/src/sys/netinet/udp_usrreq.c#20 integrate
.. //depot/projects/arm/src/sys/netinet6/ip6_input.c#10 integrate
.. //depot/projects/arm/src/sys/netinet6/sctp6_usrreq.c#12 integrate
.. //depot/projects/arm/src/sys/sys/sysent.h#9 integrate

Differences ...

==== //depot/projects/arm/src/sys/amd64/linux32/linux32_sysvec.c#15 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.28 2007/04/02 18:38:12 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_sysvec.c,v 1.29 2007/05/14 22:40:04 jhb Exp $");
 #include "opt_compat.h"
 
 #ifndef COMPAT_IA32
@@ -121,7 +121,7 @@
 static void     linux_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask);
 static void	exec_linux_setregs(struct thread *td, u_long entry,
 				   u_long stack, u_long ps_strings);
-static void	linux32_fixlimits(struct proc *p);
+static void	linux32_fixlimit(struct rlimit *rl, int which);
 
 extern LIST_HEAD(futex_list, futex) futex_list;
 extern struct sx futex_sx;
@@ -965,42 +965,36 @@
 SYSCTL_ULONG(_compat_linux32, OID_AUTO, maxvmem, CTLFLAG_RW,
     &linux32_maxvmem, 0, "");
 
-/*
- * XXX copied from ia32_sysvec.c.
- */
 static void
-linux32_fixlimits(struct proc *p)
+linux32_fixlimit(struct rlimit *rl, int which)
 {
-	struct plimit *oldlim, *newlim;
 
-	if (linux32_maxdsiz == 0 && linux32_maxssiz == 0 &&
-	    linux32_maxvmem == 0)
-		return;
-	newlim = lim_alloc();
-	PROC_LOCK(p);
-	oldlim = p->p_limit;
-	lim_copy(newlim, oldlim);
-	if (linux32_maxdsiz != 0) {
-		if (newlim->pl_rlimit[RLIMIT_DATA].rlim_cur > linux32_maxdsiz)
-		    newlim->pl_rlimit[RLIMIT_DATA].rlim_cur = linux32_maxdsiz;
-		if (newlim->pl_rlimit[RLIMIT_DATA].rlim_max > linux32_maxdsiz)
-		    newlim->pl_rlimit[RLIMIT_DATA].rlim_max = linux32_maxdsiz;
-	}
-	if (linux32_maxssiz != 0) {
-		if (newlim->pl_rlimit[RLIMIT_STACK].rlim_cur > linux32_maxssiz)
-		    newlim->pl_rlimit[RLIMIT_STACK].rlim_cur = linux32_maxssiz;
-		if (newlim->pl_rlimit[RLIMIT_STACK].rlim_max > linux32_maxssiz)
-		    newlim->pl_rlimit[RLIMIT_STACK].rlim_max = linux32_maxssiz;
-	}
-	if (linux32_maxvmem != 0) {
-		if (newlim->pl_rlimit[RLIMIT_VMEM].rlim_cur > linux32_maxvmem)
-		    newlim->pl_rlimit[RLIMIT_VMEM].rlim_cur = linux32_maxvmem;
-		if (newlim->pl_rlimit[RLIMIT_VMEM].rlim_max > linux32_maxvmem)
-		    newlim->pl_rlimit[RLIMIT_VMEM].rlim_max = linux32_maxvmem;
+	switch (which) {
+	case RLIMIT_DATA:
+		if (linux32_maxdsiz != 0) {			
+			if (rl->rlim_cur > linux32_maxdsiz)
+				rl->rlim_cur = linux32_maxdsiz;
+			if (rl->rlim_max > linux32_maxdsiz)
+				rl->rlim_max = linux32_maxdsiz;
+		}
+		break;
+	case RLIMIT_STACK:
+		if (linux32_maxssiz != 0) {
+			if (rl->rlim_cur > linux32_maxssiz)
+				rl->rlim_cur = linux32_maxssiz;
+			if (rl->rlim_max > linux32_maxssiz)
+				rl->rlim_max = linux32_maxssiz;
+		}
+		break;
+	case RLIMIT_VMEM:
+		if (linux32_maxvmem != 0) {
+			if (rl->rlim_cur > linux32_maxvmem)
+				rl->rlim_cur = linux32_maxvmem;
+			if (rl->rlim_max > linux32_maxvmem)
+				rl->rlim_max = linux32_maxvmem;
+		}
+		break;
 	}
-	p->p_limit = newlim;
-	PROC_UNLOCK(p);
-	lim_free(oldlim);
 }
 
 struct sysentvec elf_linux_sysvec = {
@@ -1029,7 +1023,7 @@
 	VM_PROT_ALL,
 	linux_copyout_strings,
 	exec_linux_setregs,
-	linux32_fixlimits
+	linux32_fixlimit
 };
 
 static Elf32_Brandinfo linux_brand = {

==== //depot/projects/arm/src/sys/cam/cam_periph.c#10 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.68 2007/04/19 23:34:51 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.69 2007/05/14 21:48:52 scottl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -102,7 +102,8 @@
 	int ndrivers;
 
 	ndrivers = nperiph_drivers + 2;
-	newdrivers = malloc(sizeof(*newdrivers) * ndrivers, M_TEMP, M_WAITOK);
+	newdrivers = malloc(sizeof(*newdrivers) * ndrivers, M_CAMPERIPH,
+			    M_WAITOK);
 	if (periph_drivers)
 		bcopy(periph_drivers, newdrivers,
 		      sizeof(*newdrivers) * nperiph_drivers);
@@ -111,7 +112,7 @@
 	old = periph_drivers;
 	periph_drivers = newdrivers;
 	if (old)
-		free(old, M_TEMP);
+		free(old, M_CAMPERIPH);
 	nperiph_drivers++;
 }
 

==== //depot/projects/arm/src/sys/cam/cam_xpt.c#19 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.183 2007/04/27 14:23:05 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.187 2007/05/16 16:57:21 scottl Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -1197,6 +1197,7 @@
 			error = ENOTSUP;
 			break;
 		}
+		xpt_release_bus(bus);
 		break;
 	}
 	/*
@@ -1533,7 +1534,7 @@
 	 */
 	xsoftc.xpt_config_hook =
 	    (struct intr_config_hook *)malloc(sizeof(struct intr_config_hook),
-					      M_TEMP, M_NOWAIT | M_ZERO);
+					      M_CAMXPT, M_NOWAIT | M_ZERO);
 	if (xsoftc.xpt_config_hook == NULL) {
 		printf("xpt_init: Cannot malloc config hook "
 		       "- failing attach\n");
@@ -1542,7 +1543,7 @@
 
 	xsoftc.xpt_config_hook->ich_func = xpt_config;
 	if (config_intrhook_establish(xsoftc.xpt_config_hook) != 0) {
-		free (xsoftc.xpt_config_hook, M_TEMP);
+		free (xsoftc.xpt_config_hook, M_CAMXPT);
 		printf("xpt_init: config_intrhook_establish failed "
 		       "- failing attach\n");
 	}
@@ -4139,7 +4140,6 @@
 void
 xpt_print_path(struct cam_path *path)
 {
-	mtx_assert(path->bus->sim->mtx, MA_OWNED);
 
 	if (path == NULL)
 		printf("(nopath): ");
@@ -5243,7 +5243,7 @@
 
 		/* Save some state for use while we probe for devices */
 		scan_info = (xpt_scan_bus_info *)
-		    malloc(sizeof(xpt_scan_bus_info), M_TEMP, M_NOWAIT);
+		    malloc(sizeof(xpt_scan_bus_info), M_CAMXPT, M_NOWAIT);
 		scan_info->request_ccb = request_ccb;
 		scan_info->cpi = &work_ccb->cpi;
 
@@ -5277,7 +5277,7 @@
 				printf("xpt_scan_bus: xpt_create_path failed"
 				       " with status %#x, bus scan halted\n",
 				       status);
-				free(scan_info, M_TEMP);
+				free(scan_info, M_CAMXPT);
 				request_ccb->ccb_h.status = status;
 				xpt_free_ccb(work_ccb);
 				xpt_done(request_ccb);
@@ -5285,7 +5285,7 @@
 			}
 			work_ccb = xpt_alloc_ccb_nowait();
 			if (work_ccb == NULL) {
-				free(scan_info, M_TEMP);
+				free(scan_info, M_CAMXPT);
 				xpt_free_path(path);
 				request_ccb->ccb_h.status = CAM_RESRC_UNAVAIL;
 				xpt_done(request_ccb);
@@ -5398,7 +5398,7 @@
 				xpt_free_ccb(request_ccb);
 				xpt_free_ccb((union ccb *)scan_info->cpi);
 				request_ccb = scan_info->request_ccb;
-				free(scan_info, M_TEMP);
+				free(scan_info, M_CAMXPT);
 				request_ccb->ccb_h.status = CAM_REQ_CMP;
 				xpt_done(request_ccb);
 				break;
@@ -5417,7 +5417,7 @@
 				xpt_free_ccb(request_ccb);
 				xpt_free_ccb((union ccb *)scan_info->cpi);
 				request_ccb = scan_info->request_ccb;
-				free(scan_info, M_TEMP);
+				free(scan_info, M_CAMXPT);
 				request_ccb->ccb_h.status = status;
 				xpt_done(request_ccb);
 				break;
@@ -5518,17 +5518,17 @@
 	}
 
 	if (request_ccb == NULL) {
-		request_ccb = malloc(sizeof(union ccb), M_TEMP, M_NOWAIT);
+		request_ccb = malloc(sizeof(union ccb), M_CAMXPT, M_NOWAIT);
 		if (request_ccb == NULL) {
 			xpt_print(path, "xpt_scan_lun: can't allocate CCB, "
 			    "can't continue\n");
 			return;
 		}
-		new_path = malloc(sizeof(*new_path), M_TEMP, M_NOWAIT);
+		new_path = malloc(sizeof(*new_path), M_CAMXPT, M_NOWAIT);
 		if (new_path == NULL) {
 			xpt_print(path, "xpt_scan_lun: can't allocate path, "
 			    "can't continue\n");
-			free(request_ccb, M_TEMP);
+			free(request_ccb, M_CAMXPT);
 			return;
 		}
 		status = xpt_compile_path(new_path, xpt_periph,
@@ -5539,8 +5539,8 @@
 		if (status != CAM_REQ_CMP) {
 			xpt_print(path, "xpt_scan_lun: can't compile path, "
 			    "can't continue\n");
-			free(request_ccb, M_TEMP);
-			free(new_path, M_TEMP);
+			free(request_ccb, M_CAMXPT);
+			free(new_path, M_CAMXPT);
 			return;
 		}
 		xpt_setup_ccb(&request_ccb->ccb_h, new_path, /*priority*/ 1);
@@ -5575,8 +5575,8 @@
 xptscandone(struct cam_periph *periph, union ccb *done_ccb)
 {
 	xpt_release_path(done_ccb->ccb_h.path);
-	free(done_ccb->ccb_h.path, M_TEMP);
-	free(done_ccb, M_TEMP);
+	free(done_ccb->ccb_h.path, M_CAMXPT);
+	free(done_ccb, M_CAMXPT);
 }
 
 static cam_status
@@ -5598,7 +5598,7 @@
 		return(CAM_REQ_CMP_ERR);
 	}
 
-	softc = (probe_softc *)malloc(sizeof(*softc), M_TEMP, M_NOWAIT);
+	softc = (probe_softc *)malloc(sizeof(*softc), M_CAMXPT, M_NOWAIT);
 
 	if (softc == NULL) {
 		printf("proberegister: Unable to probe new device. "
@@ -5751,7 +5751,7 @@
 	
 		if (softc->action == PROBE_INQUIRY_BASIC_DV1
 		 || softc->action == PROBE_INQUIRY_BASIC_DV2) {
-			inq_buf = malloc(inquiry_len, M_TEMP, M_NOWAIT);
+			inq_buf = malloc(inquiry_len, M_CAMXPT, M_NOWAIT);
 		}
 		if (inq_buf == NULL) {
 			xpt_print(periph->path, "malloc failure- skipping Basic"
@@ -5785,7 +5785,7 @@
 		mode_buf_len = sizeof(struct scsi_mode_header_6)
 			     + sizeof(struct scsi_mode_blk_desc)
 			     + sizeof(struct scsi_control_page);
-		mode_buf = malloc(mode_buf_len, M_TEMP, M_NOWAIT);
+		mode_buf = malloc(mode_buf_len, M_CAMXPT, M_NOWAIT);
 		if (mode_buf != NULL) {
 	                scsi_mode_sense(csio,
 					/*retries*/4,
@@ -5817,7 +5817,7 @@
 
 		if ((device->quirk->quirks & CAM_QUIRK_NOSERIAL) == 0)
 			serial_buf = (struct scsi_vpd_unit_serial_number *)
-				malloc(sizeof(*serial_buf), M_TEMP,
+				malloc(sizeof(*serial_buf), M_CAMXPT,
 					M_NOWAIT | M_ZERO);
 
 		if (serial_buf != NULL) {
@@ -6107,7 +6107,7 @@
 					 /*count*/1, /*run_queue*/TRUE);
 		}
 		xpt_release_ccb(done_ccb);
-		free(mode_hdr, M_TEMP);
+		free(mode_hdr, M_CAMXPT);
 		softc->action = PROBE_SERIAL_NUM;
 		xpt_schedule(periph, priority);
 		return;
@@ -6194,7 +6194,7 @@
 				xpt_async(AC_LOST_DEVICE, path, NULL);
 		}
 		if (serial_buf != NULL)
-			free(serial_buf, M_TEMP);
+			free(serial_buf, M_CAMXPT);
 
 		if (changed != 0) {
 			/*
@@ -6283,12 +6283,12 @@
 				/* give up */
 				softc->action = PROBE_DV_EXIT;
 			}
-			free(nbuf, M_TEMP);
+			free(nbuf, M_CAMXPT);
 			xpt_release_ccb(done_ccb);
 			xpt_schedule(periph, priority);
 			return;
 		}
-		free(nbuf, M_TEMP);
+		free(nbuf, M_CAMXPT);
 		if (softc->action == PROBE_INQUIRY_BASIC_DV1) {
 			softc->action = PROBE_INQUIRY_BASIC_DV2;
 			xpt_release_ccb(done_ccb);
@@ -6327,7 +6327,7 @@
 static void
 probecleanup(struct cam_periph *periph)
 {
-	free(periph->softc, M_TEMP);
+	free(periph->softc, M_CAMXPT);
 }
 
 static void
@@ -6984,7 +6984,7 @@
 
 		/* Release our hook so that the boot can continue. */
 		config_intrhook_disestablish(xsoftc.xpt_config_hook);
-		free(xsoftc.xpt_config_hook, M_TEMP);
+		free(xsoftc.xpt_config_hook, M_CAMXPT);
 		xsoftc.xpt_config_hook = NULL;
 	}
 
@@ -7029,6 +7029,39 @@
 		xpt_free_ccb(done_ccb);
 }
 
+cam_status
+xpt_register_async(int event, ac_callback_t *cbfunc, void *cbarg,
+		   struct cam_path *path)
+{
+	struct ccb_setasync csa;
+	cam_status status;
+	int xptpath = 0;
+
+	if (path == NULL) {
+		mtx_lock(&xsoftc.xpt_lock);
+		status = xpt_create_path(&path, /*periph*/NULL, CAM_XPT_PATH_ID,
+					 CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD);
+		if (status != CAM_REQ_CMP) {
+			mtx_unlock(&xsoftc.xpt_lock);
+			return (status);
+		}
+		xptpath = 1;
+	}
+
+	xpt_setup_ccb(&csa.ccb_h, path, /*priority*/5);
+	csa.ccb_h.func_code = XPT_SASYNC_CB;
+	csa.event_enable = event;
+	csa.callback = cbfunc;
+	csa.callback_arg = cbarg;
+	xpt_action((union ccb *)&csa);
+	status = csa.ccb_h.status;
+	if (xptpath) {
+		xpt_free_path(path);
+		mtx_unlock(&xsoftc.xpt_lock);
+	}
+	return (status);
+}
+
 static void
 xptaction(struct cam_sim *sim, union ccb *work_ccb)
 {

==== //depot/projects/arm/src/sys/cam/cam_xpt.h#5 (text+ko) ====

@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/cam/cam_xpt.h,v 1.8 2007/04/15 08:49:09 scottl Exp $
+ * $FreeBSD: src/sys/cam/cam_xpt.h,v 1.9 2007/05/16 16:54:23 scottl Exp $
  */
 
 #ifndef _CAM_CAM_XPT_H
@@ -79,6 +79,8 @@
 void			xpt_rescan(union ccb *ccb);
 void			xpt_lock_buses(void);
 void			xpt_unlock_buses(void);
+cam_status		xpt_register_async(int event, ac_callback_t *cbfunc,
+					   void *cbarg, struct cam_path *path);
 #endif /* _KERNEL */
 
 #endif /* _CAM_CAM_XPT_H */

==== //depot/projects/arm/src/sys/cam/scsi/scsi_cd.c#8 (text+ko) ====

@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_cd.c,v 1.99 2007/04/16 19:41:14 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_cd.c,v 1.101 2007/05/16 16:54:23 scottl Exp $");
 
 #include "opt_cd.h"
 
@@ -329,11 +329,12 @@
 static STAILQ_HEAD(changerlist, cdchanger) changerq;
 static int num_changers;
 
+MALLOC_DEFINE(M_SCSICD, "scsi_cd", "scsi_cd buffers");
+
 static void
 cdinit(void)
 {
 	cam_status status;
-	struct cam_path *path;
 
 	mtx_init(&changerq_mtx, "cdchangerq", "SCSI CD Changer List", MTX_DEF);
 	STAILQ_INIT(&changerq);
@@ -342,22 +343,8 @@
 	 * Install a global async callback.  This callback will
 	 * receive async callbacks like "new device found".
 	 */
-	status = xpt_create_path(&path, /*periph*/NULL, CAM_XPT_PATH_ID,
-				 CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD);
-
-	if (status == CAM_REQ_CMP) {
-		struct ccb_setasync csa;
+	status = xpt_register_async(AC_FOUND_DEVICE, cdasync, NULL, NULL);
 
-                xpt_setup_ccb(&csa.ccb_h, path, /*priority*/5);
-                csa.ccb_h.func_code = XPT_SASYNC_CB;
-                csa.event_enable = AC_FOUND_DEVICE;
-                csa.callback = cdasync;
-                csa.callback_arg = NULL;
-                xpt_action((union ccb *)&csa);
-		status = csa.ccb_h.status;
-                xpt_free_path(path);
-        }
-
 	if (status != CAM_REQ_CMP) {
 		printf("cd: Failed to attach master async callback "
 		       "due to status 0x%x!\n", status);
@@ -368,20 +355,13 @@
 cdoninvalidate(struct cam_periph *periph)
 {
 	struct cd_softc *softc;
-	struct ccb_setasync csa;
 
 	softc = (struct cd_softc *)periph->softc;
 
 	/*
 	 * De-register any async callbacks.
 	 */
-	xpt_setup_ccb(&csa.ccb_h, periph->path,
-		      /* priority */ 5);
-	csa.ccb_h.func_code = XPT_SASYNC_CB;
-	csa.event_enable = 0;
-	csa.callback = cdasync;
-	csa.callback_arg = periph;
-	xpt_action((union ccb *)&csa);
+	xpt_register_async(0, cdasync, periph, periph->path);
 
 	softc->flags |= CD_FLAG_INVALID;
 
@@ -637,7 +617,6 @@
 cdregister(struct cam_periph *periph, void *arg)
 {
 	struct cd_softc *softc;
-	struct ccb_setasync csa;
 	struct ccb_pathinq cpi;
 	struct ccb_getdev *cgd;
 	char tmpstr[80];
@@ -749,13 +728,8 @@
 	 * Add an async callback so that we get
 	 * notified if this device goes away.
 	 */
-	xpt_setup_ccb(&csa.ccb_h, periph->path,
-		      /* priority */ 5);
-	csa.ccb_h.func_code = XPT_SASYNC_CB;
-	csa.event_enable = AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE;
-	csa.callback = cdasync;
-	csa.callback_arg = periph;
-	xpt_action((union ccb *)&csa);
+	xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE,
+			   cdasync, periph, periph->path);
 
 	/*
 	 * If the target lun is greater than 0, we most likely have a CD
@@ -1519,7 +1493,7 @@
 	{
 
 		rcap = (struct scsi_read_capacity_data *)malloc(sizeof(*rcap),
-								M_TEMP,
+								M_SCSICD,
 								M_NOWAIT);
 		if (rcap == NULL) {
 			xpt_print(periph->path,
@@ -1778,7 +1752,7 @@
 				}
 			}
 		}
-		free(rdcap, M_TEMP);
+		free(rdcap, M_SCSICD);
 		if (announce_buf[0] != '\0') {
 			xpt_announce_periph(periph, announce_buf);
 			if (softc->flags & CD_FLAG_CHANGER)
@@ -1906,7 +1880,7 @@
 			union cd_pages *page;
 
 			params.alloc_len = sizeof(union cd_mode_data_6_10);
-			params.mode_buf = malloc(params.alloc_len, M_TEMP,
+			params.mode_buf = malloc(params.alloc_len, M_SCSICD,
 						 M_WAITOK | M_ZERO);
 
 			cam_periph_lock(periph);
@@ -1915,7 +1889,7 @@
 
 			error = cdgetmode(periph, &params, AUDIO_PAGE);
 			if (error) {
-				free(params.mode_buf, M_TEMP);
+				free(params.mode_buf, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -1924,7 +1898,7 @@
 			page->audio.flags &= ~CD_PA_SOTC;
 			page->audio.flags |= CD_PA_IMMED;
 			error = cdsetmode(periph, &params);
-			free(params.mode_buf, M_TEMP);
+			free(params.mode_buf, M_SCSICD);
 			if (error) {
 				cam_periph_unlock(periph);
 				break;
@@ -2001,7 +1975,7 @@
 			union cd_pages *page;
 
 			params.alloc_len = sizeof(union cd_mode_data_6_10);
-			params.mode_buf = malloc(params.alloc_len, M_TEMP,
+			params.mode_buf = malloc(params.alloc_len, M_SCSICD,
 						 M_WAITOK | M_ZERO);
 
 			cam_periph_lock(periph);
@@ -2010,7 +1984,7 @@
 
 			error = cdgetmode(periph, &params, AUDIO_PAGE);
 			if (error) {
-				free(params.mode_buf, M_TEMP);
+				free(params.mode_buf, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2019,7 +1993,7 @@
 			page->audio.flags &= ~CD_PA_SOTC;
 			page->audio.flags |= CD_PA_IMMED;
 			error = cdsetmode(periph, &params);
-			free(params.mode_buf, M_TEMP);
+			free(params.mode_buf, M_SCSICD);
 			if (error) {
 				cam_periph_unlock(periph);
 				break;
@@ -2042,7 +2016,7 @@
 			union cd_pages *page;
 
 			params.alloc_len = sizeof(union cd_mode_data_6_10);
-			params.mode_buf = malloc(params.alloc_len, M_TEMP,
+			params.mode_buf = malloc(params.alloc_len, M_SCSICD,
 						 M_WAITOK | M_ZERO);
 
 			cam_periph_lock(periph);
@@ -2052,7 +2026,7 @@
 
 			error = cdgetmode(periph, &params, AUDIO_PAGE);
 			if (error) {
-				free(params.mode_buf, M_TEMP);
+				free(params.mode_buf, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2061,7 +2035,7 @@
 			page->audio.flags &= ~CD_PA_SOTC;
 			page->audio.flags |= CD_PA_IMMED;
 			error = cdsetmode(periph, &params);
-			free(params.mode_buf, M_TEMP);
+			free(params.mode_buf, M_SCSICD);
 			if (error) {
 				cam_periph_unlock(periph);
 				break;
@@ -2081,7 +2055,7 @@
 			u_int32_t len = args->data_len;
 
 			data = malloc(sizeof(struct cd_sub_channel_info), 
-				      M_TEMP, M_WAITOK);
+				      M_SCSICD, M_WAITOK);
 
 			cam_periph_lock(periph);
 			CAM_DEBUG(periph->path, CAM_DEBUG_SUBTRACE, 
@@ -2094,7 +2068,7 @@
 					"cdioreadsubchannel: error, len=%d\n",
 					len);
 				error = EINVAL;
-				free(data, M_TEMP);
+				free(data, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2106,7 +2080,7 @@
 				args->data_format, args->track, data, len);
 
 			if (error) {
-				free(data, M_TEMP);
+				free(data, M_SCSICD);
 				cam_periph_unlock(periph);
 	 			break;
 			}
@@ -2124,7 +2098,7 @@
 			} else {
 				bcopy(data, args->data, len);
 			}
-			free(data, M_TEMP);
+			free(data, M_SCSICD);
 		}
 		break;
 
@@ -2132,7 +2106,7 @@
 		{
 			struct ioc_toc_header *th;
 
-			th = malloc(sizeof(struct ioc_toc_header), M_TEMP,
+			th = malloc(sizeof(struct ioc_toc_header), M_SCSICD,
 				    M_WAITOK);
 
 			cam_periph_lock(periph);
@@ -2142,7 +2116,7 @@
 			error = cdreadtoc(periph, 0, 0, (u_int8_t *)th, 
 				          sizeof (*th), /*sense_flags*/0);
 			if (error) {
-				free(th, M_TEMP);
+				free(th, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2156,7 +2130,7 @@
 			}
 			th->len = ntohs(th->len);
 			bcopy(th, addr, sizeof(*th));
-			free(th, M_TEMP);
+			free(th, M_SCSICD);
 			cam_periph_unlock(periph);
 		}
 		break;
@@ -2170,8 +2144,8 @@
 			u_int32_t len, readlen, idx, num;
 			u_int32_t starting_track = te->starting_track;
 
-			data = malloc(sizeof(*data), M_TEMP, M_WAITOK);
-			lead = malloc(sizeof(*lead), M_TEMP, M_WAITOK);
+			data = malloc(sizeof(*data), M_SCSICD, M_WAITOK);
+			lead = malloc(sizeof(*lead), M_SCSICD, M_WAITOK);
 
 			cam_periph_lock(periph);
 			CAM_DEBUG(periph->path, CAM_DEBUG_SUBTRACE, 
@@ -2184,8 +2158,8 @@
 				error = EINVAL;
 				printf("scsi_cd: error in readtocentries, "
 				       "returning EINVAL\n");
-				free(data, M_TEMP);
-				free(lead, M_TEMP);
+				free(data, M_SCSICD);
+				free(lead, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2194,8 +2168,8 @@
 			error = cdreadtoc(periph, 0, 0, (u_int8_t *)th, 
 					  sizeof (*th), /*sense_flags*/0);
 			if (error) {
-				free(data, M_TEMP);
-				free(lead, M_TEMP);
+				free(data, M_SCSICD);
+				free(lead, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2217,8 +2191,8 @@
 				 starting_track > th->ending_track + 1) {
 				printf("scsi_cd: error in readtocentries, "
 				       "returning EINVAL\n");
-				free(data, M_TEMP);
-				free(lead, M_TEMP);
+				free(data, M_SCSICD);
+				free(lead, M_SCSICD);
 				cam_periph_unlock(periph);
 				error = EINVAL;
 				break;
@@ -2239,8 +2213,8 @@
 				printf("scsi_cd: error in readtocentries, "
 				       "returning EINVAL\n");
 				error = EINVAL;
-				free(data, M_TEMP);
-				free(lead, M_TEMP);
+				free(data, M_SCSICD);
+				free(lead, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2253,8 +2227,8 @@
 						  readlen + sizeof (*th),
 						  /*sense_flags*/0);
 				if (error) {
-					free(data, M_TEMP);
-					free(lead, M_TEMP);
+					free(data, M_SCSICD);
+					free(lead, M_SCSICD);
 					cam_periph_unlock(periph);
 					break;
 				}
@@ -2270,8 +2244,8 @@
 						  sizeof(*lead),
 						  /*sense_flags*/0);
 				if (error) {
-					free(data, M_TEMP);
-					free(lead, M_TEMP);
+					free(data, M_SCSICD);
+					free(lead, M_SCSICD);
 					cam_periph_unlock(periph);
 					break;
 				}
@@ -2287,8 +2261,8 @@
 
 			cam_periph_unlock(periph);
 			error = copyout(data->entries, te->data, len);
-			free(data, M_TEMP);
-			free(lead, M_TEMP);
+			free(data, M_SCSICD);
+			free(lead, M_SCSICD);
 		}
 		break;
 	case CDIOREADTOCENTRY:
@@ -2299,7 +2273,7 @@
 			struct ioc_toc_header *th;
 			u_int32_t track;
 
-			data = malloc(sizeof(*data), M_TEMP, M_WAITOK);
+			data = malloc(sizeof(*data), M_SCSICD, M_WAITOK);
 
 			cam_periph_lock(periph);
 			CAM_DEBUG(periph->path, CAM_DEBUG_SUBTRACE, 
@@ -2309,7 +2283,7 @@
 			    && te->address_format != CD_LBA_FORMAT) {
 				printf("error in readtocentry, "
 				       " returning EINVAL\n");
-				free(data, M_TEMP);
+				free(data, M_SCSICD);
 				error = EINVAL;
 				cam_periph_unlock(periph);
 				break;
@@ -2319,7 +2293,7 @@
 			error = cdreadtoc(periph, 0, 0, (u_int8_t *)th,
 					  sizeof (*th), /*sense_flags*/0);
 			if (error) {
-				free(data, M_TEMP);
+				free(data, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2341,7 +2315,7 @@
 				 track > th->ending_track + 1) {
 				printf("error in readtocentry, "
 				       " returning EINVAL\n");
-				free(data, M_TEMP);
+				free(data, M_SCSICD);
 				error = EINVAL;
 				cam_periph_unlock(periph);
 				break;
@@ -2351,7 +2325,7 @@
 					  (u_int8_t *)data, sizeof(*data),
 					  /*sense_flags*/0);
 			if (error) {
-				free(data, M_TEMP);
+				free(data, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2360,7 +2334,7 @@
 				data->entry.track = bcd2bin(data->entry.track);
 			bcopy(&data->entry, &te->entry,
 			      sizeof(struct cd_toc_entry));
-			free(data, M_TEMP);
+			free(data, M_SCSICD);
 			cam_periph_unlock(periph);
 		}
 		break;
@@ -2371,7 +2345,7 @@
 			union cd_pages *page;
 
 			params.alloc_len = sizeof(union cd_mode_data_6_10);
-			params.mode_buf = malloc(params.alloc_len, M_TEMP, 
+			params.mode_buf = malloc(params.alloc_len, M_SCSICD, 
 						 M_WAITOK | M_ZERO);
 
 			cam_periph_lock(periph);
@@ -2380,7 +2354,7 @@
 
 			error = cdgetmode(periph, &params, AUDIO_PAGE);
 			if (error) {
-				free(params.mode_buf, M_TEMP);
+				free(params.mode_buf, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2393,7 +2367,7 @@
 			page->audio.port[2].channels = arg->patch[2];
 			page->audio.port[3].channels = arg->patch[3];
 			error = cdsetmode(periph, &params);
-			free(params.mode_buf, M_TEMP);
+			free(params.mode_buf, M_SCSICD);
 			cam_periph_unlock(periph);
 		}
 		break;
@@ -2404,7 +2378,7 @@
 			union cd_pages *page;
 
 			params.alloc_len = sizeof(union cd_mode_data_6_10);
-			params.mode_buf = malloc(params.alloc_len, M_TEMP, 
+			params.mode_buf = malloc(params.alloc_len, M_SCSICD, 
 						 M_WAITOK | M_ZERO);
 
 			cam_periph_lock(periph);
@@ -2413,7 +2387,7 @@
 
 			error = cdgetmode(periph, &params, AUDIO_PAGE);
 			if (error) {
-				free(params.mode_buf, M_TEMP);
+				free(params.mode_buf, M_SCSICD);
 				cam_periph_unlock(periph);
 				break;
 			}
@@ -2425,7 +2399,7 @@
 				page->audio.port[RIGHT_PORT].volume;
 			arg->vol[2] = page->audio.port[2].volume;
 			arg->vol[3] = page->audio.port[3].volume;
-			free(params.mode_buf, M_TEMP);
+			free(params.mode_buf, M_SCSICD);
 			cam_periph_unlock(periph);
 		}
 		break;
@@ -2436,7 +2410,7 @@
 			union cd_pages *page;

>>> TRUNCATED FOR MAIL (1000 lines) <<<



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200705171420.l4HEKckf019997>