Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Mar 2006 20:39:20 GMT
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 94323 for review
Message-ID:  <200603302039.k2UKdKu6076274@repoman.freebsd.org>

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

Change 94323 by marcel@marcel_nfs on 2006/03/30 20:38:33

	IFC @94319

Affected files ...

.. //depot/projects/uart/compat/freebsd32/freebsd32_misc.c#14 integrate
.. //depot/projects/uart/compat/freebsd32/freebsd32_proto.h#14 integrate
.. //depot/projects/uart/compat/freebsd32/freebsd32_syscall.h#14 integrate
.. //depot/projects/uart/compat/freebsd32/freebsd32_syscalls.c#14 integrate
.. //depot/projects/uart/compat/freebsd32/freebsd32_sysent.c#14 integrate
.. //depot/projects/uart/compat/freebsd32/syscalls.master#13 integrate
.. //depot/projects/uart/conf/NOTES#32 integrate
.. //depot/projects/uart/conf/files#54 integrate
.. //depot/projects/uart/dev/acpica/Osd/OsdSchedule.c#10 integrate
.. //depot/projects/uart/dev/ata/atapi-fd.c#11 integrate
.. //depot/projects/uart/dev/pccbb/pccbb.c#16 integrate
.. //depot/projects/uart/dev/pccbb/pccbbreg.h#7 integrate
.. //depot/projects/uart/dev/puc/puc_ebus.c#12 integrate
.. //depot/projects/uart/dev/puc/puc_sbus.c#13 integrate
.. //depot/projects/uart/dev/scc/scc_bfe.h#14 integrate
.. //depot/projects/uart/dev/scc/scc_bfe_ebus.c#5 integrate
.. //depot/projects/uart/dev/scc/scc_bfe_sbus.c#4 integrate
.. //depot/projects/uart/dev/scc/scc_bus.h#8 integrate
.. //depot/projects/uart/dev/scc/scc_core.c#18 integrate
.. //depot/projects/uart/dev/scc/scc_dev_sab82532.c#7 integrate
.. //depot/projects/uart/dev/scc/scc_dev_z8530.c#9 integrate
.. //depot/projects/uart/dev/scc/scc_if.m#7 integrate
.. //depot/projects/uart/dev/sound/pcm/dsp.c#13 integrate
.. //depot/projects/uart/dev/uart/uart_bus.h#44 integrate
.. //depot/projects/uart/dev/uart/uart_bus_scc.c#8 integrate
.. //depot/projects/uart/dev/uart/uart_core.c#52 integrate
.. //depot/projects/uart/dev/uart/uart_cpu.h#18 integrate
.. //depot/projects/uart/dev/uart/uart_dev_ns8250.c#38 integrate
.. //depot/projects/uart/dev/uart/uart_dev_sab82532.c#40 integrate
.. //depot/projects/uart/dev/uart/uart_dev_z8530.c#28 integrate
.. //depot/projects/uart/dev/uart/uart_tty.c#28 integrate
.. //depot/projects/uart/geom/eli/g_eli.h#3 integrate
.. //depot/projects/uart/geom/mirror/g_mirror.c#13 integrate
.. //depot/projects/uart/geom/vinum/geom_vinum.c#7 integrate
.. //depot/projects/uart/geom/vinum/geom_vinum.h#6 integrate
.. //depot/projects/uart/geom/vinum/geom_vinum_rm.c#6 integrate
.. //depot/projects/uart/geom/vinum/geom_vinum_state.c#4 integrate
.. //depot/projects/uart/geom/vinum/geom_vinum_subr.c#5 integrate
.. //depot/projects/uart/kern/md5c.c#6 integrate
.. //depot/projects/uart/kern/serdev_if.m#4 integrate
.. //depot/projects/uart/kern/subr_turnstile.c#6 integrate
.. //depot/projects/uart/kern/sysv_shm.c#11 integrate
.. //depot/projects/uart/modules/Makefile#30 integrate
.. //depot/projects/uart/modules/scc/Makefile#2 integrate
.. //depot/projects/uart/modules/uart/Makefile#15 integrate
.. //depot/projects/uart/net/if_ppp.c#8 integrate
.. //depot/projects/uart/netipsec/xform.h#3 integrate
.. //depot/projects/uart/netipsec/xform_ipip.c#5 integrate
.. //depot/projects/uart/sparc64/conf/GENERIC#17 integrate
.. //depot/projects/uart/sys/serial.h#6 integrate
.. //depot/projects/uart/sys/sx.h#5 integrate

Differences ...

==== //depot/projects/uart/compat/freebsd32/freebsd32_misc.c#14 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/freebsd32/freebsd32_misc.c,v 1.53 2006/03/08 20:21:53 ups Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/freebsd32/freebsd32_misc.c,v 1.54 2006/03/30 07:42:32 ps Exp $");
 
 #include "opt_compat.h"
 
@@ -69,6 +69,8 @@
 #include <sys/unistd.h>
 #include <sys/vnode.h>
 #include <sys/wait.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
 
 #include <vm/vm.h>
 #include <vm/vm_kern.h>
