PERFORCE change 118769 for review
Matt Jacob
mjacob at FreeBSD.org
Wed Apr 25 04:58:55 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=118769
Change 118769 by mjacob at mjexp on 2007/04/25 04:57:59
IFC
Affected files ...
.. //depot/projects/mjexp/sys/amd64/amd64/pmap.c#9 integrate
.. //depot/projects/mjexp/sys/amd64/amd64/vm_machdep.c#2 integrate
.. //depot/projects/mjexp/sys/amd64/include/vmparam.h#2 integrate
.. //depot/projects/mjexp/sys/cam/scsi/scsi_da.c#9 integrate
.. //depot/projects/mjexp/sys/compat/linprocfs/linprocfs.c#11 integrate
.. //depot/projects/mjexp/sys/compat/opensolaris/kern/opensolaris_misc.c#2 integrate
.. //depot/projects/mjexp/sys/compat/opensolaris/kern/opensolaris_vfs.c#3 integrate
.. //depot/projects/mjexp/sys/compat/opensolaris/sys/misc.h#2 integrate
.. //depot/projects/mjexp/sys/compat/opensolaris/sys/sunddi.h#1 branch
.. //depot/projects/mjexp/sys/compat/opensolaris/sys/types.h#2 integrate
.. //depot/projects/mjexp/sys/compat/opensolaris/sys/vnode.h#2 integrate
.. //depot/projects/mjexp/sys/conf/files#21 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/dnlc.c#5 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/arc.c#4 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/spa.c#5 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/spa_config.c#4 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/vdev.c#2 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zap.c#3 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c#2 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c#2 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#4 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c#2 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#4 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#3 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#3 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zil.c#2 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zio.c#2 integrate
.. //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zvol.c#2 integrate
.. //depot/projects/mjexp/sys/dev/acpi_support/acpi_ibm.c#3 integrate
.. //depot/projects/mjexp/sys/dev/ath/if_ath.c#9 integrate
.. //depot/projects/mjexp/sys/dev/firewire/firewire.h#2 integrate
.. //depot/projects/mjexp/sys/dev/firewire/fwdev.c#4 integrate
.. //depot/projects/mjexp/sys/dev/led/led.c#2 integrate
.. //depot/projects/mjexp/sys/dev/led/led.h#2 integrate
.. //depot/projects/mjexp/sys/dev/msk/if_msk.c#8 integrate
.. //depot/projects/mjexp/sys/dev/msk/if_mskreg.h#2 integrate
.. //depot/projects/mjexp/sys/dev/usb/if_ural.c#8 integrate
.. //depot/projects/mjexp/sys/fs/devfs/devfs_devs.c#4 integrate
.. //depot/projects/mjexp/sys/fs/devfs/devfs_vnops.c#8 integrate
.. //depot/projects/mjexp/sys/fs/procfs/procfs_map.c#3 integrate
.. //depot/projects/mjexp/sys/fs/pseudofs/pseudofs_vncache.c#6 integrate
.. //depot/projects/mjexp/sys/geom/uzip/g_uzip.c#3 integrate
.. //depot/projects/mjexp/sys/i386/i386/pmap.c#10 integrate
.. //depot/projects/mjexp/sys/i386/i386/sys_machdep.c#4 integrate
.. //depot/projects/mjexp/sys/i386/i386/vm_machdep.c#4 integrate
.. //depot/projects/mjexp/sys/i386/include/vmparam.h#3 integrate
.. //depot/projects/mjexp/sys/ia64/include/vmparam.h#2 integrate
.. //depot/projects/mjexp/sys/kern/kern_linker.c#7 integrate
.. //depot/projects/mjexp/sys/kern/kern_malloc.c#3 integrate
.. //depot/projects/mjexp/sys/kern/kern_time.c#7 integrate
.. //depot/projects/mjexp/sys/kern/kern_uuid.c#3 integrate
.. //depot/projects/mjexp/sys/kern/vfs_bio.c#10 integrate
.. //depot/projects/mjexp/sys/modules/zfs/Makefile#3 integrate
.. //depot/projects/mjexp/sys/netgraph/ng_l2tp.c#2 integrate
.. //depot/projects/mjexp/sys/netinet/sctp.h#3 integrate
.. //depot/projects/mjexp/sys/netinet/sctp_indata.c#10 integrate
.. //depot/projects/mjexp/sys/netinet/sctp_indata.h#3 integrate
.. //depot/projects/mjexp/sys/netinet/sctp_input.c#10 integrate
.. //depot/projects/mjexp/sys/netinet/sctp_output.c#11 integrate
.. //depot/projects/mjexp/sys/netinet/sctp_pcb.c#10 integrate
.. //depot/projects/mjexp/sys/netinet/sctp_pcb.h#7 integrate
.. //depot/projects/mjexp/sys/netinet/sctp_structs.h#10 integrate
.. //depot/projects/mjexp/sys/netinet/sctp_uio.h#10 integrate
.. //depot/projects/mjexp/sys/netinet/sctp_usrreq.c#10 integrate
.. //depot/projects/mjexp/sys/netinet/sctputil.c#10 integrate
.. //depot/projects/mjexp/sys/netinet/sctputil.h#8 integrate
.. //depot/projects/mjexp/sys/netinet/tcp_input.c#12 integrate
.. //depot/projects/mjexp/sys/netinet6/in6_pcb.c#3 integrate
.. //depot/projects/mjexp/sys/netinet6/route6.c#2 integrate
.. //depot/projects/mjexp/sys/nfsclient/nfs_lock.c#2 integrate
.. //depot/projects/mjexp/sys/nfsserver/nfs_syscalls.c#7 integrate
.. //depot/projects/mjexp/sys/pci/if_vr.c#4 integrate
.. //depot/projects/mjexp/sys/pci/if_vrreg.h#3 integrate
.. //depot/projects/mjexp/sys/security/audit/audit_syscalls.c#7 integrate
.. //depot/projects/mjexp/sys/security/mac/mac_audit.c#1 branch
.. //depot/projects/mjexp/sys/security/mac/mac_framework.h#6 integrate
.. //depot/projects/mjexp/sys/security/mac/mac_inet.c#5 integrate
.. //depot/projects/mjexp/sys/security/mac/mac_net.c#5 integrate
.. //depot/projects/mjexp/sys/security/mac/mac_pipe.c#5 integrate
.. //depot/projects/mjexp/sys/security/mac/mac_policy.h#3 integrate
.. //depot/projects/mjexp/sys/security/mac/mac_process.c#4 integrate
.. //depot/projects/mjexp/sys/security/mac/mac_socket.c#4 integrate
.. //depot/projects/mjexp/sys/security/mac/mac_system.c#6 integrate
.. //depot/projects/mjexp/sys/security/mac/mac_vfs.c#5 integrate
.. //depot/projects/mjexp/sys/security/mac_biba/mac_biba.c#7 integrate
.. //depot/projects/mjexp/sys/security/mac_bsdextended/mac_bsdextended.c#7 integrate
.. //depot/projects/mjexp/sys/security/mac_ifoff/mac_ifoff.c#5 integrate
.. //depot/projects/mjexp/sys/security/mac_lomac/mac_lomac.c#6 integrate
.. //depot/projects/mjexp/sys/security/mac_mls/mac_mls.c#5 integrate
.. //depot/projects/mjexp/sys/security/mac_partition/mac_partition.c#6 integrate
.. //depot/projects/mjexp/sys/security/mac_portacl/mac_portacl.c#7 integrate
.. //depot/projects/mjexp/sys/security/mac_seeotheruids/mac_seeotheruids.c#7 integrate
.. //depot/projects/mjexp/sys/security/mac_stub/mac_stub.c#6 integrate
.. //depot/projects/mjexp/sys/security/mac_test/mac_test.c#6 integrate
.. //depot/projects/mjexp/sys/sparc64/include/vmparam.h#2 integrate
.. //depot/projects/mjexp/sys/sun4v/include/vmparam.h#2 integrate
.. //depot/projects/mjexp/sys/sys/mount.h#11 integrate
.. //depot/projects/mjexp/sys/sys/priv.h#7 integrate
.. //depot/projects/mjexp/sys/sys/proc.h#13 integrate
.. //depot/projects/mjexp/sys/vm/swap_pager.c#7 integrate
Differences ...
==== //depot/projects/mjexp/sys/amd64/amd64/pmap.c#9 (text+ko) ====
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.582 2007/04/13 16:07:29 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.583 2007/04/21 14:17:29 ups Exp $");
/*
* Manages physical address maps.
@@ -209,7 +209,7 @@
static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va,
vm_page_t m, vm_prot_t prot, vm_page_t mpte);
static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq,
- vm_offset_t sva, pd_entry_t ptepde);
+ vm_offset_t sva, pd_entry_t ptepde, vm_page_t *free);
static void pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde);
static void pmap_remove_entry(struct pmap *pmap, vm_page_t m,
vm_offset_t va);
@@ -221,8 +221,9 @@
static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags);
static vm_page_t _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, int flags);
-static int _pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m);
-static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t);
+static int _pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m,
+ vm_page_t* free);
+static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t, vm_page_t *);
static vm_offset_t pmap_kmem_choose(vm_offset_t addr);
CTASSERT(1 << PDESHIFT == sizeof(pd_entry_t));
@@ -1065,24 +1066,36 @@
/***************************************************
* Page table page management routines.....
***************************************************/
+static PMAP_INLINE void
+pmap_free_zero_pages(vm_page_t free)
+{
+ vm_page_t m;
+ while (free != NULL) {
+ m = free;
+ free = m->right;
+ vm_page_free_zero(m);
+ }
+}
+
/*
* This routine unholds page table pages, and if the hold count
* drops to zero, then it decrements the wire count.
*/
static PMAP_INLINE int
-pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m)
+pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t *free)
{
--m->wire_count;
if (m->wire_count == 0)
- return _pmap_unwire_pte_hold(pmap, va, m);
+ return _pmap_unwire_pte_hold(pmap, va, m, free);
else
return 0;
}
static int
-_pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m)
+_pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m,
+ vm_page_t *free)
{
vm_offset_t pteva;
@@ -1114,14 +1127,14 @@
vm_page_t pdpg;
pdpg = PHYS_TO_VM_PAGE(*pmap_pdpe(pmap, va) & PG_FRAME);
- pmap_unwire_pte_hold(pmap, va, pdpg);
+ pmap_unwire_pte_hold(pmap, va, pdpg, free);
}
if (m->pindex >= NUPDE && m->pindex < (NUPDE + NUPDPE)) {
/* We just released a PD, unhold the matching PDP */
vm_page_t pdppg;
pdppg = PHYS_TO_VM_PAGE(*pmap_pml4e(pmap, va) & PG_FRAME);
- pmap_unwire_pte_hold(pmap, va, pdppg);
+ pmap_unwire_pte_hold(pmap, va, pdppg, free);
}
/*
@@ -1130,7 +1143,13 @@
*/
pmap_invalidate_page(pmap, pteva);
- vm_page_free_zero(m);
+ /*
+ * Put page on a list so that it is released after
+ * *ALL* TLB shootdown is done
+ */
+ m->right = *free;
+ *free = m;
+
atomic_subtract_int(&cnt.v_wire_count, 1);
return 1;
}
@@ -1140,7 +1159,7 @@
* conditionally free the page, and manage the hold/wire counts.
*/
static int
-pmap_unuse_pt(pmap_t pmap, vm_offset_t va, pd_entry_t ptepde)
+pmap_unuse_pt(pmap_t pmap, vm_offset_t va, pd_entry_t ptepde, vm_page_t *free)
{
vm_page_t mpte;
@@ -1148,7 +1167,7 @@
return 0;
KASSERT(ptepde != 0, ("pmap_unuse_pt: ptepde != 0"));
mpte = PHYS_TO_VM_PAGE(ptepde & PG_FRAME);
- return pmap_unwire_pte_hold(pmap, va, mpte);
+ return pmap_unwire_pte_hold(pmap, va, mpte, free);
}
void
@@ -1366,7 +1385,7 @@
{
vm_pindex_t ptepindex;
pd_entry_t *pd;
- vm_page_t m;
+ vm_page_t m, free;
KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT ||
(flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK,
@@ -1390,8 +1409,10 @@
*pd = 0;
pd = 0;
pmap->pm_stats.resident_count -= NBPDR / PAGE_SIZE;
- pmap_unuse_pt(pmap, va, *pmap_pdpe(pmap, va));
+ free = NULL;
+ pmap_unuse_pt(pmap, va, *pmap_pdpe(pmap, va), &free);
pmap_invalidate_all(kernel_pmap);
+ pmap_free_zero_pages(free);
}
/*
@@ -1609,7 +1630,7 @@
pt_entry_t *pte, tpte;
pv_entry_t next_pv, pv;
vm_offset_t va;
- vm_page_t m;
+ vm_page_t m, free;
TAILQ_FOREACH(m, &vpq->pl, pageq) {
if (m->hold_count || m->busy)
@@ -1635,12 +1656,14 @@
va, tpte));
vm_page_dirty(m);
}
+ free = NULL;
+ pmap_unuse_pt(pmap, va, ptepde, &free);
pmap_invalidate_page(pmap, va);
+ pmap_free_zero_pages(free);
TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
if (TAILQ_EMPTY(&m->md.pv_list))
vm_page_flag_clear(m, PG_WRITEABLE);
m->md.pv_list_count--;
- pmap_unuse_pt(pmap, va, ptepde);
free_pv_entry(pmap, pv);
if (pmap != locked_pmap)
PMAP_UNLOCK(pmap);
@@ -1833,7 +1856,8 @@
* pmap_remove_pte: do the things to unmap a page in a process
*/
static int
-pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t va, pd_entry_t ptepde)
+pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t va,
+ pd_entry_t ptepde, vm_page_t *free)
{
pt_entry_t oldpte;
vm_page_t m;
@@ -1861,7 +1885,7 @@
vm_page_flag_set(m, PG_REFERENCED);
pmap_remove_entry(pmap, m, va);
}
- return (pmap_unuse_pt(pmap, va, ptepde));
+ return (pmap_unuse_pt(pmap, va, ptepde, free));
}
/*
@@ -1871,6 +1895,7 @@
pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde)
{
pt_entry_t *pte;
+ vm_page_t free = NULL;
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
if ((*pde & PG_V) == 0)
@@ -1878,8 +1903,9 @@
pte = pmap_pde_to_pte(pde, va);
if ((*pte & PG_V) == 0)
return;
- pmap_remove_pte(pmap, pte, va, *pde);
+ pmap_remove_pte(pmap, pte, va, *pde, &free);
pmap_invalidate_page(pmap, va);
+ pmap_free_zero_pages(free);
}
/*
@@ -1896,6 +1922,7 @@
pdp_entry_t *pdpe;
pd_entry_t ptpaddr, *pde;
pt_entry_t *pte;
+ vm_page_t free = NULL;
int anyvalid;
/*
@@ -1959,7 +1986,7 @@
if ((ptpaddr & PG_PS) != 0) {
*pde = 0;
pmap->pm_stats.resident_count -= NBPDR / PAGE_SIZE;
- pmap_unuse_pt(pmap, sva, *pdpe);
+ pmap_unuse_pt(pmap, sva, *pdpe, &free);
anyvalid = 1;
continue;
}
@@ -1983,14 +2010,16 @@
*/
if ((*pte & PG_G) == 0)
anyvalid = 1;
- if (pmap_remove_pte(pmap, pte, sva, ptpaddr))
+ if (pmap_remove_pte(pmap, pte, sva, ptpaddr, &free))
break;
}
}
out:
- vm_page_unlock_queues();
- if (anyvalid)
+ if (anyvalid) {
pmap_invalidate_all(pmap);
+ pmap_free_zero_pages(free);
+ }
+ vm_page_unlock_queues();
PMAP_UNLOCK(pmap);
}
@@ -2014,6 +2043,7 @@
pmap_t pmap;
pt_entry_t *pte, tpte;
pd_entry_t ptepde;
+ vm_page_t free;
#if defined(PMAP_DIAGNOSTIC)
/*
@@ -2045,10 +2075,12 @@
pv->pv_va, tpte));
vm_page_dirty(m);
}
+ free = NULL;
+ pmap_unuse_pt(pmap, pv->pv_va, ptepde, &free);
pmap_invalidate_page(pmap, pv->pv_va);
+ pmap_free_zero_pages(free);
TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
m->md.pv_list_count--;
- pmap_unuse_pt(pmap, pv->pv_va, ptepde);
free_pv_entry(pmap, pv);
PMAP_UNLOCK(pmap);
}
@@ -2161,9 +2193,9 @@
}
}
}
- vm_page_unlock_queues();
if (anychanged)
pmap_invalidate_all(pmap);
+ vm_page_unlock_queues();
PMAP_UNLOCK(pmap);
}
@@ -2413,6 +2445,7 @@
pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
vm_prot_t prot, vm_page_t mpte)
{
+ vm_page_t free;
pt_entry_t *pte;
vm_paddr_t pa;
@@ -2471,7 +2504,7 @@
pte = vtopte(va);
if (*pte) {
if (mpte != NULL) {
- pmap_unwire_pte_hold(pmap, va, mpte);
+ mpte->wire_count--;
mpte = NULL;
}
return (mpte);
@@ -2483,7 +2516,11 @@
if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0 &&
!pmap_try_insert_pv_entry(pmap, va, m)) {
if (mpte != NULL) {
- pmap_unwire_pte_hold(pmap, va, mpte);
+ free = NULL;
+ if (pmap_unwire_pte_hold(pmap, va, mpte, &free)) {
+ pmap_invalidate_page(pmap, va);
+ pmap_free_zero_pages(free);
+ }
mpte = NULL;
}
return (mpte);
@@ -2657,6 +2694,7 @@
pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len,
vm_offset_t src_addr)
{
+ vm_page_t free;
vm_offset_t addr;
vm_offset_t end_addr = src_addr + len;
vm_offset_t va_next;
@@ -2716,7 +2754,7 @@
dst_pmap->pm_stats.resident_count +=
NBPDR / PAGE_SIZE;
} else
- pmap_unwire_pte_hold(dst_pmap, addr, dstmpde);
+ dstmpde->wire_count--;
continue;
}
@@ -2753,9 +2791,15 @@
*dst_pte = ptetemp & ~(PG_W | PG_M |
PG_A);
dst_pmap->pm_stats.resident_count++;
- } else
- pmap_unwire_pte_hold(dst_pmap, addr,
- dstmpte);
+ } else {
+ free = NULL;
+ if (pmap_unwire_pte_hold(dst_pmap,
+ addr, dstmpte, &free)) {
+ pmap_invalidate_page(dst_pmap,
+ addr);
+ pmap_free_zero_pages(free);
+ }
+ }
if (dstmpte->wire_count >= srcmpte->wire_count)
break;
}
@@ -2866,7 +2910,7 @@
pmap_remove_pages(pmap_t pmap)
{
pt_entry_t *pte, tpte;
- vm_page_t m;
+ vm_page_t m, free = NULL;
pv_entry_t pv;
struct pv_chunk *pc, *npc;
int field, idx;
@@ -2939,7 +2983,7 @@
if (TAILQ_EMPTY(&m->md.pv_list))
vm_page_flag_clear(m, PG_WRITEABLE);
pmap_unuse_pt(pmap, pv->pv_va,
- *vtopde(pv->pv_va));
+ *vtopde(pv->pv_va), &free);
}
}
if (allfree) {
@@ -2952,8 +2996,9 @@
vm_page_free(m);
}
}
+ pmap_invalidate_all(pmap);
+ pmap_free_zero_pages(free);
vm_page_unlock_queues();
- pmap_invalidate_all(pmap);
PMAP_UNLOCK(pmap);
}
==== //depot/projects/mjexp/sys/amd64/amd64/vm_machdep.c#2 (text+ko) ====
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/vm_machdep.c,v 1.252 2006/09/17 14:54:14 davidxu Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/vm_machdep.c,v 1.254 2007/04/24 21:17:45 jhb Exp $");
#include "opt_isa.h"
#include "opt_cpu.h"
@@ -457,6 +457,10 @@
static void
cpu_reset_real()
{
+ struct region_descriptor null_idt;
+ int b;
+
+ disable_intr();
/*
* Attempt to do a CPU reset via the keyboard controller,
@@ -465,14 +469,44 @@
*/
outb(IO_KBD + 4, 0xFE);
DELAY(500000); /* wait 0.5 sec to see if that did it */
- printf("Keyboard reset did not work, attempting CPU shutdown\n");
+
+ /*
+ * Attempt to force a reset via the Reset Control register at
+ * I/O port 0xcf9. Bit 2 forces a system reset when it is
+ * written as 1. Bit 1 selects the type of reset to attempt:
+ * 0 selects a "soft" reset, and 1 selects a "hard" reset. We
+ * try to do a "soft" reset first, and then a "hard" reset.
+ */
+ outb(0xcf9, 0x2);
+ outb(0xcf9, 0x6);
+ DELAY(500000); /* wait 0.5 sec to see if that did it */
+
+ /*
+ * Attempt to force a reset via the Fast A20 and Init register
+ * at I/O port 0x92. Bit 1 serves as an alternate A20 gate.
+ * Bit 0 asserts INIT# when set to 1. We are careful to only
+ * preserve bit 1 while setting bit 0. We also must clear bit
+ * 0 before setting it if it isn't already clear.
+ */
+ b = inb(0x92);
+ if (b != 0xff) {
+ if ((b & 0x1) != 0)
+ outb(0x92, b & 0xfe);
+ outb(0x92, b | 0x1);
+ DELAY(500000); /* wait 0.5 sec to see if that did it */
+ }
+
+ printf("No known reset method worked, attempting CPU shutdown\n");
DELAY(1000000); /* wait 1 sec for printf to complete */
- /* Force a shutdown by unmapping entire address space. */
- bzero((caddr_t)PML4map, PAGE_SIZE);
+ /* Wipe the IDT. */
+ null_idt.rd_limit = 0;
+ null_idt.rd_base = 0;
+ lidt(&null_idt);
/* "good night, sweet prince .... <THUNK!>" */
- invltlb();
+ breakpoint();
+
/* NOTREACHED */
while(1);
}
==== //depot/projects/mjexp/sys/amd64/include/vmparam.h#2 (text+ko) ====
@@ -38,7 +38,7 @@
* SUCH DAMAGE.
*
* from: @(#)vmparam.h 5.9 (Berkeley) 5/12/91
- * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.45 2004/10/27 17:21:15 peter Exp $
+ * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.46 2007/04/21 01:14:47 sepotvin Exp $
*/
@@ -122,7 +122,8 @@
/*
* How many physical pages per KVA page allocated.
- * min(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE), VM_KMEM_SIZE_MAX)
+ * min(max(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE),
+ * VM_KMEM_SIZE_MIN), VM_KMEM_SIZE_MAX)
* is the total KVA space allocated for kmem_map.
*/
#ifndef VM_KMEM_SIZE_SCALE
==== //depot/projects/mjexp/sys/cam/scsi/scsi_da.c#9 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.207 2007/04/19 22:18:15 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.208 2007/04/23 18:01:44 scottl Exp $");
#include <sys/param.h>
@@ -39,20 +39,13 @@
#include <sys/taskqueue.h>
#include <sys/lock.h>
#include <sys/mutex.h>
-#endif /* _KERNEL */
-
+#include <sys/conf.h>
#include <sys/devicestat.h>
-#include <sys/conf.h>
#include <sys/eventhandler.h>
#include <sys/malloc.h>
#include <sys/cons.h>
-
-#include <machine/md_var.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-
#include <geom/geom_disk.h>
+#endif /* _KERNEL */
#ifndef _KERNEL
#include <stdio.h>
==== //depot/projects/mjexp/sys/compat/linprocfs/linprocfs.c#11 (text+ko) ====
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.110 2007/04/15 17:02:03 des Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.111 2007/04/22 08:41:52 des Exp $");
#include <sys/param.h>
#include <sys/queue.h>
@@ -312,9 +312,11 @@
int error;
/* resolve symlinks etc. in the emulation tree prefix */
- NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, linux_emul_path, td);
+ NDINIT(&nd, LOOKUP, FOLLOW | MPSAFE, UIO_SYSSPACE, linux_emul_path, td);
flep = NULL;
- if (namei(&nd) != 0 || vn_fullpath(td, nd.ni_vp, &dlep, &flep) != 0)
+ error = namei(&nd);
+ VFS_UNLOCK_GIANT(NDHASGIANT(&nd));
+ if (error != 0 || vn_fullpath(td, nd.ni_vp, &dlep, &flep) != 0)
lep = linux_emul_path;
else
lep = dlep;
==== //depot/projects/mjexp/sys/compat/opensolaris/kern/opensolaris_misc.c#2 (text+ko) ====
@@ -25,12 +25,13 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/opensolaris/kern/opensolaris_misc.c,v 1.1 2007/04/08 16:29:23 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/opensolaris/kern/opensolaris_misc.c,v 1.2 2007/04/23 00:52:06 pjd Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/libkern.h>
#include <sys/misc.h>
+#include <sys/sunddi.h>
char hw_serial[11] = "0";
==== //depot/projects/mjexp/sys/compat/opensolaris/kern/opensolaris_vfs.c#3 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/opensolaris/kern/opensolaris_vfs.c,v 1.3 2007/04/18 15:24:48 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/opensolaris/kern/opensolaris_vfs.c,v 1.4 2007/04/21 12:02:57 pjd Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -206,7 +206,7 @@
mp->mnt_flag |= fsflags & (MNT_UPDATEMASK | MNT_FORCE | MNT_ROOTFS);
/*
* Unprivileged user can trigger mounting a snapshot, but we don't want
- * him to unmount it, so we switch to privileged credential.
+ * him to unmount it, so we switch to privileged credentials.
*/
crfree(mp->mnt_cred);
mp->mnt_cred = crdup(kcred);
==== //depot/projects/mjexp/sys/compat/opensolaris/sys/misc.h#2 (text+ko) ====
@@ -23,18 +23,23 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/compat/opensolaris/sys/misc.h,v 1.1 2007/04/08 16:29:24 pjd Exp $
+ * $FreeBSD: src/sys/compat/opensolaris/sys/misc.h,v 1.2 2007/04/23 00:52:06 pjd Exp $
*/
#ifndef _OPENSOLARIS_SYS_MISC_H_
#define _OPENSOLARIS_SYS_MISC_H_
+#define _FIOFFS (INT_MIN)
+#define _FIOGDIO (INT_MIN+1)
+#define _FIOSDIO (INT_MIN+2)
+
+#define _FIO_SEEK_DATA FIOSEEKDATA
+#define _FIO_SEEK_HOLE FIOSEEKHOLE
+
struct opensolaris_utsname {
char *nodename;
};
extern char hw_serial[11];
extern struct opensolaris_utsname utsname;
-
-int ddi_strtoul(const char *str, char **nptr, int base, unsigned long *result);
#endif /* _OPENSOLARIS_SYS_MISC_H_ */
==== //depot/projects/mjexp/sys/compat/opensolaris/sys/types.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/compat/opensolaris/sys/types.h,v 1.1 2007/04/06 01:09:06 pjd Exp $
+ * $FreeBSD: src/sys/compat/opensolaris/sys/types.h,v 1.2 2007/04/23 00:52:06 pjd Exp $
*/
#ifndef _OPENSOLARIS_SYS_TYPES_H_
@@ -49,6 +49,7 @@
typedef off_t offset_t;
typedef long ptrdiff_t; /* pointer difference */
typedef void pathname_t;
+typedef int64_t rlim64_t;
#else
==== //depot/projects/mjexp/sys/compat/opensolaris/sys/vnode.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/compat/opensolaris/sys/vnode.h,v 1.1 2007/04/06 01:09:06 pjd Exp $
+ * $FreeBSD: src/sys/compat/opensolaris/sys/vnode.h,v 1.2 2007/04/23 00:52:06 pjd Exp $
*/
#ifndef _OPENSOLARIS_SYS_VNODE_H_
@@ -40,6 +40,7 @@
typedef struct vnode vnode_t;
typedef struct vattr vattr_t;
+typedef void caller_context_t;
typedef struct vop_vector vnodeops_t;
#define vop_fid vop_vptofh
@@ -63,11 +64,25 @@
#define VN_RELE(v) vrele(v)
#define VN_URELE(v) vput(v)
+#define VOP_REALVP(vp, vpp) (*(vpp) = (vp), 0)
+
+#define vnevent_remove(vp) do { } while (0)
+#define vnevent_rmdir(vp) do { } while (0)
+#define vnevent_rename_src(vp) do { } while (0)
+#define vnevent_rename_dest(vp) do { } while (0)
+
+
#define IS_DEVVP(vp) \
((vp)->v_type == VCHR || (vp)->v_type == VBLK || (vp)->v_type == VFIFO)
#define MODEMASK ALLPERMS
+#define specvp(vp, rdev, type, cr) (VN_HOLD(vp), (vp))
+#define MANDMODE(mode) (0)
+#define chklock(vp, op, offset, size, mode, ct) (0)
+#define cleanlocks(vp, pid, foo) do { } while (0)
+#define cleanshares(vp, pid) do { } while (0)
+
/*
* We will use va_spare is place of Solaris' va_mask.
* This field is initialized in zfs_setattr().
@@ -80,6 +95,9 @@
#define va_blksize va_blocksize
#define va_seq va_gen
+#define MAXOFFSET_T OFF_MAX
+#define EXCL 0
+
#define AT_TYPE 0x0001
#define AT_MODE 0x0002
#define AT_UID 0x0004
@@ -95,6 +113,8 @@
#define AT_BLKSIZE 0x1000
#define AT_NBLOCKS 0x2000
#define AT_SEQ 0x4000
+#define AT_NOSET (AT_NLINK|AT_RDEV|AT_FSID|AT_NODEID|AT_TYPE|\
+ AT_BLKSIZE|AT_NBLOCKS|AT_SEQ)
#define ACCESSED (AT_ATIME)
#define STATE_CHANGED (AT_CTIME)
@@ -122,10 +142,15 @@
vap->va_mask |= AT_MODE;
}
-enum create { CRCREAT };
#define FCREAT O_CREAT
#define FTRUNC O_TRUNC
+#define FDSYNC FFSYNC
+#define FRSYNC FFSYNC
+#define FSYNC FFSYNC
#define FOFFMAX 0x00
+
+enum create { CRCREAT };
+
static __inline int
zfs_vn_open(char *pnamep, enum uio_seg seg, int filemode, int createmode,
vnode_t **vpp, enum create crwhy, mode_t umask)
@@ -185,7 +210,6 @@
#define vn_rdwr(rw, vp, base, len, offset, seg, ioflag, ulimit, cr, residp) \
zfs_vn_rdwr((rw), (vp), (base), (len), (offset), (seg), (ioflag), (ulimit), (cr), (residp))
-#define FSYNC MNT_WAIT
static __inline int
zfs_vop_fsync(vnode_t *vp, int flag, cred_t *cr)
{
@@ -199,7 +223,7 @@
if ((error = vn_start_write(vp, &mp, V_WAIT | PCATCH)) != 0)
goto drop;
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
- error = VOP_FSYNC(vp, flag, td);
+ error = VOP_FSYNC(vp, MNT_WAIT, td);
VOP_UNLOCK(vp, 0, td);
vn_finished_write(mp);
drop:
==== //depot/projects/mjexp/sys/conf/files#21 (text+ko) ====
@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.1196 2007/04/17 00:35:10 thompsa Exp $
+# $FreeBSD: src/sys/conf/files,v 1.1197 2007/04/21 22:08:47 rwatson Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -1957,6 +1957,7 @@
security/audit/audit_syscalls.c standard
security/audit/audit_trigger.c optional audit
security/audit/audit_worker.c optional audit
+security/mac/mac_audit.c optional mac audit
security/mac/mac_framework.c optional mac
security/mac/mac_inet.c optional mac inet
security/mac/mac_label.c optional mac
==== //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/dnlc.c#5 (text+ko) ====
@@ -203,7 +203,11 @@
{ "pick_last", KSTAT_DATA_UINT64 },
};
+#ifdef FREEBSD_NAMECACHE
+static int doingcache = 0;
+#else
static int doingcache = 1;
+#endif
TUNABLE_INT("vfs.zfs.dnlc.enable", &doingcache);
SYSCTL_INT(_vfs_zfs_dnlc, OID_AUTO, enable, CTLFLAG_RDTUN, &doingcache, 0,
"Enable/disable name cache");
==== //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/arc.c#4 (text+ko) ====
@@ -2802,13 +2802,14 @@
#ifdef _KERNEL
/* Warn about ZFS memory requirements. */
if (((uint64_t)physmem * PAGESIZE) < (256 + 128 + 64) * (1 << 20)) {
- printf("ZFS WARNING: Recomended minimum of RAM size is 512MB, "
- "expect unstable behaviour.\n");
+ printf("ZFS WARNING: Recommended minimum RAM size is 512MB; "
+ "expect unstable behavior.\n");
} else if (kmem_size() < 256 * (1 << 20)) {
- printf("ZFS WARNING: Recomended minimum of kmem_map size is "
- "256MB, expect unstable behaviour.\n");
- printf(" Consider tunning vm.kmem_size and "
- "vm.kmem_size_max in /boot/loader.conf.\n");
+ printf("ZFS WARNING: Recommended minimum kmem_size is 256MB; "
+ "expect unstable behavior.\n");
+ printf(" Consider tuning vm.kmem_size or "
+ "vm.kmem_size_min\n");
+ printf(" in /boot/loader.conf.\n");
}
#endif
}
==== //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/spa.c#5 (text+ko) ====
@@ -57,6 +57,7 @@
#include <sys/dsl_synctask.h>
#include <sys/fs/zfs.h>
#include <sys/callb.h>
+#include <sys/sunddi.h>
int zio_taskq_threads = 0;
SYSCTL_DECL(_vfs_zfs);
@@ -499,10 +500,9 @@
/*
* Try to open all vdevs, loading each label in the process.
*/
- if (vdev_open(rvd) != 0) {
- error = ENXIO;
+ error = vdev_open(rvd);
+ if (error != 0)
goto out;
- }
/*
* Validate the labels for all leaf vdevs. We need to grab the config
@@ -513,10 +513,8 @@
error = vdev_validate(rvd);
spa_config_exit(spa, FTAG);
- if (error != 0) {
- error = EBADF;
+ if (error != 0)
goto out;
- }
if (rvd->vdev_state <= VDEV_STATE_CANT_OPEN) {
error = ENXIO;
==== //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/spa_config.c#4 (text+ko) ====
@@ -35,6 +35,7 @@
#include <sys/vdev_impl.h>
#include <sys/zfs_ioctl.h>
#include <sys/utsname.h>
+#include <sys/sunddi.h>
#ifdef _KERNEL
#include <sys/kobj.h>
#endif
==== //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/vdev.c#2 (text+ko) ====
@@ -931,7 +931,7 @@
for (c = 0; c < vd->vdev_children; c++)
if (vdev_validate(vd->vdev_child[c]) != 0)
- return (-1);
+ return (EBADF);
/*
* If the device has already failed, or was marked offline, don't do
@@ -974,7 +974,7 @@
if (spa->spa_load_state == SPA_LOAD_OPEN &&
state != POOL_STATE_ACTIVE)
- return (-1);
+ return (EBADF);
}
/*
@@ -1262,7 +1262,6 @@
vdev_config_dirty(vd->vdev_top);
}
- bzero(&smlock, sizeof(smlock));
mutex_init(&smlock, NULL, MUTEX_DEFAULT, NULL);
space_map_create(&smsync, sm->sm_start, sm->sm_size, sm->sm_shift,
==== //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zap.c#3 (text+ko) ====
@@ -48,6 +48,7 @@
#include <sys/refcount.h>
#include <sys/zap_impl.h>
#include <sys/zap_leaf.h>
+#include <sys/zfs_znode.h>
int fzap_default_block_shift = 14; /* 16k blocksize */
@@ -907,7 +908,7 @@
for (zap_cursor_init(&zc, os, zapobj);
(err = zap_cursor_retrieve(&zc, za)) == 0;
zap_cursor_advance(&zc)) {
- if (za->za_first_integer == value) {
+ if (ZFS_DIRENT_OBJ(za->za_first_integer) == value) {
(void) strcpy(name, za->za_name);
break;
}
==== //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c#2 (text+ko) ====
@@ -41,6 +41,7 @@
#include <sys/unistd.h>
#include <sys/sdt.h>
#include <sys/fs/zfs.h>
+#include <sys/policy.h>
#include <sys/zfs_znode.h>
#include <sys/zfs_acl.h>
#include <sys/zfs_dir.h>
==== //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c#2 (text+ko) ====
@@ -41,6 +41,7 @@
#include <sys/stat.h>
#include <sys/unistd.h>
#include <sys/random.h>
+#include <sys/policy.h>
#include <sys/kcondvar.h>
#include <sys/callb.h>
#include <sys/smp.h>
==== //depot/projects/mjexp/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#4 (text+ko) ====
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list