From owner-p4-projects@FreeBSD.ORG Mon Apr 30 21:30:10 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 47E3A16A402; Mon, 30 Apr 2007 21:30:10 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D92F516A404 for ; Mon, 30 Apr 2007 21:30:09 +0000 (UTC) (envelope-from lulf@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id C896713C458 for ; Mon, 30 Apr 2007 21:30:09 +0000 (UTC) (envelope-from lulf@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l3ULU9gr013166 for ; Mon, 30 Apr 2007 21:30:09 GMT (envelope-from lulf@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l3ULU9PR013161 for perforce@freebsd.org; Mon, 30 Apr 2007 21:30:09 GMT (envelope-from lulf@FreeBSD.org) Date: Mon, 30 Apr 2007 21:30:09 GMT Message-Id: <200704302130.l3ULU9PR013161@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to lulf@FreeBSD.org using -f From: Ulf Lilleengen To: Perforce Change Reviews Cc: Subject: PERFORCE change 119026 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Apr 2007 21:30:10 -0000 http://perforce.freebsd.org/chv.cgi?CH=119026 Change 119026 by lulf@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 -__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 #include @@ -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%s\n", indent, + table->gpt_scheme->name); sbuf_printf(sb, "%s%u\n", indent, table->gpt_entries); sbuf_printf(sb, "%s%ju\n", indent, ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/uzip/g_uzip.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__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 #include @@ -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 -__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 -__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 -__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 #include -#include #include /* 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 -__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 .... " */ - invltlb(); + breakpoint(); + /* NOTREACHED */ while(1); } ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_descrip.c#2 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include -__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 -__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 -__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 #include @@ -56,8 +54,6 @@ #include #include -#include - #include #include @@ -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 -__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 #include @@ -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 -__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 #include @@ -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 -__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 #include @@ -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 -__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 #include @@ -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 #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) <<<