@@ -1365,10 +1367,170 @@
 int
 freebsd32_shmsys(struct thread *td, struct freebsd32_shmsys_args *uap)
 {
-	/*
-	 * Vector through to shmsys if it is loaded.
-	 */
-	return sysent[SYS_shmsys].sy_call(td, uap);
+
+	switch (uap->which) {
+	case 0:	{	/* shmat */
+		struct shmat_args ap;
+
+		ap.shmid = uap->a2;
+		ap.shmaddr = PTRIN(uap->a3);
+		ap.shmflg = uap->a4;
+		return (sysent[SYS_shmat].sy_call(td, &ap));
+	}
+	case 2: {	/* shmdt */
+		struct shmdt_args ap;
+
+		ap.shmaddr = PTRIN(uap->a2);
+		return (sysent[SYS_shmdt].sy_call(td, &ap));
+	}
+	case 3: {	/* shmget */
+		struct shmget_args ap;
+
+		ap.key = uap->a2;
+		ap.size = uap->a3;
+		ap.shmflg = uap->a4;
+		return (sysent[SYS_shmget].sy_call(td, &ap));
+	}
+	case 4: {	/* shmctl */
+		struct freebsd32_shmctl_args ap;
+
+		ap.shmid = uap->a2;
+		ap.cmd = uap->a3;
+		ap.buf = PTRIN(uap->a4);
+		return (freebsd32_shmctl(td, &ap));
+	}
+	case 1:		/* oshmctl */
+	default:
+		return (EINVAL);
+	}
+}
+
+struct ipc_perm32 {
+	uint16_t	cuid;
+	uint16_t	cgid;
+	uint16_t	uid;
+	uint16_t	gid;
+	uint16_t	mode;
+	uint16_t	seq;
+	uint32_t	key;
+};
+struct shmid_ds32 {
+	struct ipc_perm32 shm_perm;
+	int32_t		shm_segsz;
+	int32_t		shm_lpid;
+	int32_t		shm_cpid;
+	int16_t		shm_nattch;
+	int32_t		shm_atime;
+	int32_t		shm_dtime;
+	int32_t		shm_ctime;
+	uint32_t	shm_internal;
+};
+struct shm_info32 {
+	int32_t		used_ids;
+	uint32_t	shm_tot;
+	uint32_t	shm_rss;
+	uint32_t	shm_swp;
+	uint32_t	swap_attempts;
+	uint32_t	swap_successes;
+};
+struct shminfo32 {
+	uint32_t	shmmax;
+	uint32_t	shmmin;
+	uint32_t	shmmni;
+	uint32_t	shmseg;
+	uint32_t	shmall;
+};
+
+int
+freebsd32_shmctl(struct thread *td, struct freebsd32_shmctl_args *uap)
+{
+	int error = 0;
+	union {
+		struct shmid_ds shmid_ds;
+		struct shm_info shm_info;
+		struct shminfo shminfo;
+	} u;
+	union {
+		struct shmid_ds32 shmid_ds32;
+		struct shm_info32 shm_info32;
+		struct shminfo32 shminfo32;
+	} u32;
+	size_t sz;
+	
+	if (uap->cmd == IPC_SET) {
+		if ((error = copyin(uap->buf, &u32.shmid_ds32,
+		    sizeof(u32.shmid_ds32))))
+			goto done;
+		CP(u32.shmid_ds32, u.shmid_ds, shm_perm.cuid);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_perm.cgid);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_perm.uid);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_perm.gid);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_perm.mode);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_perm.seq);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_perm.key);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_segsz);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_lpid);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_cpid);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_nattch);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_atime);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_dtime);
+		CP(u32.shmid_ds32, u.shmid_ds, shm_ctime);
+		PTRIN_CP(u32.shmid_ds32, u.shmid_ds, shm_internal);
+	}
+	
+	error = kern_shmctl(td, uap->shmid, uap->cmd, (void *)&u, &sz);
+	if (error)
+		goto done;
+	
+	/* Cases in which we need to copyout */
+	switch (uap->cmd) {
+	case IPC_INFO:
+		CP(u.shminfo, u32.shminfo32, shmmax);
+		CP(u.shminfo, u32.shminfo32, shmmin);
+		CP(u.shminfo, u32.shminfo32, shmmni);
+		CP(u.shminfo, u32.shminfo32, shmseg);
+		CP(u.shminfo, u32.shminfo32, shmall);
+		error = copyout(&u32.shminfo32, uap->buf,
+		    sizeof(u32.shminfo32));
+		break;
+	case SHM_INFO:
+		CP(u.shm_info, u32.shm_info32, used_ids);
+		CP(u.shm_info, u32.shm_info32, shm_rss);
+		CP(u.shm_info, u32.shm_info32, shm_tot);
+		CP(u.shm_info, u32.shm_info32, shm_swp);
+		CP(u.shm_info, u32.shm_info32, swap_attempts);
+		CP(u.shm_info, u32.shm_info32, swap_successes);
+		error = copyout(&u32.shm_info32, uap->buf,
+		    sizeof(u32.shm_info32));
+		break;
+	case SHM_STAT:
+	case IPC_STAT:
+		CP(u.shmid_ds, u32.shmid_ds32, shm_perm.cuid);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_perm.cgid);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_perm.uid);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_perm.gid);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_perm.mode);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_perm.seq);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_perm.key);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_segsz);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_lpid);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_cpid);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_nattch);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_atime);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_dtime);
+		CP(u.shmid_ds, u32.shmid_ds32, shm_ctime);
+		PTROUT_CP(u.shmid_ds, u32.shmid_ds32, shm_internal);
+		error = copyout(&u32.shmid_ds32, uap->buf,
+		    sizeof(u32.shmid_ds32));
+		break;
+	}
+
+done:
+	if (error) {
+		/* Invalidate the return value */
+		td->td_retval[0] = -1;
+	}
+	return (error);
 }
 
 int

