PERFORCE change 141724 for review
Diego Giagio
diego at FreeBSD.org
Fri May 16 17:17:56 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=141724
Change 141724 by diego at diego_black on 2008/05/16 17:17:40
IFC
Affected files ...
.. //depot/projects/soc2008/diego-audit/src/sys/amd64/amd64/genassym.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/amd64/amd64/pmap.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/linux32_dummy.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/linux32_proto.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/linux32_syscall.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/linux32_sysent.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/syscalls.master#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/cddl/compat/opensolaris/sys/lock.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_emul.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_emul.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_futex.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_futex.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_misc.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/compat/ndis/subr_ndis.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/conf/NOTES#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/conf/options#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/ath/if_ath.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/bge/if_bge.c#5 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/bge/if_bgereg.h#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/ciss/ciss.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/coretemp/coretemp.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/if_ndis/if_ndis.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/ipw/if_ipw.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/iwi/if_iwi.c#3 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/iwn/if_iwn.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/k8temp/k8temp.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/malo/if_malo.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/mfi/mfi.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/mfi/mfi_ioctl.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/puc/pucdata.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/ral/rt2560.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/ral/rt2661.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/speaker/spkr.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/sym/sym_defs.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/sym/sym_fw.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/sym/sym_fw1.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/sym/sym_fw2.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/sym/sym_hipd.c#3 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/usb/ehci.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/usb/if_axe.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/usb/if_rum.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/usb/if_ural.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/usb/if_zyd.c#3 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/usb/ohci.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/usb/usbdevs#5 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/wi/if_wi.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/wpi/if_wpi.c#3 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/dev/wpi/if_wpivar.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/fs/ntfs/ntfs_subr.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/i386/i386/genassym.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/i386/i386/pmap.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/i386/linux/linux_dummy.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/i386/linux/linux_proto.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/i386/linux/linux_syscall.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/i386/linux/linux_sysent.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/i386/linux/syscalls.master#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/kern/imgact_elf.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/kern/kern_conf.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/kern/kern_switch.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/kern/kern_sx.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/kern/subr_lock.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/kern/subr_witness.c#3 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/kern/uipc_sockbuf.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net/ethernet.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211.c#4 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211_ddb.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211_freebsd.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211_ht.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211_ht.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211_ioctl.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211_phy.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211_phy.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211_proto.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/net80211/ieee80211_var.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/netinet/ip_icmp.c#3 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/nfsclient/bootp_subr.c#3 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/pci/intpm.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/powerpc/powerpc/genassym.c#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/_lock.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/_lockmgr.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/_mutex.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/_rwlock.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/_sx.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/lock.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/lockmgr.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/mutex.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/param.h#3 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/rwlock.h#2 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/sys/socketvar.h#3 integrate
.. //depot/projects/soc2008/diego-audit/src/sys/vm/vm_page.c#2 integrate
Differences ...
==== //depot/projects/soc2008/diego-audit/src/sys/amd64/amd64/genassym.c#2 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.167 2008/03/23 22:46:37 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.168 2008/05/16 13:23:47 attilio Exp $");
#include "opt_compat.h"
#include "opt_kstack_pages.h"
@@ -214,7 +214,4 @@
ASSYM(KUC32SEL, GSEL(GUCODE32_SEL, SEL_UPL));
ASSYM(SEL_RPL_MASK, SEL_RPL_MASK);
-ASSYM(MTX_LOCK, offsetof(struct mtx, mtx_lock));
-ASSYM(MTX_RECURSECNT, offsetof(struct mtx, mtx_recurse));
-
ASSYM(MSR_GSBASE, MSR_GSBASE);
==== //depot/projects/soc2008/diego-audit/src/sys/amd64/amd64/pmap.c#4 (text+ko) ====
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.616 2008/05/09 16:48:06 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.617 2008/05/11 20:33:46 alc Exp $");
/*
* Manages physical address maps.
@@ -4480,11 +4480,12 @@
{
vm_offset_t superpage_offset;
+ if (size < NBPDR)
+ return;
if (object != NULL && (object->flags & OBJ_COLORED) != 0)
offset += ptoa(object->pg_color);
superpage_offset = offset & PDRMASK;
- if (size < superpage_offset ||
- size - superpage_offset < NBPDR ||
+ if (size - ((NBPDR - superpage_offset) & PDRMASK) < NBPDR ||
(*addr & PDRMASK) == superpage_offset)
return;
if ((*addr & PDRMASK) < superpage_offset)
==== //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/linux32_dummy.c#2 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_dummy.c,v 1.12 2008/04/23 15:56:33 rdivacky Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/linux32/linux32_dummy.c,v 1.13 2008/05/13 20:01:26 rdivacky Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -98,8 +98,6 @@
DUMMY(pselect6);
DUMMY(ppoll);
DUMMY(unshare);
-DUMMY(set_robust_list);
-DUMMY(get_robust_list);
DUMMY(splice);
DUMMY(sync_file_range);
DUMMY(tee);
==== //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/linux32_proto.h#2 (text+ko) ====
@@ -2,8 +2,8 @@
* System call prototypes.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_proto.h,v 1.36 2008/04/16 19:27:35 jkim Exp $
- * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.33 2008/04/16 19:25:38 jkim Exp
+ * $FreeBSD: src/sys/amd64/linux32/linux32_proto.h,v 1.37 2008/05/13 20:02:25 rdivacky Exp $
+ * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.34 2008/05/13 20:01:26 rdivacky Exp
*/
#ifndef _LINUX_SYSPROTO_H_
@@ -969,10 +969,13 @@
register_t dummy;
};
struct linux_set_robust_list_args {
- register_t dummy;
+ char head_l_[PADL_(struct linux_robust_list_head *)]; struct linux_robust_list_head * head; char head_r_[PADR_(struct linux_robust_list_head *)];
+ char len_l_[PADL_(l_size_t)]; l_size_t len; char len_r_[PADR_(l_size_t)];
};
struct linux_get_robust_list_args {
- register_t dummy;
+ char pid_l_[PADL_(l_int)]; l_int pid; char pid_r_[PADR_(l_int)];
+ char head_l_[PADL_(struct linux_robust_list_head *)]; struct linux_robust_list_head * head; char head_r_[PADR_(struct linux_robust_list_head *)];
+ char len_l_[PADL_(l_size_t *)]; l_size_t * len; char len_r_[PADR_(l_size_t *)];
};
struct linux_splice_args {
register_t dummy;
==== //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/linux32_syscall.h#2 (text+ko) ====
@@ -2,8 +2,8 @@
* System call numbers.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_syscall.h,v 1.36 2008/04/16 19:27:35 jkim Exp $
- * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.33 2008/04/16 19:25:38 jkim Exp
+ * $FreeBSD: src/sys/amd64/linux32/linux32_syscall.h,v 1.37 2008/05/13 20:02:25 rdivacky Exp $
+ * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.34 2008/05/13 20:01:26 rdivacky Exp
*/
#define LINUX_SYS_exit 1
==== //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/linux32_sysent.c#2 (text+ko) ====
@@ -2,8 +2,8 @@
* System call switch table.
*
* DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/amd64/linux32/linux32_sysent.c,v 1.36 2008/04/16 19:27:35 jkim Exp $
- * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.33 2008/04/16 19:25:38 jkim Exp
+ * $FreeBSD: src/sys/amd64/linux32/linux32_sysent.c,v 1.37 2008/05/13 20:02:25 rdivacky Exp $
+ * created from FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.34 2008/05/13 20:01:26 rdivacky Exp
*/
#include "opt_compat.h"
@@ -330,8 +330,8 @@
{ 0, (sy_call_t *)linux_pselect6, AUE_NULL, NULL, 0, 0 }, /* 308 = linux_pselect6 */
{ 0, (sy_call_t *)linux_ppoll, AUE_NULL, NULL, 0, 0 }, /* 309 = linux_ppoll */
{ 0, (sy_call_t *)linux_unshare, AUE_NULL, NULL, 0, 0 }, /* 310 = linux_unshare */
- { 0, (sy_call_t *)linux_set_robust_list, AUE_NULL, NULL, 0, 0 }, /* 311 = linux_set_robust_list */
- { 0, (sy_call_t *)linux_get_robust_list, AUE_NULL, NULL, 0, 0 }, /* 312 = linux_get_robust_list */
+ { AS(linux_set_robust_list_args), (sy_call_t *)linux_set_robust_list, AUE_NULL, NULL, 0, 0 }, /* 311 = linux_set_robust_list */
+ { AS(linux_get_robust_list_args), (sy_call_t *)linux_get_robust_list, AUE_NULL, NULL, 0, 0 }, /* 312 = linux_get_robust_list */
{ 0, (sy_call_t *)linux_splice, AUE_NULL, NULL, 0, 0 }, /* 313 = linux_splice */
{ 0, (sy_call_t *)linux_sync_file_range, AUE_NULL, NULL, 0, 0 }, /* 314 = linux_sync_file_range */
{ 0, (sy_call_t *)linux_tee, AUE_NULL, NULL, 0, 0 }, /* 315 = linux_tee */
==== //depot/projects/soc2008/diego-audit/src/sys/amd64/linux32/syscalls.master#2 (text+ko) ====
@@ -1,4 +1,4 @@
- $FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.33 2008/04/16 19:25:38 jkim Exp $
+ $FreeBSD: src/sys/amd64/linux32/syscalls.master,v 1.34 2008/05/13 20:01:26 rdivacky Exp $
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
; System call name/number master file (or rather, slave, from LINUX).
@@ -493,8 +493,10 @@
308 AUE_NULL STD { int linux_pselect6(void); }
309 AUE_NULL STD { int linux_ppoll(void); }
310 AUE_NULL STD { int linux_unshare(void); }
-311 AUE_NULL STD { int linux_set_robust_list(void); }
-312 AUE_NULL STD { int linux_get_robust_list(void); }
+311 AUE_NULL STD { int linux_set_robust_list(struct linux_robust_list_head *head, \
+ l_size_t len); }
+312 AUE_NULL STD { int linux_get_robust_list(l_int pid, struct linux_robust_list_head *head, \
+ l_size_t *len); }
313 AUE_NULL STD { int linux_splice(void); }
314 AUE_NULL STD { int linux_sync_file_range(void); }
315 AUE_NULL STD { int linux_tee(void); }
==== //depot/projects/soc2008/diego-audit/src/sys/cddl/compat/opensolaris/sys/lock.h#2 (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/cddl/compat/opensolaris/sys/lock.h,v 1.2 2008/03/28 22:16:06 jb Exp $
+ * $FreeBSD: src/sys/cddl/compat/opensolaris/sys/lock.h,v 1.3 2008/05/16 02:09:13 attilio Exp $
*/
#ifndef _OPENSOLARIS_SYS_LOCK_H_
@@ -35,8 +35,7 @@
#define LO_ALLMASK (LO_INITIALIZED | LO_WITNESS | LO_QUIET | \
LO_RECURSABLE | LO_SLEEPABLE | LO_UPGRADABLE | \
- LO_DUPOK | LO_ENROLLPEND | LO_CLASSMASK | \
- LO_NOPROFILE)
+ LO_DUPOK | LO_CLASSMASK | LO_NOPROFILE)
#define LO_EXPECTED (LO_INITIALIZED | LO_WITNESS | LO_RECURSABLE | \
LO_SLEEPABLE | LO_UPGRADABLE | LO_DUPOK | \
/* sx lock class */(2 << LO_CLASSSHIFT))
==== //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_emul.c#2 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_emul.c,v 1.20 2007/04/02 18:38:13 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_emul.c,v 1.21 2008/05/13 20:01:27 rdivacky Exp $");
#include "opt_compat.h"
@@ -44,9 +44,6 @@
#include <sys/sysproto.h>
#include <sys/unistd.h>
-#include <compat/linux/linux_emul.h>
-#include <compat/linux/linux_futex.h>
-
#ifdef COMPAT_LINUX32
#include <machine/../linux32/linux.h>
#include <machine/../linux32/linux32_proto.h>
@@ -55,6 +52,9 @@
#include <machine/../linux/linux_proto.h>
#endif
+#include <compat/linux/linux_emul.h>
+#include <compat/linux/linux_futex.h>
+
struct sx emul_shared_lock;
struct mtx emul_lock;
@@ -86,6 +86,7 @@
em = malloc(sizeof *em, M_LINUX, M_WAITOK | M_ZERO);
em->pid = child;
em->pdeath_signal = 0;
+ em->robust_futexes = NULL;
if (flags & LINUX_CLONE_THREAD) {
/* handled later in the code */
} else {
@@ -161,6 +162,8 @@
if (__predict_true(p->p_sysent != &elf_linux_sysvec))
return;
+ release_futexes(p);
+
/* find the emuldata */
em = em_find(p, EMUL_DOLOCK);
==== //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_emul.h#2 (text+ko) ====
@@ -25,12 +25,14 @@
* (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/compat/linux/linux_emul.h,v 1.7 2007/04/02 18:38:13 jkim Exp $
+ * $FreeBSD: src/sys/compat/linux/linux_emul.h,v 1.8 2008/05/13 20:01:27 rdivacky Exp $
*/
#ifndef _LINUX_EMUL_H_
#define _LINUX_EMUL_H_
+#include <compat/linux/linux_futex.h>
+
struct linux_emuldata_shared {
int refs;
pid_t group_pid;
@@ -52,6 +54,8 @@
int pdeath_signal; /* parent death signal */
+ struct linux_robust_list_head *robust_futexes;
+
LIST_ENTRY(linux_emuldata) threads; /* list of linux threads */
};
==== //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_futex.c#2 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_futex.c,v 1.12 2008/03/20 17:03:55 rdivacky Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_futex.c,v 1.13 2008/05/13 20:01:27 rdivacky Exp $");
#if 0
__KERNEL_RCSID(1, "$NetBSD: linux_futex.c,v 1.7 2006/07/24 19:01:49 manu Exp $");
#endif
@@ -45,8 +45,11 @@
#include <sys/systm.h>
#include <sys/proc.h>
#include <sys/queue.h>
+#include <sys/imgact.h>
#include <sys/lock.h>
#include <sys/mutex.h>
+#include <sys/priv.h>
+#include <sys/sched.h>
#include <sys/sx.h>
#include <sys/malloc.h>
@@ -57,6 +60,7 @@
#include <machine/../linux/linux.h>
#include <machine/../linux/linux_proto.h>
#endif
+#include <compat/linux/linux_emul.h>
#include <compat/linux/linux_futex.h>
struct futex;
@@ -533,3 +537,160 @@
return (-ENOSYS);
}
}
+
+int
+linux_set_robust_list(struct thread *td, struct linux_set_robust_list_args *args)
+{
+ struct linux_emuldata *em;
+
+#ifdef DEBUG
+ if (ldebug(set_robust_list))
+ printf(ARGS(set_robust_list, ""));
+#endif
+ if (args->len != sizeof(struct linux_robust_list_head))
+ return (EINVAL);
+
+ em = em_find(td->td_proc, EMUL_DOLOCK);
+ em->robust_futexes = args->head;
+ EMUL_UNLOCK(&emul_lock);
+
+ return (0);
+}
+
+int
+linux_get_robust_list(struct thread *td, struct linux_get_robust_list_args *args)
+{
+ struct linux_emuldata *em;
+ struct linux_robust_list_head *head;
+ l_size_t len = sizeof(struct linux_robust_list_head);
+ int error = 0;
+
+#ifdef DEBUG
+ if (ldebug(get_robust_list))
+ printf(ARGS(get_robust_list, ""));
+#endif
+
+ if (!args->pid) {
+ em = em_find(td->td_proc, EMUL_DONTLOCK);
+ head = em->robust_futexes;
+ } else {
+ struct proc *p;
+
+ p = pfind(args->pid);
+ if (p == NULL)
+ return (ESRCH);
+
+ em = em_find(p, EMUL_DONTLOCK);
+ /* XXX: ptrace? */
+ if (priv_check(td, PRIV_CRED_SETUID) ||
+ priv_check(td, PRIV_CRED_SETEUID) ||
+ p_candebug(td, p))
+ return (EPERM);
+ head = em->robust_futexes;
+
+ PROC_UNLOCK(p);
+ }
+
+ error = copyout(&len, args->len, sizeof(l_size_t));
+ if (error)
+ return (EFAULT);
+
+ error = copyout(head, args->head, sizeof(struct linux_robust_list_head));
+
+ return (error);
+}
+
+static int
+handle_futex_death(void *uaddr, pid_t pid, int pi)
+{
+ int uval, nval, mval;
+ struct futex *f;
+
+retry:
+ if (copyin(uaddr, &uval, 4))
+ return (EFAULT);
+
+ if ((uval & FUTEX_TID_MASK) == pid) {
+ mval = (uval & FUTEX_WAITERS) | FUTEX_OWNER_DIED;
+ nval = casuword32(uaddr, uval, mval);
+
+ if (nval == -1)
+ return (EFAULT);
+
+ if (nval != uval)
+ goto retry;
+
+ if (!pi && (uval & FUTEX_WAITERS)) {
+ f = futex_get(uaddr, FUTEX_UNLOCKED);
+ futex_wake(f, 1, NULL, 0);
+ }
+ }
+
+ return (0);
+}
+
+static int
+fetch_robust_entry(struct linux_robust_list **entry,
+ struct linux_robust_list **head, int *pi)
+{
+ l_ulong uentry;
+
+ if (copyin((const void *)head, &uentry, sizeof(l_ulong)))
+ return (EFAULT);
+
+ *entry = (void *)(uentry & ~1UL);
+ *pi = uentry & 1;
+
+ return (0);
+}
+
+/* This walks the list of robust futexes releasing them. */
+void
+release_futexes(struct proc *p)
+{
+ struct linux_robust_list_head *head = NULL;
+ struct linux_robust_list *entry, *next_entry, *pending;
+ unsigned int limit = 2048, pi, next_pi, pip;
+ struct linux_emuldata *em;
+ l_ulong futex_offset;
+ int rc;
+
+ em = em_find(p, EMUL_DONTLOCK);
+ head = em->robust_futexes;
+
+ if (head == NULL)
+ return;
+
+ if (fetch_robust_entry(&entry, &head->list.next, &pi))
+ return;
+
+ if (copyin(&head->futex_offset, &futex_offset, sizeof(l_ulong)))
+ return;
+
+ if (fetch_robust_entry(&pending, &head->pending_list, &pip))
+ return;
+
+ while (entry != &head->list) {
+ rc = fetch_robust_entry(&next_entry, &entry->next, &next_pi);
+
+ if (entry != pending)
+ if (handle_futex_death((char *)entry + futex_offset,
+ p->p_pid, pi))
+ return;
+
+ if (rc)
+ return;
+
+ entry = next_entry;
+ pi = next_pi;
+
+ if (!--limit)
+ break;
+
+ sched_relinquish(curthread);
+ }
+
+ if (pending)
+ handle_futex_death((char *) pending + futex_offset,
+ p->p_pid, pip);
+}
==== //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_futex.h#2 (text+ko) ====
@@ -30,7 +30,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/compat/linux/linux_futex.h,v 1.3 2008/03/20 17:03:55 rdivacky Exp $
+ * $FreeBSD: src/sys/compat/linux/linux_futex.h,v 1.4 2008/05/13 20:01:27 rdivacky Exp $
*/
#ifndef _LINUX_FUTEX_H
@@ -63,4 +63,22 @@
#define FUTEX_OP_CMP_GT 4 /* if (oldval > CMPARG) wake */
#define FUTEX_OP_CMP_GE 5 /* if (oldval >= CMPARG) wake */
+/* This is defined by Linux user-space */
+
+struct linux_robust_list {
+ struct linux_robust_list *next;
+};
+
+struct linux_robust_list_head {
+ struct linux_robust_list list;
+ l_ulong futex_offset;
+ struct linux_robust_list *pending_list;
+};
+
+#define FUTEX_WAITERS 0x80000000
+#define FUTEX_OWNER_DIED 0x40000000
+#define FUTEX_TID_MASK 0x3fffffff
+
+void release_futexes(struct proc *);
+
#endif /* !_LINUX_FUTEX_H */
==== //depot/projects/soc2008/diego-audit/src/sys/compat/linux/linux_misc.c#2 (text+ko) ====
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_misc.c,v 1.220 2008/04/08 09:45:47 kib Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_misc.c,v 1.221 2008/05/13 20:01:27 rdivacky Exp $");
#include "opt_compat.h"
#include "opt_mac.h"
@@ -75,10 +75,6 @@
#include <vm/vm_object.h>
#include <vm/swap_pager.h>
-#include <compat/linux/linux_sysproto.h>
-#include <compat/linux/linux_emul.h>
-#include <compat/linux/linux_misc.h>
-
#ifdef COMPAT_LINUX32
#include <machine/../linux32/linux.h>
#include <machine/../linux32/linux32_proto.h>
@@ -91,6 +87,9 @@
#include <compat/linux/linux_mib.h>
#include <compat/linux/linux_signal.h>
#include <compat/linux/linux_util.h>
+#include <compat/linux/linux_sysproto.h>
+#include <compat/linux/linux_emul.h>
+#include <compat/linux/linux_misc.h>
#ifdef __i386__
#include <machine/cputypes.h>
==== //depot/projects/soc2008/diego-audit/src/sys/compat/ndis/subr_ndis.c#2 (text+ko) ====
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ndis.c,v 1.111 2008/01/13 14:43:59 attilio Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/ndis/subr_ndis.c,v 1.112 2008/05/15 04:29:28 weongyo Exp $");
/*
* This file implements a translation layer between the BSD networking
@@ -1360,6 +1360,10 @@
block = (ndis_miniport_block *)adapter;
sc = device_get_softc(block->nmb_physdeviceobj->do_devext);
+ if (sc->ifp == NULL) {
+ *status = NDIS_STATUS_FAILURE;
+ return;
+ }
#ifdef IFP2ENADDR
if (bcmp(IFP2ENADDR(sc->ifp), empty, ETHER_ADDR_LEN) == 0)
==== //depot/projects/soc2008/diego-audit/src/sys/conf/NOTES#4 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/NOTES,v 1.1485 2008/05/09 23:02:55 julian Exp $
+# $FreeBSD: src/sys/conf/NOTES,v 1.1486 2008/05/16 06:50:40 benno Exp $
#
# NOTES -- Lines that can be cut/pasted into kernel and hints configs.
#
@@ -2374,6 +2374,7 @@
options BOOTP_NFSV3 # Use NFS v3 to NFS mount root
options BOOTP_COMPAT # Workaround for broken bootp daemons.
options BOOTP_WIRED_TO=fxp0 # Use interface fxp0 for BOOTP
+options BOOTP_BLOCKSIZE=8192 # Override NFS block size
#
# Add software watchdog routines.
==== //depot/projects/soc2008/diego-audit/src/sys/conf/options#4 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/options,v 1.628 2008/05/09 23:02:55 julian Exp $
+# $FreeBSD: src/sys/conf/options,v 1.629 2008/05/16 06:27:03 benno Exp $
#
# On the handling of kernel options
#
@@ -351,6 +351,7 @@
ALTQ_NOPCC opt_altq.h
ALTQ_DEBUG opt_altq.h
BOOTP opt_bootp.h
+BOOTP_BLOCKSIZE opt_bootp.h
BOOTP_COMPAT opt_bootp.h
BOOTP_NFSROOT opt_bootp.h
BOOTP_NFSV3 opt_bootp.h
==== //depot/projects/soc2008/diego-audit/src/sys/dev/ath/if_ath.c#4 (text+ko) ====
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.185 2008/05/03 21:55:02 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.186 2008/05/12 00:15:27 sam Exp $");
/*
* Driver for the Atheros Wireless LAN controller.
@@ -515,7 +515,8 @@
ic->ic_phytype = IEEE80211_T_OFDM;
ic->ic_opmode = IEEE80211_M_STA;
ic->ic_caps =
- IEEE80211_C_IBSS /* ibss, nee adhoc, mode */
+ IEEE80211_C_STA /* station mode */
+ | IEEE80211_C_IBSS /* ibss, nee adhoc, mode */
| IEEE80211_C_HOSTAP /* hostap mode */
| IEEE80211_C_MONITOR /* monitor mode */
| IEEE80211_C_AHDEMO /* adhoc demo mode */
==== //depot/projects/soc2008/diego-audit/src/sys/dev/bge/if_bge.c#5 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.210 2008/05/05 18:42:17 bz Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/bge/if_bge.c,v 1.211 2008/05/14 21:00:27 marius Exp $");
/*
* Broadcom BCM570x family gigabit ethernet driver for FreeBSD.
@@ -325,6 +325,7 @@
static int bge_dma_alloc(device_t);
static void bge_dma_free(struct bge_softc *);
+static int bge_get_eaddr_fw(struct bge_softc *sc, uint8_t ether_addr[]);
static int bge_get_eaddr_mem(struct bge_softc *, uint8_t[]);
static int bge_get_eaddr_nvram(struct bge_softc *, uint8_t[]);
static int bge_get_eaddr_eeprom(struct bge_softc *, uint8_t[]);
@@ -374,7 +375,7 @@
static int bge_chipinit(struct bge_softc *);
static int bge_blockinit(struct bge_softc *);
-static int bge_has_eeprom(struct bge_softc *);
+static int bge_has_eaddr(struct bge_softc *);
static uint32_t bge_readmem_ind(struct bge_softc *, int);
static void bge_writemem_ind(struct bge_softc *, int, int);
static void bge_writembx(struct bge_softc *, int, int);
@@ -459,7 +460,7 @@
#define SPARC64_OFW_SUBVENDOR "subsystem-vendor-id"
static int
-bge_has_eeprom(struct bge_softc *sc)
+bge_has_eaddr(struct bge_softc *sc)
{
#ifdef __sparc64__
char buf[sizeof(SPARC64_BLADE_1500_PATH_BGE)];
@@ -471,7 +472,7 @@
/*
* The on-board BGEs found in sun4u machines aren't fitted with
* an EEPROM which means that we have to obtain the MAC address
- * via OFW and that some tests will always fail. We distinguish
+ * via OFW and that some tests will always fail. We distinguish
* such BGEs by the subvendor ID, which also has to be obtained
* from OFW instead of the PCI configuration space as the latter
* indicates Broadcom as the subvendor of the netboot interface.
@@ -493,10 +494,6 @@
return (0);
}
#endif
-
- if (sc->bge_asicrev == BGE_ASICREV_BCM5906)
- return (0);
-
return (1);
}
@@ -763,8 +760,9 @@
}
if (i == BGE_TIMEOUT) {
- device_printf(sc->bge_dev, "PHY read timed out "
- "(phy %d, reg %d, val 0x%08x)\n", phy, reg, val);
+ device_printf(sc->bge_dev,
+ "PHY read timed out (phy %d, reg %d, val 0x%08x)\n",
+ phy, reg, val);
val = 0;
goto done;
}
@@ -818,8 +816,8 @@
if (i == BGE_TIMEOUT) {
device_printf(sc->bge_dev,
- "PHY write timed out (phy %d, reg %d, val %d)\n",
- phy, reg, val);
+ "PHY write timed out (phy %d, reg %d, val %d)\n",
+ phy, reg, val);
return (0);
}
@@ -1283,10 +1281,10 @@
/*
* Check the 'ROM failed' bit on the RX CPU to see if
* self-tests passed. Skip this check when there's no
- * EEPROM fitted, since in that case it will always
- * fail.
+ * chip containing the Ethernet address fitted, since
+ * in that case it will always fail.
*/
- if ((sc->bge_flags & BGE_FLAG_EEPROM) &&
+ if ((sc->bge_flags & BGE_FLAG_EADDR) &&
CSR_READ_4(sc, BGE_RXCPU_MODE) & BGE_RXCPUMODE_ROMFAIL) {
device_printf(sc->bge_dev, "RX CPU self-diagnostics failed!\n");
return (ENODEV);
@@ -2399,8 +2397,8 @@
sc->bge_chipid != BGE_CHIPID_BCM5705_A1)
sc->bge_flags |= BGE_FLAG_WIRESPEED;
- if (bge_has_eeprom(sc))
- sc->bge_flags |= BGE_FLAG_EEPROM;
+ if (bge_has_eaddr(sc))
+ sc->bge_flags |= BGE_FLAG_EADDR;
/* Save chipset family. */
switch (sc->bge_asicrev) {
@@ -2562,20 +2560,12 @@
goto fail;
}
-#ifdef __sparc64__
- if (((sc->bge_flags & BGE_FLAG_EEPROM) == 0) &&
- (sc->bge_asicrev != BGE_ASICREV_BCM5906))
- OF_getetheraddr(dev, eaddr);
- else
-#endif
- {
- error = bge_get_eaddr(sc, eaddr);
- if (error) {
- device_printf(sc->bge_dev,
- "failed to read station address\n");
- error = ENXIO;
- goto fail;
- }
+ error = bge_get_eaddr(sc, eaddr);
+ if (error) {
+ device_printf(sc->bge_dev,
+ "failed to read station address\n");
+ error = ENXIO;
+ goto fail;
}
/* 5705 limits RX return ring to 512 entries. */
@@ -2647,7 +2637,8 @@
*/
if (bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_SIG) == BGE_MAGIC_NUMBER)
hwcfg = bge_readmem_ind(sc, BGE_SOFTWARE_GENCOMM_NICCFG);
- else if (sc->bge_flags & BGE_FLAG_EEPROM) {
+ else if ((sc->bge_flags & BGE_FLAG_EADDR) &&
+ (sc->bge_asicrev != BGE_ASICREV_BCM5906)) {
if (bge_read_eeprom(sc, (caddr_t)&hwcfg, BGE_EE_HWCFG_OFFSET,
sizeof(hwcfg))) {
device_printf(sc->bge_dev, "failed to read EEPROM\n");
@@ -2822,9 +2813,9 @@
bge_reset(struct bge_softc *sc)
{
device_t dev;
- uint32_t cachesize, command, pcistate, reset;
+ uint32_t cachesize, command, pcistate, reset, val;
void (*write_op)(struct bge_softc *, int, int);
- int i, val = 0;
+ int i;
dev = sc->bge_dev;
@@ -2886,14 +2877,12 @@
write_op(sc, BGE_MISC_CFG, reset);
if (sc->bge_asicrev == BGE_ASICREV_BCM5906) {
- uint32_t status, ctrl;
-
- status = CSR_READ_4(sc, BGE_VCPU_STATUS);
+ val = CSR_READ_4(sc, BGE_VCPU_STATUS);
CSR_WRITE_4(sc, BGE_VCPU_STATUS,
- status | BGE_VCPU_STATUS_DRV_RESET);
- ctrl = CSR_READ_4(sc, BGE_VCPU_EXT_CTRL);
+ val | BGE_VCPU_STATUS_DRV_RESET);
+ val = CSR_READ_4(sc, BGE_VCPU_EXT_CTRL);
CSR_WRITE_4(sc, BGE_VCPU_EXT_CTRL,
- ctrl & ~BGE_VCPU_EXT_CTRL_HALT_CPU);
+ val & ~BGE_VCPU_EXT_CTRL_HALT_CPU);
}
DELAY(1000);
@@ -2901,11 +2890,9 @@
/* XXX: Broadcom Linux driver. */
if (sc->bge_flags & BGE_FLAG_PCIE) {
if (sc->bge_chipid == BGE_CHIPID_BCM5750_A0) {
- uint32_t v;
-
DELAY(500000); /* wait for link training to complete */
- v = pci_read_config(dev, 0xC4, 4);
- pci_write_config(dev, 0xC4, v | (1 << 15), 4);
+ val = pci_read_config(dev, 0xC4, 4);
+ pci_write_config(dev, 0xC4, val | (1 << 15), 4);
}
/*
* Set PCIE max payload size to 128 bytes and clear error
@@ -2924,8 +2911,6 @@
/* Re-enable MSI, if neccesary, and enable the memory arbiter. */
if (BGE_IS_5714_FAMILY(sc)) {
- uint32_t val;
-
/* This chip disables MSI on reset. */
if (sc->bge_flags & BGE_FLAG_MSI) {
val = pci_read_config(dev, BGE_PCI_MSI_CTL, 2);
@@ -2955,7 +2940,8 @@
/*
* Poll until we see the 1's complement of the magic number.
* This indicates that the firmware initialization is complete.
- * We expect this to fail if no EEPROM is fitted though.
+ * We expect this to fail if no chip containing the Ethernet
+ * address is fitted though.
*/
for (i = 0; i < BGE_TIMEOUT; i++) {
DELAY(10);
@@ -2964,7 +2950,7 @@
break;
}
- if ((sc->bge_flags & BGE_FLAG_EEPROM) && i == BGE_TIMEOUT)
+ if ((sc->bge_flags & BGE_FLAG_EADDR) && i == BGE_TIMEOUT)
device_printf(sc->bge_dev, "firmware handshake timed out, "
"found 0x%08x\n", val);
}
@@ -3005,20 +2991,16 @@
*/
if (sc->bge_asicrev == BGE_ASICREV_BCM5704 &&
sc->bge_flags & BGE_FLAG_TBI) {
- uint32_t serdescfg;
-
- serdescfg = CSR_READ_4(sc, BGE_SERDES_CFG);
- serdescfg = (serdescfg & ~0xFFF) | 0x880;
- CSR_WRITE_4(sc, BGE_SERDES_CFG, serdescfg);
+ val = CSR_READ_4(sc, BGE_SERDES_CFG);
+ val = (val & ~0xFFF) | 0x880;
+ CSR_WRITE_4(sc, BGE_SERDES_CFG, val);
}
/* XXX: Broadcom Linux driver. */
if (sc->bge_flags & BGE_FLAG_PCIE &&
sc->bge_chipid != BGE_CHIPID_BCM5750_A0) {
- uint32_t v;
-
- v = CSR_READ_4(sc, 0x7C00);
- CSR_WRITE_4(sc, 0x7C00, v | (1 << 25));
+ val = CSR_READ_4(sc, 0x7C00);
+ CSR_WRITE_4(sc, 0x7C00, val | (1 << 25));
}
DELAY(10000);
@@ -4725,10 +4707,23 @@
#endif
static int
+bge_get_eaddr_fw(struct bge_softc *sc, uint8_t ether_addr[])
+{
+
+ if (sc->bge_flags & BGE_FLAG_EADDR)
+ return (1);
+
+#ifdef __sparc64__
+ OF_getetheraddr(sc->bge_dev, ether_addr);
+ return (0);
+#endif
+ return (1);
+}
+
+static int
bge_get_eaddr_mem(struct bge_softc *sc, uint8_t ether_addr[])
{
uint32_t mac_addr;
- int ret = 1;
mac_addr = bge_readmem_ind(sc, 0x0c14);
if ((mac_addr >> 16) == 0x484b) {
@@ -4739,9 +4734,9 @@
ether_addr[3] = (uint8_t)(mac_addr >> 16);
ether_addr[4] = (uint8_t)(mac_addr >> 8);
ether_addr[5] = (uint8_t)mac_addr;
- ret = 0;
+ return (0);
}
- return ret;
+ return (1);
}
static int
@@ -4752,17 +4747,19 @@
if (sc->bge_asicrev == BGE_ASICREV_BCM5906)
mac_offset = BGE_EE_MAC_OFFSET_5906;
- return bge_read_nvram(sc, ether_addr, mac_offset + 2, ETHER_ADDR_LEN);
+ return (bge_read_nvram(sc, ether_addr, mac_offset + 2,
+ ETHER_ADDR_LEN));
}
static int
bge_get_eaddr_eeprom(struct bge_softc *sc, uint8_t ether_addr[])
{
- if (!(sc->bge_flags & BGE_FLAG_EEPROM))
- return 1;
+
+ if (sc->bge_asicrev == BGE_ASICREV_BCM5906)
+ return (1);
- return bge_read_eeprom(sc, ether_addr, BGE_EE_MAC_OFFSET + 2,
- ETHER_ADDR_LEN);
+ return (bge_read_eeprom(sc, ether_addr, BGE_EE_MAC_OFFSET + 2,
+ ETHER_ADDR_LEN));
}
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list