PERFORCE change 119026 for review
Ulf Lilleengen
lulf at FreeBSD.org
Mon Apr 30 21:30:10 UTC 2007
http://perforce.freebsd.org/chv.cgi?CH=119026
Change 119026 by lulf at lulf_vimes on 2007/04/30 21:29:55
- Add gv_set_vol_state.
- Use the event-system when saving the state.
Affected files ...
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/files#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/part/g_part.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/uzip/g_uzip.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_state.c#5 edit
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/local_apic.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/pmap.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/sys_machdep.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/vm_machdep.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_descrip.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_linker.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_time.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_uuid.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/subr_rman.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/vfs_bio.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/vfs_mount.c#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/ioctl_compat.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/mount.h#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/priv.h#3 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/proc.h#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/vm/swap_pager.c#2 integrate
.. //depot/projects/soc2007/lulf/gvinum_fixup/sys/vm/vm_map.c#2 integrate
Differences ...
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/files#3 (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.1198 2007/04/25 15:30:17 mav Exp $
#
# The long compile-with and dependency lines are required because of
# limitations in config: backslash-newline doesn't work in strings, and
@@ -1550,8 +1550,8 @@
net/if_mib.c standard
net/if_ppp.c optional ppp
net/if_sl.c optional sl
-net/if_spppfr.c optional i4bisppp | sppp
-net/if_spppsubr.c optional i4bisppp | sppp
+net/if_spppfr.c optional i4bisppp | sppp | netgraph_sppp
+net/if_spppsubr.c optional i4bisppp | sppp | netgraph_sppp
net/if_stf.c optional stf
net/if_tun.c optional tun
net/if_tap.c optional tap
@@ -1565,9 +1565,10 @@
net/raw_usrreq.c standard
net/route.c standard
net/rtsock.c standard
-net/slcompress.c optional netgraph_vjc | ppp | sl | sppp
+net/slcompress.c optional netgraph_vjc | ppp | sl | sppp | \
+ netgraph_sppp
net/zlib.c optional crypto | geom_uzip | ipsec | \
- ppp_deflate
+ ppp_deflate | netgraph_deflate
net80211/ieee80211.c optional wlan
net80211/ieee80211_acl.c optional wlan_acl
net80211/ieee80211_amrr.c optional wlan_amrr
@@ -1800,11 +1801,11 @@
netinet/tcp_timer.c optional inet
netinet/tcp_usrreq.c optional inet
netinet/udp_usrreq.c optional inet
-netinet/libalias/alias.c optional libalias
-netinet/libalias/alias_db.c optional libalias
-netinet/libalias/alias_mod.c optional libalias
-netinet/libalias/alias_proxy.c optional libalias
-netinet/libalias/alias_util.c optional libalias
+netinet/libalias/alias.c optional libalias | netgraph_nat
+netinet/libalias/alias_db.c optional libalias | netgraph_nat
+netinet/libalias/alias_mod.c optional libalias | netgraph_nat
+netinet/libalias/alias_proxy.c optional libalias | netgraph_nat
+netinet/libalias/alias_util.c optional libalias | netgraph_nat
netinet6/ah_aesxcbcmac.c optional ipsec
netinet6/ah_core.c optional ipsec
netinet6/ah_input.c optional ipsec
@@ -1957,6 +1958,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/soc2007/lulf/gvinum_fixup/sys/geom/part/g_part.c#2 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/part/g_part.c,v 1.1 2007/02/07 18:55:30 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/part/g_part.c,v 1.2 2007/04/27 05:58:10 marcel Exp $");
#include <sys/param.h>
#include <sys/bio.h>
@@ -52,7 +52,7 @@
};
static struct g_part_scheme g_part_null_scheme = {
- NULL,
+ "n/a",
g_part_null_methods,
sizeof(struct g_part_table),
};
@@ -1249,6 +1249,8 @@
(uintmax_t)pp->mediasize);
G_PART_DUMPCONF(table, entry, sb, indent);
} else { /* Geom configuration. */
+ sbuf_printf(sb, "%s<scheme>%s</scheme>\n", indent,
+ table->gpt_scheme->name);
sbuf_printf(sb, "%s<entries>%u</entries>\n", indent,
table->gpt_entries);
sbuf_printf(sb, "%s<first>%ju</first>\n", indent,
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/uzip/g_uzip.c#2 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/uzip/g_uzip.c,v 1.11 2007/04/07 02:52:13 simokawa Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/uzip/g_uzip.c,v 1.12 2007/04/24 06:30:06 simokawa Exp $");
#include <sys/param.h>
#include <sys/bio.h>
@@ -162,6 +162,13 @@
ulen = MIN(sc->blksz - uoff, bp2->bio_length - upos);
len = sc->offsets[i + 1] - sc->offsets[i];
+ if (len == 0) {
+ /* All zero block: no cache update */
+ bzero(bp2->bio_data + upos, ulen);
+ upos += ulen;
+ bp2->bio_completed += ulen;
+ continue;
+ }
zs.next_in = bp->bio_data + pos;
zs.avail_in = len;
zs.next_out = sc->last_buf;
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_state.c#5 (text+ko) ====
@@ -72,8 +72,21 @@
type = gv_object_type(sc, obj);
switch (type) {
case GV_TYPE_VOL:
+ if (gv_volstatei(state) < 0) {
+ gctl_error(req, "invalid volume state '%s'", state);
+ break;
+ }
+ v = gv_find_vol(sc, obj);
+
+ newstatep = g_malloc(sizeof(int), M_WAITOK | M_ZERO);
+ *newstatep = gv_volstatei(state);
+ flagp = g_malloc(sizeof(int), M_WAITOK | M_ZERO);
+ *flagp = f;
+ gv_post_event(sc, GV_EVENT_SET_VOL_STATE, v, newstatep, flagp);
+ break;
+
case GV_TYPE_PLEX:
- gctl_error(req, "volume or plex state cannot be set currently");
+ gctl_error(req, "plex state cannot be set currently");
break;
case GV_TYPE_SD:
@@ -142,7 +155,7 @@
/* Save the config back to disk. */
if (flags & GV_SETSTATE_CONFIG)
- gv_save_config(d->vinumconf);
+ gv_post_event(sc, GV_EVENT_SAVE_CONFIG, v->vinumconf, NULL, NULL);
return (0);
}
@@ -257,11 +270,45 @@
/* Save the config back to disk. */
if (flags & GV_SETSTATE_CONFIG)
- gv_save_config(s->vinumconf);
+ gv_post_event(sc, GV_EVENT_SAVE_CONFIG, v->vinumconf, NULL, NULL);
return (status);
}
+int
+gv_set_vol_state(struct gv_volume *v, int newstate, int flags)
+{
+ int oldstate;
+
+ KASSERT(v != NULL, ("gv_set_vol_state: NULL v"));
+
+ oldstate = v->state;
+
+ if (newstate == oldstate)
+ return (0);
+
+ switch (newstate) {
+ case GV_VOL_UP:
+ /* Let update handle if the volume can come up. */
+ gv_update_vol_state(v);
+ if (v->state != GV_VOL_UP && flags & GV_SETSTATE_FORCE)
+ v->state = newstate;
+ break;
+ case GV_VOL_DOWN:
+ /*
+ * Set state to GV_VOL_DOWN only if noone is using the volume,
+ * or if the state should be forced.
+ */
+ if ((gv_is_open(v->geom) != 0) &&
+ !(flags & GV_SETSTATE_FORCE))
+ return (-1); /* XXX: ERROR CODES. */
+ v->state = newstate;
+ break;
+ }
+ /* Save config */
+ if (flags & GV_SETSTATE_CONFIG)
+ gv_post_event(sc, GV_EVENT_SAVE_CONFIG, v->vinumconf, NULL, NULL);
+}
/* Update the state of a subdisk based on its environment. */
void
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/local_apic.c#2 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/local_apic.c,v 1.39 2007/03/20 21:53:31 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/local_apic.c,v 1.40 2007/04/25 19:58:42 ariff Exp $");
#include "opt_hwpmc_hooks.h"
@@ -328,6 +328,29 @@
/* XXX: Error and thermal LVTs */
+ if (strcmp(cpu_vendor, "AuthenticAMD") == 0) {
+ /*
+ * Detect the presence of C1E capability mostly on latest
+ * dual-cores (or future) k8 family. This feature renders
+ * the local APIC timer dead, so we disable it by reading
+ * the Interrupt Pending Message register and clearing both
+ * C1eOnCmpHalt (bit 28) and SmiOnCmpHalt (bit 27).
+ *
+ * Reference:
+ * "BIOS and Kernel Developer's Guide for AMD NPT
+ * Family 0Fh Processors"
+ * #32559 revision 3.00
+ */
+ if ((cpu_id & 0x00000f00) == 0x00000f00 &&
+ (cpu_id & 0x0fff0000) >= 0x00040000) {
+ uint64_t msr;
+
+ msr = rdmsr(0xc0010055);
+ if (msr & 0x18000000)
+ wrmsr(0xc0010055, msr & ~0x18000000ULL);
+ }
+ }
+
intr_restore(eflags);
}
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/pmap.c#2 (text+ko) ====
@@ -75,7 +75,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.587 2007/04/13 16:07:29 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/pmap.c,v 1.589 2007/04/25 18:10:44 ups Exp $");
/*
* Manages physical address maps.
@@ -269,7 +269,8 @@
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);
+static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t sva,
+ vm_page_t *free);
static void pmap_remove_page(struct pmap *pmap, vm_offset_t va);
static void pmap_remove_entry(struct pmap *pmap, vm_page_t m,
vm_offset_t va);
@@ -280,10 +281,10 @@
static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags);
static vm_page_t _pmap_allocpte(pmap_t pmap, unsigned ptepindex, int flags);
-static int _pmap_unwire_pte_hold(pmap_t pmap, vm_page_t m);
+static int _pmap_unwire_pte_hold(pmap_t pmap, vm_page_t m, vm_page_t *free);
static pt_entry_t *pmap_pte_quick(pmap_t pmap, vm_offset_t va);
static void pmap_pte_release(pt_entry_t *pte);
-static int pmap_unuse_pt(pmap_t, vm_offset_t);
+static int pmap_unuse_pt(pmap_t, vm_offset_t, vm_page_t *);
static vm_offset_t pmap_kmem_choose(vm_offset_t addr);
#ifdef PAE
static void *pmap_pdpt_allocf(uma_zone_t zone, int bytes, u_int8_t *flags, int wait);
@@ -1129,24 +1130,35 @@
/***************************************************
* 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_page_t m)
+pmap_unwire_pte_hold(pmap_t pmap, vm_page_t m, vm_page_t *free)
{
--m->wire_count;
if (m->wire_count == 0)
- return _pmap_unwire_pte_hold(pmap, m);
+ return _pmap_unwire_pte_hold(pmap, m, free);
else
return 0;
}
static int
-_pmap_unwire_pte_hold(pmap_t pmap, vm_page_t m)
+_pmap_unwire_pte_hold(pmap_t pmap, vm_page_t m, vm_page_t *free)
{
vm_offset_t pteva;
@@ -1156,6 +1168,8 @@
pmap->pm_pdir[m->pindex] = 0;
--pmap->pm_stats.resident_count;
+ atomic_subtract_int(&cnt.v_wire_count, 1);
+
/*
* Do an invltlb to make the invalidated mapping
* take effect immediately.
@@ -1163,8 +1177,13 @@
pteva = VM_MAXUSER_ADDRESS + i386_ptob(m->pindex);
pmap_invalidate_page(pmap, pteva);
- vm_page_free_zero(m);
- atomic_subtract_int(&cnt.v_wire_count, 1);
+ /*
+ * Put page on a list so that it is released after
+ * *ALL* TLB shootdown is done
+ */
+ m->right = *free;
+ *free = m;
+
return 1;
}
@@ -1173,7 +1192,7 @@
* conditionally free the page, and manage the hold/wire counts.
*/
static int
-pmap_unuse_pt(pmap_t pmap, vm_offset_t va)
+pmap_unuse_pt(pmap_t pmap, vm_offset_t va, vm_page_t *free)
{
pd_entry_t ptepde;
vm_page_t mpte;
@@ -1182,7 +1201,7 @@
return 0;
ptepde = *pmap_pde(pmap, va);
mpte = PHYS_TO_VM_PAGE(ptepde & PG_FRAME);
- return pmap_unwire_pte_hold(pmap, mpte);
+ return pmap_unwire_pte_hold(pmap, mpte, free);
}
void
@@ -1683,7 +1702,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;
sched_pin();
TAILQ_FOREACH(m, &vpq->pl, pageq) {
@@ -1710,12 +1729,14 @@
va, (uintmax_t)tpte));
vm_page_dirty(m);
}
+ free = NULL;
+ pmap_unuse_pt(pmap, va, &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);
free_pv_entry(pmap, pv);
if (pmap != locked_pmap)
PMAP_UNLOCK(pmap);
@@ -1930,7 +1951,7 @@
* 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)
+pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t va, vm_page_t *free)
{
pt_entry_t oldpte;
vm_page_t m;
@@ -1959,7 +1980,7 @@
vm_page_flag_set(m, PG_REFERENCED);
pmap_remove_entry(pmap, m, va);
}
- return (pmap_unuse_pt(pmap, va));
+ return (pmap_unuse_pt(pmap, va, free));
}
/*
@@ -1969,14 +1990,16 @@
pmap_remove_page(pmap_t pmap, vm_offset_t va)
{
pt_entry_t *pte;
+ vm_page_t free = NULL;
mtx_assert(&vm_page_queue_mtx, MA_OWNED);
KASSERT(curthread->td_pinned > 0, ("curthread not pinned"));
PMAP_LOCK_ASSERT(pmap, MA_OWNED);
if ((pte = pmap_pte_quick(pmap, va)) == NULL || *pte == 0)
return;
- pmap_remove_pte(pmap, pte, va);
+ pmap_remove_pte(pmap, pte, va, &free);
pmap_invalidate_page(pmap, va);
+ pmap_free_zero_pages(free);
}
/*
@@ -1991,6 +2014,7 @@
vm_offset_t pdnxt;
pd_entry_t ptpaddr;
pt_entry_t *pte;
+ vm_page_t free = NULL;
int anyvalid;
/*
@@ -2065,15 +2089,17 @@
*/
if ((*pte & PG_G) == 0)
anyvalid = 1;
- if (pmap_remove_pte(pmap, pte, sva))
+ if (pmap_remove_pte(pmap, pte, sva, &free))
break;
}
}
out:
sched_unpin();
+ if (anyvalid) {
+ pmap_invalidate_all(pmap);
+ pmap_free_zero_pages(free);
+ }
vm_page_unlock_queues();
- if (anyvalid)
- pmap_invalidate_all(pmap);
PMAP_UNLOCK(pmap);
}
@@ -2096,6 +2122,7 @@
pv_entry_t pv;
pmap_t pmap;
pt_entry_t *pte, tpte;
+ vm_page_t free;
#if defined(PMAP_DIAGNOSTIC)
/*
@@ -2128,10 +2155,12 @@
pv->pv_va, (uintmax_t)tpte));
vm_page_dirty(m);
}
+ free = NULL;
+ pmap_unuse_pt(pmap, pv->pv_va, &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);
free_pv_entry(pmap, pv);
PMAP_UNLOCK(pmap);
}
@@ -2254,9 +2283,9 @@
}
}
sched_unpin();
- vm_page_unlock_queues();
if (anychanged)
pmap_invalidate_all(pmap);
+ vm_page_unlock_queues();
PMAP_UNLOCK(pmap);
}
@@ -2515,6 +2544,7 @@
{
pt_entry_t *pte;
vm_paddr_t pa;
+ vm_page_t free;
KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva ||
(m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) != 0,
@@ -2571,7 +2601,7 @@
pte = vtopte(va);
if (*pte) {
if (mpte != NULL) {
- pmap_unwire_pte_hold(pmap, mpte);
+ mpte->wire_count--;
mpte = NULL;
}
return (mpte);
@@ -2583,7 +2613,12 @@
if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0 &&
!pmap_try_insert_pv_entry(pmap, va, m)) {
if (mpte != NULL) {
- pmap_unwire_pte_hold(pmap, mpte);
+ free = NULL;
+ if (pmap_unwire_pte_hold(pmap, mpte, &free)) {
+ pmap_invalidate_page(pmap, va);
+ pmap_free_zero_pages(free);
+ }
+
mpte = NULL;
}
return (mpte);
@@ -2740,6 +2775,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 pdnxt;
@@ -2816,8 +2852,15 @@
*dst_pte = ptetemp & ~(PG_W | PG_M |
PG_A);
dst_pmap->pm_stats.resident_count++;
- } else
- pmap_unwire_pte_hold(dst_pmap, dstmpte);
+ } else {
+ free = NULL;
+ if (pmap_unwire_pte_hold( dst_pmap,
+ dstmpte, &free)) {
+ pmap_invalidate_page(dst_pmap,
+ addr);
+ pmap_free_zero_pages(free);
+ }
+ }
if (dstmpte->wire_count >= srcmpte->wire_count)
break;
}
@@ -2985,7 +3028,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;
@@ -3059,7 +3102,7 @@
if (TAILQ_EMPTY(&m->md.pv_list))
vm_page_flag_clear(m, PG_WRITEABLE);
- pmap_unuse_pt(pmap, pv->pv_va);
+ pmap_unuse_pt(pmap, pv->pv_va, &free);
}
}
if (allfree) {
@@ -3075,8 +3118,9 @@
}
}
sched_unpin();
+ pmap_invalidate_all(pmap);
+ pmap_free_zero_pages(free);
vm_page_unlock_queues();
- pmap_invalidate_all(pmap);
PMAP_UNLOCK(pmap);
}
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/sys_machdep.c#2 (text+ko) ====
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/sys_machdep.c,v 1.107 2006/11/06 13:41:59 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/sys_machdep.c,v 1.108 2007/04/22 15:31:21 rwatson Exp $");
#include "opt_kstack_pages.h"
#include "opt_mac.h"
@@ -57,7 +57,6 @@
#include <machine/sysarch.h>
#include <security/audit/audit.h>
-#include <security/mac/mac_framework.h>
#include <vm/vm_kern.h> /* for kernel_map */
@@ -289,10 +288,6 @@
int i, error;
char *iomap;
-#ifdef MAC
- if ((error = mac_check_sysarch_ioperm(td->td_ucred)) != 0)
- return (error);
-#endif
if ((error = priv_check(td, PRIV_IO)) != 0)
return (error);
if ((error = securelevel_gt(td->td_ucred, 0)) != 0)
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/vm_machdep.c#2 (text+ko) ====
@@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/vm_machdep.c,v 1.276 2007/03/05 21:40:10 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/vm_machdep.c,v 1.279 2007/04/24 21:17:45 jhb Exp $");
#include "opt_isa.h"
#include "opt_npx.h"
@@ -590,6 +590,7 @@
static void
cpu_reset_real()
{
+ struct region_descriptor null_idt;
#ifndef PC98
int b;
#endif
@@ -625,14 +626,26 @@
outb(IO_KBD + 4, 0xFE);
DELAY(500000); /* wait 0.5 sec to see if that did it */
#endif
- /* Try the PCI reset */
+
+ /*
+ * 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 */
- /* Try port 0x92 fast reset */
+ /*
+ * 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);
- /* Check the the hardware actually has the port in question */
if (b != 0xff) {
if ((b & 0x1) != 0)
outb(0x92, b & 0xfe);
@@ -641,14 +654,17 @@
}
#endif /* PC98 */
- printf("No known reset method did work, attempting CPU shutdown\n");
+ 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)PTD, NBPTD);
+ /* 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/soc2007/lulf/gvinum_fixup/sys/kern/kern_descrip.c#2 (text+ko) ====
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_descrip.c,v 1.307 2007/04/04 09:11:32 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_descrip.c,v 1.308 2007/04/26 18:01:19 jhb Exp $");
#include "opt_compat.h"
#include "opt_ddb.h"
@@ -1813,11 +1813,9 @@
int
fdcheckstd(struct thread *td)
{
- struct nameidata nd;
struct filedesc *fdp;
- struct file *fp;
- register_t retval;
- int fd, i, error, flags, devnull;
+ register_t retval, save;
+ int i, error, devnull;
fdp = td->td_proc->p_fd;
if (fdp == NULL)
@@ -1829,48 +1827,14 @@
if (fdp->fd_ofiles[i] != NULL)
continue;
if (devnull < 0) {
- int vfslocked;
- error = falloc(td, &fp, &fd);
- if (error != 0)
- break;
- /* Note extra ref on `fp' held for us by falloc(). */
- KASSERT(fd == i, ("oof, we didn't get our fd"));
- NDINIT(&nd, LOOKUP, FOLLOW | MPSAFE, UIO_SYSSPACE,
- "/dev/null", td);
- flags = FREAD | FWRITE;
- error = vn_open(&nd, &flags, 0, fd);
- if (error != 0) {
- /*
- * Someone may have closed the entry in the
- * file descriptor table, so check it hasn't
- * changed before dropping the reference
- * count.
- */
- FILEDESC_XLOCK(fdp);
- KASSERT(fdp->fd_ofiles[fd] == fp,
- ("table not shared, how did it change?"));
- fdp->fd_ofiles[fd] = NULL;
- fdunused(fdp, fd);
- FILEDESC_XUNLOCK(fdp);
- fdrop(fp, td);
- fdrop(fp, td);
+ save = td->td_retval[0];
+ error = kern_open(td, "/dev/null", UIO_SYSSPACE,
+ O_RDWR, 0);
+ devnull = td->td_retval[0];
+ KASSERT(devnull == i, ("oof, we didn't get our fd"));
+ td->td_retval[0] = save;
+ if (error)
break;
- }
- vfslocked = NDHASGIANT(&nd);
- NDFREE(&nd, NDF_ONLY_PNBUF);
- FILE_LOCK(fp);
- fp->f_flag = flags;
- fp->f_vnode = nd.ni_vp;
- if (fp->f_data == NULL)
- fp->f_data = nd.ni_vp;
- fp->f_type = DTYPE_VNODE;
- if (fp->f_ops == &badfileops)
- fp->f_ops = &vnops;
- FILE_UNLOCK(fp);
- VOP_UNLOCK(nd.ni_vp, 0, td);
- VFS_UNLOCK_GIANT(vfslocked);
- devnull = fd;
- fdrop(fp, td);
} else {
error = do_dup(td, DUP_FIXED, devnull, i, &retval);
if (error != 0)
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_linker.c#2 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_linker.c,v 1.147 2007/03/04 22:36:46 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_linker.c,v 1.148 2007/04/22 15:31:21 rwatson Exp $");
#include "opt_ddb.h"
#include "opt_hwpmc_hooks.h"
@@ -562,11 +562,6 @@
/* Refuse to unload modules if securelevel raised. */
if (securelevel > 0)
return (EPERM);
-#ifdef MAC
- error = mac_check_kld_unload(curthread->td_ucred);
- if (error)
- return (error);
-#endif
KLD_LOCK_ASSERT();
KLD_DPF(FILE, ("linker_file_unload: lf->refs=%d\n", file->refs));
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_time.c#2 (text+ko) ====
@@ -30,9 +30,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_time.c,v 1.139 2007/03/05 13:10:57 rwatson Exp $");
-
-#include "opt_mac.h"
+__FBSDID("$FreeBSD: src/sys/kern/kern_time.c,v 1.140 2007/04/22 15:31:21 rwatson Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -56,8 +54,6 @@
#include <sys/timetc.h>
#include <sys/vnode.h>
-#include <security/mac/mac_framework.h>
-
#include <vm/vm.h>
#include <vm/vm_extern.h>
@@ -272,11 +268,6 @@
struct timeval atv;
int error;
-#ifdef MAC
- error = mac_check_system_settime(td->td_ucred);
- if (error)
- return (error);
-#endif
if ((error = priv_check(td, PRIV_CLOCK_SETTIME)) != 0)
return (error);
if (clock_id != CLOCK_REALTIME)
@@ -479,11 +470,6 @@
{
int error;
-#ifdef MAC
- error = mac_check_system_settime(td->td_ucred);
- if (error)
- return (error);
-#endif
error = priv_check(td, PRIV_SETTIMEOFDAY);
if (error)
return (error);
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_uuid.c#2 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/kern_uuid.c,v 1.12 2007/03/05 13:10:57 rwatson Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/kern_uuid.c,v 1.13 2007/04/23 12:53:00 pjd Exp $");
#include <sys/param.h>
#include <sys/endian.h>
@@ -116,7 +116,7 @@
/*
* Get the current time as a 60 bit count of 100-nanosecond intervals
* since 00:00:00.00, October 15,1582. We apply a magic offset to convert
- * the Unix time since 00:00:00.00, Januari 1, 1970 to the date of the
+ * the Unix time since 00:00:00.00, January 1, 1970 to the date of the
* Gregorian reform to the Christian calendar.
*/
static uint64_t
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/subr_rman.c#3 (text+ko) ====
@@ -58,7 +58,7 @@
#include "opt_ddb.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/subr_rman.c,v 1.56 2007/04/16 21:09:03 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/subr_rman.c,v 1.57 2007/04/28 07:37:49 jmg Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -155,10 +155,6 @@
return 0;
}
-/*
- * NB: this interface is not robust against programming errors which
- * add multiple copies of the same region.
- */
int
rman_manage_region(struct rman *rm, u_long start, u_long end)
{
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/vfs_bio.c#2 (text+ko) ====
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/vfs_bio.c,v 1.520 2007/03/29 13:26:13 wkoszek Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/vfs_bio.c,v 1.521 2007/04/24 10:59:21 kib Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -961,9 +961,11 @@
*/
vp = bp->b_vp;
bo = bp->b_bufobj;
- if ((td->td_pflags & TDP_COWINPROGRESS) == 0)
+ if ((td->td_pflags & (TDP_COWINPROGRESS|TDP_INBDFLUSH)) == 0) {
+ td->td_pflags |= TDP_INBDFLUSH;
BO_BDFLUSH(bo, bp);
- else
+ td->td_pflags &= ~TDP_INBDFLUSH;
+ } else
recursiveflushes++;
bdirty(bp);
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/vfs_mount.c#3 (text+ko) ====
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/vfs_mount.c,v 1.258 2007/04/17 21:14:06 pjd Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/vfs_mount.c,v 1.259 2007/04/26 08:56:56 kib Exp $");
#include <sys/param.h>
#include <sys/conf.h>
@@ -1168,14 +1168,12 @@
mnt_gen_r = mp->mnt_gen;
VI_LOCK(coveredvp);
vholdl(coveredvp);
- error = vn_lock(coveredvp, LK_EXCLUSIVE | LK_INTERLOCK, td);
+ vn_lock(coveredvp, LK_EXCLUSIVE | LK_INTERLOCK | LK_RETRY, td);
vdrop(coveredvp);
/*
* Check for mp being unmounted while waiting for the
* covered vnode lock.
*/
- if (error)
- return (error);
if (coveredvp->v_mountedhere != mp ||
coveredvp->v_mountedhere->mnt_gen != mnt_gen_r) {
VOP_UNLOCK(coveredvp, 0, td);
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/ioctl_compat.h#2 (text+ko) ====
@@ -32,7 +32,7 @@
* SUCH DAMAGE.
*
* @(#)ioctl_compat.h 8.4 (Berkeley) 1/21/94
- * $FreeBSD: src/sys/sys/ioctl_compat.h,v 1.9 2006/01/10 09:19:10 phk Exp $
+ * $FreeBSD: src/sys/sys/ioctl_compat.h,v 1.10 2007/04/27 11:19:05 benjsc Exp $
*/
#ifndef _SYS_IOCTL_COMPAT_H_
@@ -42,7 +42,7 @@
#include <sys/ttydev.h>
#ifdef USE_OLD_TTY
-#warning "Old BSD tty API used, please upgrade"
+#warning "Old BSD tty API used and depends on COMPAT_43TTY. Use termios.h instead"
#endif
struct tchars {
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/mount.h#3 (text+ko) ====
@@ -27,7 +27,7 @@
* SUCH DAMAGE.
*
* @(#)mount.h 8.21 (Berkeley) 5/20/95
- * $FreeBSD: src/sys/sys/mount.h,v 1.225 2007/04/17 21:14:05 pjd Exp $
+ * $FreeBSD: src/sys/sys/mount.h,v 1.226 2007/04/22 16:18:10 rwatson Exp $
*/
#ifndef _SYS_MOUNT_H_
@@ -168,8 +168,7 @@
time_t mnt_time; /* last time written*/
int mnt_iosize_max; /* max size for clusters, etc */
struct netexport *mnt_export; /* export list */
- struct label *mnt_mntlabel; /* MAC label for the mount */
- struct label *mnt_fslabel; /* MAC label for the fs */
+ struct label *mnt_label; /* MAC label for the fs */
u_int mnt_hashseed; /* Random seed for vfs_hash */
int mnt_markercnt; /* marker vnodes in use */
int mnt_holdcnt; /* hold count */
==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/priv.h#3 (text+ko) ====
@@ -26,7 +26,7 @@
* 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/sys/priv.h,v 1.11 2007/04/17 00:35:10 thompsa Exp $
+ * $FreeBSD: src/sys/sys/priv.h,v 1.12 2007/04/21 18:11:19 rwatson Exp $
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list