==== //depot/projects/uart/compat/freebsd32/freebsd32_proto.h#14 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.53 2006/02/28 19:39:52 ps Exp $
+ * $FreeBSD: src/sys/compat/freebsd32/freebsd32_proto.h,v 1.54 2006/03/30 07:43:01 ps Exp $
  * created from FreeBSD
  */
 
@@ -130,10 +130,10 @@
 	char a6_l_[PADL_(int)]; int a6; char a6_r_[PADR_(int)];
 };
 struct freebsd32_shmsys_args {
-	char which_l_[PADL_(int)]; int which; char which_r_[PADR_(int)];
-	char a2_l_[PADL_(int)]; int a2; char a2_r_[PADR_(int)];
-	char a3_l_[PADL_(int)]; int a3; char a3_r_[PADR_(int)];
-	char a4_l_[PADL_(int)]; int a4; char a4_r_[PADR_(int)];
+	char which_l_[PADL_(uint32_t)]; uint32_t which; char which_r_[PADR_(uint32_t)];
+	char a2_l_[PADL_(uint32_t)]; uint32_t a2; char a2_r_[PADR_(uint32_t)];
+	char a3_l_[PADL_(uint32_t)]; uint32_t a3; char a3_r_[PADR_(uint32_t)];
+	char a4_l_[PADL_(uint32_t)]; uint32_t a4; char a4_r_[PADR_(uint32_t)];
 };
 struct freebsd32_pread_args {
 	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
@@ -204,6 +204,11 @@
 	char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)];
 	char tptr_l_[PADL_(struct timeval32 *)]; struct timeval32 * tptr; char tptr_r_[PADR_(struct timeval32 *)];
 };
+struct freebsd32_shmctl_args {
+	char shmid_l_[PADL_(int)]; int shmid; char shmid_r_[PADR_(int)];
+	char cmd_l_[PADL_(int)]; int cmd; char cmd_r_[PADR_(int)];
+	char buf_l_[PADL_(struct shmid_ds *)]; struct shmid_ds * buf; char buf_r_[PADR_(struct shmid_ds *)];
+};
 struct freebsd32_clock_gettime_args {
 	char clock_id_l_[PADL_(clockid_t)]; clockid_t clock_id; char clock_id_r_[PADR_(clockid_t)];
 	char tp_l_[PADL_(struct timespec32 *)]; struct timespec32 * tp; char tp_r_[PADR_(struct timespec32 *)];
@@ -306,6 +311,7 @@
 int	freebsd32_ftruncate(struct thread *, struct freebsd32_ftruncate_args *);
 int	freebsd32_sysctl(struct thread *, struct freebsd32_sysctl_args *);
 int	freebsd32_futimes(struct thread *, struct freebsd32_futimes_args *);
+int	freebsd32_shmctl(struct thread *, struct freebsd32_shmctl_args *);
 int	freebsd32_clock_gettime(struct thread *, struct freebsd32_clock_gettime_args *);
 int	freebsd32_clock_settime(struct thread *, struct freebsd32_clock_settime_args *);
 int	freebsd32_clock_getres(struct thread *, struct freebsd32_clock_getres_args *);

==== //depot/projects/uart/compat/freebsd32/freebsd32_syscall.h#14 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscall.h,v 1.51 2006/02/28 19:39:52 ps Exp $
+ * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscall.h,v 1.52 2006/03/30 07:43:01 ps Exp $
  * created from FreeBSD
  */
 
@@ -198,7 +198,7 @@
 #define	FREEBSD32_SYS_msgsnd	226
 #define	FREEBSD32_SYS_msgrcv	227
 #define	FREEBSD32_SYS_shmat	228
-#define	FREEBSD32_SYS_shmctl	229
+#define	FREEBSD32_SYS_freebsd32_shmctl	229
 #define	FREEBSD32_SYS_shmdt	230
 #define	FREEBSD32_SYS_shmget	231
 #define	FREEBSD32_SYS_freebsd32_clock_gettime	232

==== //depot/projects/uart/compat/freebsd32/freebsd32_syscalls.c#14 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call names.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscalls.c,v 1.42 2006/02/28 19:39:52 ps Exp $
+ * $FreeBSD: src/sys/compat/freebsd32/freebsd32_syscalls.c,v 1.43 2006/03/30 07:43:01 ps Exp $
  * created from FreeBSD
  */
 
@@ -236,7 +236,7 @@
 	"msgsnd",			/* 226 = msgsnd */
 	"msgrcv",			/* 227 = msgrcv */
 	"shmat",			/* 228 = shmat */
-	"shmctl",			/* 229 = shmctl */
+	"freebsd32_shmctl",			/* 229 = freebsd32_shmctl */
 	"shmdt",			/* 230 = shmdt */
 	"shmget",			/* 231 = shmget */
 	"freebsd32_clock_gettime",			/* 232 = freebsd32_clock_gettime */

==== //depot/projects/uart/compat/freebsd32/freebsd32_sysent.c#14 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/compat/freebsd32/freebsd32_sysent.c,v 1.52 2006/02/28 19:39:52 ps Exp $
+ * $FreeBSD: src/sys/compat/freebsd32/freebsd32_sysent.c,v 1.53 2006/03/30 07:43:01 ps Exp $
  * created from FreeBSD
  */
 
@@ -261,7 +261,7 @@
 	{ SYF_MPSAFE | AS(msgsnd_args), (sy_call_t *)msgsnd, AUE_MSGSND },	/* 226 = msgsnd */
 	{ SYF_MPSAFE | AS(msgrcv_args), (sy_call_t *)msgrcv, AUE_MSGRCV },	/* 227 = msgrcv */
 	{ SYF_MPSAFE | AS(shmat_args), (sy_call_t *)shmat, AUE_SHMAT },	/* 228 = shmat */
-	{ SYF_MPSAFE | AS(shmctl_args), (sy_call_t *)shmctl, AUE_SHMCTL },	/* 229 = shmctl */
+	{ SYF_MPSAFE | AS(freebsd32_shmctl_args), (sy_call_t *)freebsd32_shmctl, AUE_SHMCTL },	/* 229 = freebsd32_shmctl */
 	{ SYF_MPSAFE | AS(shmdt_args), (sy_call_t *)shmdt, AUE_SHMDT },	/* 230 = shmdt */
 	{ SYF_MPSAFE | AS(shmget_args), (sy_call_t *)shmget, AUE_SHMGET },	/* 231 = shmget */
 	{ SYF_MPSAFE | AS(freebsd32_clock_gettime_args), (sy_call_t *)freebsd32_clock_gettime, AUE_NULL },	/* 232 = freebsd32_clock_gettime */

==== //depot/projects/uart/compat/freebsd32/syscalls.master#13 (text+ko) ====

@@ -1,4 +1,4 @@
- $FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.64 2006/02/28 19:39:17 ps Exp $
+ $FreeBSD: src/sys/compat/freebsd32/syscalls.master,v 1.65 2006/03/30 07:42:32 ps Exp $
 ;	from: @(#)syscalls.master	8.2 (Berkeley) 1/13/94
 ;	from: src/sys/kern/syscalls.master 1.107
 ;
@@ -305,8 +305,8 @@
 				    int a3, int a4, int a5); }
 170	AUE_MSGSYS	MSTD	{ int freebsd32_msgsys(int which, int a2, \
 				    int a3, int a4, int a5, int a6); }
-171	AUE_SHMSYS	MSTD	{ int freebsd32_shmsys(int which, int a2, \
-				    int a3, int a4); }
+171	AUE_SHMSYS	MSTD	{ int freebsd32_shmsys(uint32_t which, uint32_t a2, \
+				    uint32_t a3, uint32_t a4); }
 172	AUE_NULL	UNIMPL	nosys
 173	AUE_PREAD	MSTD	{ ssize_t freebsd32_pread(int fd, void *buf, \
 				    size_t nbyte, int pad, \
@@ -415,7 +415,7 @@
 				    size_t msgsz, long msgtyp, int msgflg); }
 228	AUE_SHMAT	MNOPROTO { int shmat(int shmid, void *shmaddr, \
 				    int shmflg); }
-229	AUE_SHMCTL	MNOPROTO { int shmctl(int shmid, int cmd, \
+229	AUE_SHMCTL	MSTD	 { int freebsd32_shmctl(int shmid, int cmd, \
 				    struct shmid_ds *buf); }
 230	AUE_SHMDT	MNOPROTO { int shmdt(void *shmaddr); }
 231	AUE_SHMGET	MNOPROTO { int shmget(key_t key, int size, \

==== //depot/projects/uart/conf/NOTES#32 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1355 2006/03/29 09:57:22 scottl Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1356 2006/03/30 18:39:24 marcel Exp $
 #
 # NOTES -- Lines that can be cut/pasted into kernel and hints configs.
 #
@@ -1678,6 +1678,11 @@
 # Sun servers by the Remote Console.
 options 	ALT_BREAK_TO_DEBUGGER
 
+# Serial Communications Controller
+# Supports the Siemens SAB 82532 and Zilog Z8530 multi-channel
+# communications controllers.
+device		scc
+
 # PCI Universal Communications driver
 # Supports various single and multi port PCI serial cards. Maybe later
 # also the parallel ports on combination serial/parallel cards. New cards

==== //depot/projects/uart/conf/files#54 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1105 2006/03/29 09:57:22 scottl Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1106 2006/03/30 18:39:24 marcel Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and

==== //depot/projects/uart/dev/acpica/Osd/OsdSchedule.c#10 (text+ko) ====

@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/acpica/Osd/OsdSchedule.c,v 1.35 2006/01/14 01:55:23 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/acpica/Osd/OsdSchedule.c,v 1.36 2006/03/30 19:22:45 scottl Exp $");
 
 #include "opt_acpi.h"
 #include <sys/param.h>
@@ -66,7 +66,8 @@
 };
 
 TASKQUEUE_DEFINE(acpi, taskqueue_thread_enqueue, &taskqueue_acpi,
-    taskqueue_start_threads(&taskqueue_acpi, 3, PWAIT, "acpi_task"));
+    taskqueue_start_threads(&taskqueue_acpi, acpi_max_threads, PWAIT,
+    "acpi_task"));
 
 /*
  * Bounce through this wrapper function since ACPI-CA doesn't understand

==== //depot/projects/uart/dev/ata/atapi-fd.c#11 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-fd.c,v 1.108 2006/03/18 13:14:38 sos Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ata/atapi-fd.c,v 1.109 2006/03/30 05:29:57 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -398,7 +398,7 @@
     struct ata_channel *ch = device_get_softc(device_get_parent(dev));
     struct ata_device *atadev = device_get_softc(dev);
     struct afd_softc *fdp = device_get_ivars(dev);
-    char sizestring[16] = "";
+    char sizestring[16];
 
     if (fdp->mediasize > 1048576 * 5)
 	sprintf(sizestring, "%juMB", fdp->mediasize / 1048576);

==== //depot/projects/uart/dev/pccbb/pccbb.c#16 (text+ko) ====

@@ -75,7 +75,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/pccbb/pccbb.c,v 1.140 2006/03/24 07:52:00 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/pccbb/pccbb.c,v 1.141 2006/03/30 04:25:45 imp Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -650,8 +650,19 @@
 	struct cbb_softc *sc = arg;
 	uint32_t sockevent;
 
+	/*
+	 * Read the socket event.  Sometimes, the theory goes, the PCI
+	 * bus is so loaded that it cannot satisfy the read request, so
+	 * we get garbage back from the following read.  We have to filter
+	 * out the garbage so that we don't spontaneously reset the card
+	 * under high load.  PCI isn't supposed to act like this.  No doubt
+	 * this is a bug in the PCI bridge chipset (or cbb brige) that's being
+	 * used in certain amd64 laptops today.  Work around the issue by
+	 * assuming that any bits we don't know about being set means that
+	 * we got garbage.
+	 */
 	sockevent = cbb_get(sc, CBB_SOCKET_EVENT);
-	if (sockevent != 0) {
+	if (sockevent != 0 && (sockevent & CBB_SOCKET_EVENT_VALID_MASK) == 0) {
 		/* ack the interrupt */
 		cbb_set(sc, CBB_SOCKET_EVENT, sockevent);
 
@@ -697,7 +708,7 @@
 	 * indication above.
 	 *
 	 * We have to call this unconditionally because some bridges deliver
-	 * the even independent of the CBB_SOCKET_EVENT_CD above.
+	 * the event independent of the CBB_SOCKET_EVENT_CD above.
 	 */
 	exca_getb(&sc->exca[0], EXCA_CSC);
 }

==== //depot/projects/uart/dev/pccbb/pccbbreg.h#7 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/pccbb/pccbbreg.h,v 1.18 2005/12/27 18:55:21 imp Exp $
+ * $FreeBSD: src/sys/dev/pccbb/pccbbreg.h,v 1.19 2006/03/30 04:12:28 imp Exp $
  */
 
 /*
@@ -177,6 +177,7 @@
 #define	CBB_SOCKET_EVENT_CD2		0x04	/* Card Detect 2 */
 #define	CBB_SOCKET_EVENT_CD		0x06	/* Card Detect all */
 #define	CBB_SOCKET_EVENT_POWER		0x08	/* Power Cycle */
+#define	CBB_SOCKET_EVENT_VALID_MASK	0x0f	/* All socket events */
 
 #define	CBB_SOCKET_MASK_CSTS		0x01	/* Card Status Change */
 #define	CBB_SOCKET_MASK_CD		0x06	/* Card Detect */
@@ -220,26 +221,26 @@
 
 #define	CBB_SOCKET_CTRL_STOPCLK		0x80
 
-#define CBB_FORCE_CV_TEST		(1UL << 14)
-#define CBB_FORCE_3VCARD		(1UL << 11)
-#define CBB_FORCE_5VCARD		(1UL << 10)
-#define CBB_FORCE_BAD_VCC_REQ		(1UL <<  9)
-#define CBB_FORCE_DATA_LOST		(1UL <<  8)
-#define CBB_FORCE_NOT_A_CARD		(1UL <<  7)
-#define CBB_FORCE_CB_CARD		(1UL <<  5)
-#define CBB_FORCE_R2_CARD		(1UL <<  4)
-#define CBB_FORCE_POWER_CYCLE		(1UL <<  3)
-#define CBB_FORCE_CD2_CHANGE		(1UL <<  2)
-#define CBB_FORCE_CD1_CHANGE		(1UL <<  1)
-#define CBB_FORCE_CSTCHG		(1UL <<  0)
+#define	CBB_FORCE_CV_TEST		(1UL << 14)
+#define	CBB_FORCE_3VCARD		(1UL << 11)
+#define	CBB_FORCE_5VCARD		(1UL << 10)
+#define	CBB_FORCE_BAD_VCC_REQ		(1UL <<  9)
+#define	CBB_FORCE_DATA_LOST		(1UL <<  8)
+#define	CBB_FORCE_NOT_A_CARD		(1UL <<  7)
+#define	CBB_FORCE_CB_CARD		(1UL <<  5)
+#define	CBB_FORCE_R2_CARD		(1UL <<  4)
+#define	CBB_FORCE_POWER_CYCLE		(1UL <<  3)
+#define	CBB_FORCE_CD2_CHANGE		(1UL <<  2)
+#define	CBB_FORCE_CD1_CHANGE		(1UL <<  1)
+#define	CBB_FORCE_CSTCHG		(1UL <<  0)
 
 #include <dev/pccbb/pccbbdevid.h>
 
-#define CBB_SOCKET_EVENT		0x00
-#define CBB_SOCKET_MASK			0x04
-#define CBB_SOCKET_STATE		0x08
-#define CBB_SOCKET_FORCE		0x0c
-#define CBB_SOCKET_CONTROL		0x10
-#define CBB_SOCKET_POWER		0x14
+#define	CBB_SOCKET_EVENT		0x00
+#define	CBB_SOCKET_MASK			0x04
+#define	CBB_SOCKET_STATE		0x08
+#define	CBB_SOCKET_FORCE		0x0c
+#define	CBB_SOCKET_CONTROL		0x10
+#define	CBB_SOCKET_POWER		0x14
 
-#define CBB_EXCA_OFFSET			0x800	/* offset for exca regs */
+#define	CBB_EXCA_OFFSET			0x800	/* offset for exca regs */

==== //depot/projects/uart/dev/puc/puc_ebus.c#12 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/puc/puc_ebus.c,v 1.7 2006/02/24 02:06:57 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/puc/puc_ebus.c,v 1.8 2006/03/30 18:43:03 marcel Exp $");
 
 #include "opt_puc.h"
 
@@ -65,6 +65,8 @@
 	struct puc_device_description dd;
 	int i;
 
+	printf("NOTICE: Please configure device scc(1) into the kernel.\n");
+
 	bzero(&dd, sizeof(dd));
 	dd.name = device_get_desc(dev);
 	for (i = 0; i < 2; i++) {

==== //depot/projects/uart/dev/puc/puc_sbus.c#13 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/puc/puc_sbus.c,v 1.9 2006/02/24 02:06:57 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/puc/puc_sbus.c,v 1.10 2006/03/30 18:43:03 marcel Exp $");
 
 #include "opt_puc.h"
 
@@ -64,6 +64,8 @@
 	struct puc_device_description dd;
 	int i;
 
+	printf("NOTICE: Please configure device scc(1) into the kernel.\n");
+
 	bzero(&dd, sizeof(dd));
 	dd.name = device_get_desc(dev);
 	for (i = 0; i < 2; i++) {

==== //depot/projects/uart/dev/scc/scc_bfe.h#14 (text+ko) ====


==== //depot/projects/uart/dev/scc/scc_bfe_ebus.c#5 (text+ko) ====


==== //depot/projects/uart/dev/scc/scc_bfe_sbus.c#4 (text+ko) ====


==== //depot/projects/uart/dev/scc/scc_bus.h#8 (text+ko) ====


==== //depot/projects/uart/dev/scc/scc_core.c#18 (text+ko) ====


==== //depot/projects/uart/dev/scc/scc_dev_sab82532.c#7 (text+ko) ====


==== //depot/projects/uart/dev/scc/scc_dev_z8530.c#9 (text+ko) ====


==== //depot/projects/uart/dev/scc/scc_if.m#7 (text+ko) ====


==== //depot/projects/uart/dev/sound/pcm/dsp.c#13 (text+ko) ====

@@ -29,7 +29,7 @@
 
 #include <dev/sound/pcm/sound.h>
 
-SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pcm/dsp.c,v 1.94 2006/03/21 06:35:48 ariff Exp $");
+SND_DECLARE_FILE("$FreeBSD: src/sys/dev/sound/pcm/dsp.c,v 1.95 2006/03/30 06:17:03 ariff Exp $");
 
 #define OLDPCM_IOCTL
 
@@ -306,10 +306,6 @@
 	pcm_lock(d);
 	rdch = i_dev->si_drv1;
 	wrch = i_dev->si_drv2;
-	if (rdch && td->td_proc->p_pid != rdch->pid)
-		rdch = NULL;
-	if (wrch && td->td_proc->p_pid != wrch->pid)
-		wrch = NULL;
 	pcm_unlock(d);
 
 	if (rdch || wrch) {
@@ -431,11 +427,9 @@
 	getchns(i_dev, &rdch, &wrch, 0);
 
 	kill = 0;
-	if (wrch && ((wrch->flags & CHN_F_DEAD) ||
-		    td->td_proc->p_pid != wrch->pid))
+	if (wrch && (wrch->flags & CHN_F_DEAD))
 		kill |= 1;
-	if (rdch && ((rdch->flags & CHN_F_DEAD) ||
-		    td->td_proc->p_pid != rdch->pid))
+	if (rdch && (rdch->flags & CHN_F_DEAD))
 		kill |= 2;
 	if (kill == 3) {
 		relchns(i_dev, rdch, wrch, 0);

==== //depot/projects/uart/dev/uart/uart_bus.h#44 (text+ko) ====

@@ -23,7 +23,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/uart/uart_bus.h,v 1.11 2006/02/24 05:40:17 marcel Exp $
+ * $FreeBSD: src/sys/dev/uart/uart_bus.h,v 1.12 2006/03/30 18:37:03 marcel Exp $
  */
 
 #ifndef _DEV_UART_BUS_H_

==== //depot/projects/uart/dev/uart/uart_bus_scc.c#8 (text+ko) ====


==== //depot/projects/uart/dev/uart/uart_core.c#52 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/uart/uart_core.c,v 1.17 2006/02/24 05:40:17 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/uart/uart_core.c,v 1.18 2006/03/30 18:37:03 marcel Exp $");
 
 #ifndef KLD_MODULE
 #include "opt_comconsole.h"

==== //depot/projects/uart/dev/uart/uart_cpu.h#18 (text+ko) ====

@@ -23,7 +23,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/uart/uart_cpu.h,v 1.8 2005/01/06 01:43:26 imp Exp $
+ * $FreeBSD: src/sys/dev/uart/uart_cpu.h,v 1.9 2006/03/30 18:37:03 marcel Exp $
  */
 
 #ifndef _DEV_UART_CPU_H_

==== //depot/projects/uart/dev/uart/uart_dev_ns8250.c#38 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/uart/uart_dev_ns8250.c,v 1.16 2006/02/24 05:40:17 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/uart/uart_dev_ns8250.c,v 1.17 2006/03/30 18:37:03 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/dev/uart/uart_dev_sab82532.c#40 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/uart/uart_dev_sab82532.c,v 1.12 2006/02/24 05:40:17 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/uart/uart_dev_sab82532.c,v 1.13 2006/03/30 18:37:03 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/dev/uart/uart_dev_z8530.c#28 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/uart/uart_dev_z8530.c,v 1.14 2006/02/24 05:40:17 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/uart/uart_dev_z8530.c,v 1.15 2006/03/30 18:37:03 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/dev/uart/uart_tty.c#28 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/uart/uart_tty.c,v 1.26 2006/02/24 02:42:26 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/uart/uart_tty.c,v 1.27 2006/03/30 03:26:52 marcel Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/uart/geom/eli/g_eli.h#3 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/geom/eli/g_eli.h,v 1.5 2006/02/01 12:05:59 pjd Exp $
+ * $FreeBSD: src/sys/geom/eli/g_eli.h,v 1.7 2006/03/30 18:50:00 pjd Exp $
  */
 
 #ifndef	_G_ELI_H_

==== //depot/projects/uart/geom/mirror/g_mirror.c#13 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/mirror/g_mirror.c,v 1.79 2006/03/19 12:55:50 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/mirror/g_mirror.c,v 1.80 2006/03/30 12:15:41 pjd Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2116,7 +2116,7 @@
 		 * if we have any disks and 'force' is true.
 		 */
 		ndisks = g_mirror_ndisks(sc, -1);
-		if ((force && ndisks) || sc->sc_ndisks == ndisks) {
+		if (sc->sc_ndisks == ndisks || (force && ndisks > 0)) {
 			;
 		} else if (ndisks == 0) {
 			/*

==== //depot/projects/uart/geom/vinum/geom_vinum.c#7 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/vinum/geom_vinum.c,v 1.20 2006/03/23 19:58:42 le Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/vinum/geom_vinum.c,v 1.21 2006/03/30 14:01:25 le Exp $");
 
 #include <sys/param.h>
 #include <sys/bio.h>
@@ -237,13 +237,16 @@
 
 		/* Find the volume this plex should be attached to. */
 		v = gv_find_vol(sc, p->volume);
-		if (v != NULL) {
-			if (v->plexcount)
-				p->flags |= GV_PLEX_ADDED;
-			p->vol_sc = v;
-			v->plexcount++;
-			LIST_INSERT_HEAD(&v->plexes, p, in_volume);
+		if (v == NULL) {
+			gctl_error(req, "volume '%s' not found", p->volume);
+			g_free(p);
+			continue;
 		}
+		if (v->plexcount)
+			p->flags |= GV_PLEX_ADDED;
+		p->vol_sc = v;
+		v->plexcount++;
+		LIST_INSERT_HEAD(&v->plexes, p, in_volume);
 
 		p->vinumconf = sc;
 		p->flags |= GV_PLEX_NEWBORN;
@@ -272,7 +275,7 @@
 
 		/* drive not found - XXX */
 		if (d == NULL) {
-			printf("FOO: drive '%s' not found\n", s->drive);
+			gctl_error(req, "drive '%s' not found", s->drive);
 			g_free(s);
 			continue;
 		}
@@ -282,7 +285,7 @@
 
 		/* plex not found - XXX */
 		if (p == NULL) {
-			printf("FOO: plex '%s' not found\n", s->plex);
+			gctl_error(req, "plex '%s' not found\n", s->plex);
 			g_free(s);
 			continue;
 		}
@@ -304,8 +307,34 @@
 		 */
 		error = gv_sd_to_plex(p, s, 1);
 		if (error) {
-			printf("FOO: couldn't give sd '%s' to plex '%s'\n",
-			    s->name, p->name);
+			gctl_error(req, "GEOM_VINUM: couldn't give sd '%s' "
+			    "to plex '%s'\n", s->name, p->name);
+			if (s->drive_sc)
+				LIST_REMOVE(s, from_drive);
+			gv_free_sd(s);
+			g_free(s);
+			/*
+			 * If this subdisk can't be created, we won't create
+			 * the attached plex either, if it is also a new one.
+			 */
+			if (!(p->flags & GV_PLEX_NEWBORN))
+				continue;
+			LIST_FOREACH_SAFE(s, &p->subdisks, in_plex, s2) {
+				if (s->drive_sc)
+					LIST_REMOVE(s, from_drive);
+				p->sdcount--;
+				LIST_REMOVE(s, in_plex);
+				LIST_REMOVE(s, sd);
+				gv_free_sd(s);
+				g_free(s);
+			}
+			if (p->vol_sc != NULL) {
+				LIST_REMOVE(p, in_volume);
+				p->vol_sc->plexcount--;
+			}
+			LIST_REMOVE(p, plex);
+			g_free(p);
+			continue;
 		}
 		s->flags |= GV_SD_NEWBORN;
 

==== //depot/projects/uart/geom/vinum/geom_vinum.h#6 (text+ko) ====

@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/geom/vinum/geom_vinum.h,v 1.11 2006/03/23 19:58:42 le Exp $
+ * $FreeBSD: src/sys/geom/vinum/geom_vinum.h,v 1.12 2006/03/30 14:01:25 le Exp $
  */
 
 #ifndef	_GEOM_VINUM_H_
@@ -72,6 +72,7 @@
 
 /* geom_vinum_subr.c */
 void	gv_adjust_freespace(struct gv_sd *, off_t);
+void	gv_free_sd(struct gv_sd *);
 struct g_geom	*find_vinum_geom(void);
 struct gv_drive	*gv_find_drive(struct gv_softc *, char *);
 struct gv_plex	*gv_find_plex(struct gv_softc *, char *);

==== //depot/projects/uart/geom/vinum/geom_vinum_rm.c#6 (text+ko) ====

@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/vinum/geom_vinum_rm.c,v 1.11 2006/03/23 20:01:13 le Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/vinum/geom_vinum_rm.c,v 1.12 2006/03/30 14:01:25 le Exp $");
 
 #include <sys/param.h>
 #include <sys/libkern.h>
@@ -38,7 +38,6 @@
 #include <geom/vinum/geom_vinum.h>
 #include <geom/vinum/geom_vinum_share.h>
 
-static void	gv_free_sd(struct gv_sd *);
 static int	gv_rm_drive(struct gv_softc *, struct gctl_req *,
 		    struct gv_drive *, int);
 static int	gv_rm_plex(struct gv_softc *, struct gctl_req *,
@@ -381,60 +380,3 @@
 
 	return (err);
 }
-
-static void
-gv_free_sd(struct gv_sd *s)
-{
-	struct gv_drive *d;
-	struct gv_freelist *fl, *fl2;
-
-	KASSERT(s != NULL, ("gv_free_sd: NULL s"));
-
-	d = s->drive_sc;
-	if (d == NULL)
-		return;
-
-	/*
-	 * First, find the free slot that's immediately before or after this
-	 * subdisk.
-	 */
-	fl = NULL;
-	LIST_FOREACH(fl, &d->freelist, freelist) {
-		if (fl->offset == s->drive_offset + s->size)
-			break;
-		if (fl->offset + fl->size == s->drive_offset)
-			break;
-	}
-
-	/* If there is no free slot behind this subdisk, so create one. */
-	if (fl == NULL) {
-
-		fl = g_malloc(sizeof(*fl), M_WAITOK | M_ZERO);
-		fl->size = s->size;
-		fl->offset = s->drive_offset;
-
-		if (d->freelist_entries == 0) {
-			LIST_INSERT_HEAD(&d->freelist, fl, freelist);
-		} else {
-			LIST_FOREACH(fl2, &d->freelist, freelist) {
-				if (fl->offset < fl2->offset) {
-					LIST_INSERT_BEFORE(fl2, fl, freelist);
-					break;
-				} else if (LIST_NEXT(fl2, freelist) == NULL) {
-					LIST_INSERT_AFTER(fl2, fl, freelist);
-					break;
-				}
-			}
-		}
-
-		d->freelist_entries++;
-
-	/* Expand the free slot we just found. */
-	} else {
-		fl->size += s->size;
-		if (fl->offset > s->drive_offset)
-			fl->offset = s->drive_offset;
-	}
-
-	d->avail += s->size;
-}

==== //depot/projects/uart/geom/vinum/geom_vinum_state.c#4 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/vinum/geom_vinum_state.c,v 1.7 2005/01/21 18:27:23 le Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/vinum/geom_vinum_state.c,v 1.8 2006/03/30 14:01:25 le Exp $");
 
 #include <sys/param.h>

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



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