Date: Sun, 8 Sep 2013 15:02:50 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 629239 for review Message-ID: <201309081502.r88F2ouY031313@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@629239?ac=10 Change 629239 by jhb@jhb_pippin on 2013/09/08 15:02:16 IFC @626698 Affected files ... .. //depot/projects/smpng/sys/amd64/amd64/mp_machdep.c#90 integrate .. //depot/projects/smpng/sys/amd64/amd64/pmap.c#131 integrate .. //depot/projects/smpng/sys/amd64/include/cpu.h#14 integrate .. //depot/projects/smpng/sys/amd64/include/cpufunc.h#32 integrate .. //depot/projects/smpng/sys/amd64/include/pcpu.h#22 integrate .. //depot/projects/smpng/sys/amd64/vmm/intel/vmx.c#5 integrate .. //depot/projects/smpng/sys/amd64/vmm/io/ppt.c#4 integrate .. //depot/projects/smpng/sys/arm/broadcom/bcm2835/bcm2835_gpio.c#3 integrate .. //depot/projects/smpng/sys/arm/broadcom/bcm2835/bcm2835_gpio.h#1 branch .. //depot/projects/smpng/sys/arm/include/ieee.h#6 integrate .. //depot/projects/smpng/sys/arm/include/sf_buf.h#5 integrate .. //depot/projects/smpng/sys/cddl/dev/dtrace/dtrace_clone.c#4 integrate .. //depot/projects/smpng/sys/conf/files#289 integrate .. //depot/projects/smpng/sys/conf/files.mips#25 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/QNX_OCL.txt#3 delete .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/fil.c#28 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_auth.c#23 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_auth.h#9 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_compat.h#22 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_dns_pxy.c#1 branch .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_dstlist.c#1 branch .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_dstlist.h#1 branch .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_fil.h#18 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c#17 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_frag.c#16 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_frag.h#10 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_ftp_pxy.c#14 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_htable.c#6 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_htable.h#4 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_ipsec_pxy.c#5 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_irc_pxy.c#4 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_log.c#17 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_lookup.c#4 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_lookup.h#4 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_nat.c#21 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_nat.h#14 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_nat6.c#1 branch .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_netbios_pxy.c#4 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_pool.c#4 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_pool.h#4 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_pptp_pxy.c#5 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_proxy.c#17 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_proxy.h#10 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_raudio_pxy.c#9 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_rcmd_pxy.c#10 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_rpcb_pxy.c#4 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_rules.c#3 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_scan.c#5 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_scan.h#4 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_state.c#19 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_state.h#12 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_sync.c#7 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_sync.h#5 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ip_tftp_pxy.c#1 branch .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ipf_rb.h#1 branch .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/ipl.h#14 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/mlfk_ipl.c#16 integrate .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/radix_ipf.c#1 branch .. //depot/projects/smpng/sys/contrib/ipfilter/netinet/radix_ipf.h#1 branch .. //depot/projects/smpng/sys/dev/firewire/fwdev.c#32 integrate .. //depot/projects/smpng/sys/dev/glxsb/glxsb.c#5 integrate .. //depot/projects/smpng/sys/dev/hifn/hifn7751.c#33 integrate .. //depot/projects/smpng/sys/dev/random/harvest.c#14 integrate .. //depot/projects/smpng/sys/dev/random/hash.c#10 integrate .. //depot/projects/smpng/sys/dev/random/hash.h#6 integrate .. //depot/projects/smpng/sys/dev/random/probe.c#9 delete .. //depot/projects/smpng/sys/dev/random/pseudo_rng.c#1 branch .. //depot/projects/smpng/sys/dev/random/random_adaptors.c#2 integrate .. //depot/projects/smpng/sys/dev/random/random_adaptors.h#2 integrate .. //depot/projects/smpng/sys/dev/random/random_harvestq.c#1 branch .. //depot/projects/smpng/sys/dev/random/random_harvestq.h#1 branch .. //depot/projects/smpng/sys/dev/random/randomdev.c#35 integrate .. //depot/projects/smpng/sys/dev/random/randomdev.h#9 integrate .. //depot/projects/smpng/sys/dev/random/randomdev_soft.c#21 integrate .. //depot/projects/smpng/sys/dev/random/randomdev_soft.h#5 integrate .. //depot/projects/smpng/sys/dev/random/yarrow.c#17 integrate .. //depot/projects/smpng/sys/dev/random/yarrow.h#5 integrate .. //depot/projects/smpng/sys/dev/rndtest/rndtest.c#9 integrate .. //depot/projects/smpng/sys/dev/safe/safe.c#20 integrate .. //depot/projects/smpng/sys/dev/ubsec/ubsec.c#33 integrate .. //depot/projects/smpng/sys/dev/usb/controller/xhci.c#13 integrate .. //depot/projects/smpng/sys/dev/vkbd/vkbd.c#17 integrate .. //depot/projects/smpng/sys/fs/ext2fs/ext2_htree.c#2 integrate .. //depot/projects/smpng/sys/fs/ext2fs/ext2_lookup.c#10 integrate .. //depot/projects/smpng/sys/i386/i386/mp_machdep.c#150 integrate .. //depot/projects/smpng/sys/i386/include/cpu.h#21 integrate .. //depot/projects/smpng/sys/i386/include/pcpu.h#31 integrate .. //depot/projects/smpng/sys/i386/include/smp.h#38 integrate .. //depot/projects/smpng/sys/i386/xen/mp_machdep.c#30 integrate .. //depot/projects/smpng/sys/kern/capabilities.conf#7 integrate .. //depot/projects/smpng/sys/kern/kern_intr.c#116 integrate .. //depot/projects/smpng/sys/kern/sched_ule.c#126 integrate .. //depot/projects/smpng/sys/kern/subr_capability.c#2 integrate .. //depot/projects/smpng/sys/kern/subr_prf.c#63 integrate .. //depot/projects/smpng/sys/mips/atheros/ar71xx_gpio.c#9 integrate .. //depot/projects/smpng/sys/mips/atheros/ar71xx_gpiovar.h#4 integrate .. //depot/projects/smpng/sys/mips/cavium/octeon_rnd.c#3 integrate .. //depot/projects/smpng/sys/mips/mips/bcopy.S#1 branch .. //depot/projects/smpng/sys/mips/mips/support.S#11 integrate .. //depot/projects/smpng/sys/mips/nlm/board.c#6 integrate .. //depot/projects/smpng/sys/mips/nlm/board.h#5 integrate .. //depot/projects/smpng/sys/mips/nlm/board_cpld.c#3 integrate .. //depot/projects/smpng/sys/mips/nlm/dev/net/nae.c#4 integrate .. //depot/projects/smpng/sys/mips/nlm/dev/net/xaui.c#3 integrate .. //depot/projects/smpng/sys/mips/nlm/dev/net/xlpge.c#4 integrate .. //depot/projects/smpng/sys/mips/nlm/dev/net/xlpge.h#3 integrate .. //depot/projects/smpng/sys/mips/nlm/hal/nae.h#3 integrate .. //depot/projects/smpng/sys/mips/nlm/hal/nlm_hal.c#4 integrate .. //depot/projects/smpng/sys/mips/nlm/hal/sys.h#6 integrate .. //depot/projects/smpng/sys/modules/ipfilter/Makefile#14 integrate .. //depot/projects/smpng/sys/modules/random/Makefile#9 integrate .. //depot/projects/smpng/sys/net/if_ethersubr.c#121 integrate .. //depot/projects/smpng/sys/net/if_tap.c#62 integrate .. //depot/projects/smpng/sys/net/if_tun.c#80 integrate .. //depot/projects/smpng/sys/net/netisr.c#29 integrate .. //depot/projects/smpng/sys/netgraph/ng_iface.c#49 integrate .. //depot/projects/smpng/sys/netinet/sctp_indata.c#50 integrate .. //depot/projects/smpng/sys/nlm/nlm_prot_impl.c#18 integrate .. //depot/projects/smpng/sys/powerpc/ofw/ofw_cpu.c#5 integrate .. //depot/projects/smpng/sys/security/audit/audit_pipe.c#21 integrate .. //depot/projects/smpng/sys/sys/random.h#6 integrate .. //depot/projects/smpng/sys/sys/systm.h#113 integrate .. //depot/projects/smpng/sys/x86/xen/hvm.c#2 integrate .. //depot/projects/smpng/sys/x86/xen/xen_intr.c#2 integrate .. //depot/projects/smpng/sys/xen/xen_intr.h#6 integrate Differences ... ==== //depot/projects/smpng/sys/amd64/amd64/mp_machdep.c#90 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/amd64/amd64/mp_machdep.c 255217 2013-09-04 23:31:29Z kib $"); +__FBSDID("$FreeBSD: head/sys/amd64/amd64/mp_machdep.c 255331 2013-09-06 22:17:02Z gibbs $"); #include "opt_cpu.h" #include "opt_ddb.h" @@ -69,6 +69,7 @@ #include <machine/smp.h> #include <machine/specialreg.h> #include <machine/tss.h> +#include <machine/cpu.h> #ifdef XENHVM #include <xen/hvm.h> @@ -125,6 +126,11 @@ static u_long *ipi_hardclock_counts[MAXCPU]; #endif +/* Default cpu_ops implementation. */ +struct cpu_ops cpu_ops = { + .ipi_vectored = lapic_ipi_vectored +}; + extern inthand_t IDTVEC(fast_syscall), IDTVEC(fast_syscall32); extern int pmap_pcid_enabled; @@ -1125,7 +1131,7 @@ if (old_pending) return; } - lapic_ipi_vectored(ipi, cpu_apic_ids[cpu]); + cpu_ops.ipi_vectored(ipi, cpu_apic_ids[cpu]); } /* @@ -1395,7 +1401,7 @@ CPU_OR_ATOMIC(&ipi_nmi_pending, &other_cpus); CTR2(KTR_SMP, "%s: ipi: %x", __func__, ipi); - lapic_ipi_vectored(ipi, APIC_IPI_DEST_OTHERS); + cpu_ops.ipi_vectored(ipi, APIC_IPI_DEST_OTHERS); } int ==== //depot/projects/smpng/sys/amd64/amd64/pmap.c#131 (text+ko) ==== @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/amd64/amd64/pmap.c 255312 2013-09-06 16:53:48Z kib $"); +__FBSDID("$FreeBSD: head/sys/amd64/amd64/pmap.c 255331 2013-09-06 22:17:02Z gibbs $"); /* * Manages physical address maps. @@ -254,30 +254,6 @@ 0, "Is TLB Context ID enabled ?"); int invpcid_works = 0; -/* - * Perform the guaranteed invalidation of all TLB entries. This - * includes the global entries, and entries in all PCIDs, not only the - * current context. The function works both on non-PCID CPUs and CPUs - * with the PCID turned off or on. See IA-32 SDM Vol. 3a 4.10.4.1 - * Operations that Invalidate TLBs and Paging-Structure Caches. - */ -static __inline void -invltlb_globpcid(void) -{ - uint64_t cr4; - - cr4 = rcr4(); - load_cr4(cr4 & ~CR4_PGE); - /* - * Although preemption at this point could be detrimental to - * performance, it would not lead to an error. PG_G is simply - * ignored if CR4.PGE is clear. Moreover, in case this block - * is re-entered, the load_cr4() either above or below will - * modify CR4.PGE flushing the TLB. - */ - load_cr4(cr4 | CR4_PGE); -} - static int pmap_pcid_save_cnt_proc(SYSCTL_HANDLER_ARGS) { ==== //depot/projects/smpng/sys/amd64/include/cpu.h#14 (text+ko) ==== @@ -30,7 +30,7 @@ * SUCH DAMAGE. * * from: @(#)cpu.h 5.4 (Berkeley) 5/9/91 - * $FreeBSD: head/sys/amd64/include/cpu.h 253750 2013-07-28 18:44:17Z avg $ + * $FreeBSD: head/sys/amd64/include/cpu.h 255331 2013-09-06 22:17:02Z gibbs $ */ #ifndef _MACHINE_CPU_H_ @@ -54,6 +54,17 @@ #define TRAPF_PC(framep) ((framep)->tf_rip) #ifdef _KERNEL +/* + * Struct containing pointers to CPU management functions whose + * implementation is run time selectable. Selection can be made, + * for example, based on detection of a particular CPU variant or + * hypervisor environment. + */ +struct cpu_ops { + void (*ipi_vectored)(u_int, int); +}; + +extern struct cpu_ops cpu_ops; extern char btext[]; extern char etext[]; ==== //depot/projects/smpng/sys/amd64/include/cpufunc.h#32 (text+ko) ==== @@ -27,7 +27,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: head/sys/amd64/include/cpufunc.h 255058 2013-08-30 07:42:38Z kib $ + * $FreeBSD: head/sys/amd64/include/cpufunc.h 255331 2013-09-06 22:17:02Z gibbs $ */ /* @@ -463,6 +463,34 @@ load_cr3(rcr3()); } +#ifndef CR4_PGE +#define CR4_PGE 0x00000080 /* Page global enable */ +#endif + +/* + * Perform the guaranteed invalidation of all TLB entries. This + * includes the global entries, and entries in all PCIDs, not only the + * current context. The function works both on non-PCID CPUs and CPUs + * with the PCID turned off or on. See IA-32 SDM Vol. 3a 4.10.4.1 + * Operations that Invalidate TLBs and Paging-Structure Caches. + */ +static __inline void +invltlb_globpcid(void) +{ + uint64_t cr4; + + cr4 = rcr4(); + load_cr4(cr4 & ~CR4_PGE); + /* + * Although preemption at this point could be detrimental to + * performance, it would not lead to an error. PG_G is simply + * ignored if CR4.PGE is clear. Moreover, in case this block + * is re-entered, the load_cr4() either above or below will + * modify CR4.PGE flushing the TLB. + */ + load_cr4(cr4 | CR4_PGE); +} + /* * TLB flush for an individual page (even if it has PG_G). * Only works on 486+ CPUs (i386 does not have PG_G). ==== //depot/projects/smpng/sys/amd64/include/pcpu.h#22 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: head/sys/amd64/include/pcpu.h 255217 2013-09-04 23:31:29Z kib $ + * $FreeBSD: head/sys/amd64/include/pcpu.h 255331 2013-09-06 22:17:02Z gibbs $ */ #ifndef _MACHINE_PCPU_H_ @@ -33,15 +33,6 @@ #error "sys/cdefs.h is a prerequisite for this file" #endif -#if defined(XEN) || defined(XENHVM) -#ifndef NR_VIRQS -#define NR_VIRQS 24 -#endif -#ifndef NR_IPIS -#define NR_IPIS 2 -#endif -#endif - /* * The SMP parts are setup in pmap.c and locore.s for the BSP, and * mp_machdep.c sets up the data for the AP's to "see" when they awake. ==== //depot/projects/smpng/sys/amd64/vmm/intel/vmx.c#5 (text+ko) ==== @@ -23,11 +23,11 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: head/sys/amd64/vmm/intel/vmx.c 253909 2013-08-03 03:16:42Z grehan $ + * $FreeBSD: head/sys/amd64/vmm/intel/vmx.c 255343 2013-09-07 05:30:34Z neel $ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/amd64/vmm/intel/vmx.c 253909 2013-08-03 03:16:42Z grehan $"); +__FBSDID("$FreeBSD: head/sys/amd64/vmm/intel/vmx.c 255343 2013-09-07 05:30:34Z neel $"); #include <sys/param.h> #include <sys/systm.h> @@ -138,8 +138,6 @@ SYSCTL_ULONG(_hw_vmm_vmx, OID_AUTO, cr4_zeros_mask, CTLFLAG_RD, &cr4_zeros_mask, 0, NULL); -static volatile u_int nextvpid; - static int vmx_no_patmsr; static int vmx_initialized; @@ -172,6 +170,11 @@ /* statistics */ static VMM_STAT_INTEL(VMEXIT_HLT_IGNORED, "number of times hlt was ignored"); +static struct unrhdr *vpid_unr; +static u_int vpid_alloc_failed; +SYSCTL_UINT(_hw_vmm_vmx, OID_AUTO, vpid_alloc_failed, CTLFLAG_RD, + &vpid_alloc_failed, 0, NULL); + #ifdef KTR static const char * exit_reason_to_str(int reason) @@ -382,6 +385,88 @@ } static void +vpid_free(int vpid) +{ + if (vpid < 0 || vpid > 0xffff) + panic("vpid_free: invalid vpid %d", vpid); + + /* + * VPIDs [0,VM_MAXCPU] are special and are not allocated from + * the unit number allocator. + */ + + if (vpid > VM_MAXCPU) + free_unr(vpid_unr, vpid); +} + +static void +vpid_alloc(uint16_t *vpid, int num) +{ + int i, x; + + if (num <= 0 || num > VM_MAXCPU) + panic("invalid number of vpids requested: %d", num); + + /* + * If the "enable vpid" execution control is not enabled then the + * VPID is required to be 0 for all vcpus. + */ + if ((procbased_ctls2 & PROCBASED2_ENABLE_VPID) == 0) { + for (i = 0; i < num; i++) + vpid[i] = 0; + return; + } + + /* + * Allocate a unique VPID for each vcpu from the unit number allocator. + */ + for (i = 0; i < num; i++) { + x = alloc_unr(vpid_unr); + if (x == -1) + break; + else + vpid[i] = x; + } + + if (i < num) { + atomic_add_int(&vpid_alloc_failed, 1); + + /* + * If the unit number allocator does not have enough unique + * VPIDs then we need to allocate from the [1,VM_MAXCPU] range. + * + * These VPIDs are not be unique across VMs but this does not + * affect correctness because the combined mappings are also + * tagged with the EP4TA which is unique for each VM. + * + * It is still sub-optimal because the invvpid will invalidate + * combined mappings for a particular VPID across all EP4TAs. + */ + while (i-- > 0) + vpid_free(vpid[i]); + + for (i = 0; i < num; i++) + vpid[i] = i + 1; + } +} + +static void +vpid_init(void) +{ + /* + * VPID 0 is required when the "enable VPID" execution control is + * disabled. + * + * VPIDs [1,VM_MAXCPU] are used as the "overflow namespace" when the + * unit number allocator does not have sufficient unique VPIDs to + * satisfy the allocation. + * + * The remaining VPIDs are managed by the unit number allocator. + */ + vpid_unr = new_unrhdr(VM_MAXCPU + 1, 0xffff, NULL); +} + +static void msr_save_area_init(struct msr_entry *g_area, int *g_count) { int cnt; @@ -422,6 +507,11 @@ vmx_cleanup(void) { + if (vpid_unr != NULL) { + delete_unrhdr(vpid_unr); + vpid_unr = NULL; + } + smp_rendezvous(NULL, vmx_disable, NULL, NULL); return (0); @@ -607,6 +697,8 @@ cr4_ones_mask = fixed0 & fixed1; cr4_zeros_mask = ~fixed0 & ~fixed1; + vpid_init(); + /* enable VMX operation */ smp_rendezvous(NULL, vmx_enable, NULL, NULL); @@ -615,37 +707,6 @@ return (0); } -/* - * If this processor does not support VPIDs then simply return 0. - * - * Otherwise generate the next value of VPID to use. Any value is alright - * as long as it is non-zero. - * - * We always execute in VMX non-root context with EPT enabled. Thus all - * combined mappings are tagged with the (EP4TA, VPID, PCID) tuple. This - * in turn means that multiple VMs can share the same VPID as long as - * they have distinct EPT page tables. - * - * XXX - * We should optimize this so that it returns VPIDs that are not in - * use. Then we will not unnecessarily invalidate mappings in - * vmx_set_pcpu_defaults() just because two or more vcpus happen to - * use the same 'vpid'. - */ -static uint16_t -vmx_vpid(void) -{ - uint16_t vpid = 0; - - if ((procbased_ctls2 & PROCBASED2_ENABLE_VPID) != 0) { - do { - vpid = atomic_fetchadd_int(&nextvpid, 1); - } while (vpid == 0); - } - - return (vpid); -} - static int vmx_setup_cr_shadow(int which, struct vmcs *vmcs, uint32_t initial) { @@ -681,7 +742,7 @@ static void * vmx_vminit(struct vm *vm) { - uint16_t vpid; + uint16_t vpid[VM_MAXCPU]; int i, error, guest_msr_count; struct vmx *vmx; @@ -744,6 +805,8 @@ if (!vmx_no_patmsr && guest_msr_rw(vmx, MSR_PAT)) panic("vmx_vminit: error setting guest pat msr access"); + vpid_alloc(vpid, VM_MAXCPU); + for (i = 0; i < VM_MAXCPU; i++) { vmx->vmcs[i].identifier = vmx_revision(); error = vmclear(&vmx->vmcs[i]); @@ -752,8 +815,6 @@ error, i); } - vpid = vmx_vpid(); - error = vmcs_set_defaults(&vmx->vmcs[i], (u_long)vmx_longjmp, (u_long)&vmx->ctx[i], @@ -763,7 +824,7 @@ procbased_ctls2, exit_ctls, entry_ctls, vtophys(vmx->msr_bitmap), - vpid); + vpid[i]); if (error != 0) panic("vmx_vminit: vmcs_set_defaults error %d", error); @@ -772,7 +833,7 @@ vmx->cap[i].proc_ctls = procbased_ctls; vmx->state[i].lastcpu = -1; - vmx->state[i].vpid = vpid; + vmx->state[i].vpid = vpid[i]; msr_save_area_init(vmx->guest_msrs[i], &guest_msr_count); @@ -1580,9 +1641,12 @@ static void vmx_vmcleanup(void *arg) { - int error; + int i, error; struct vmx *vmx = arg; + for (i = 0; i < VM_MAXCPU; i++) + vpid_free(vmx->state[i].vpid); + /* * XXXSMP we also need to clear the VMCS active on the other vcpus. */ ==== //depot/projects/smpng/sys/amd64/vmm/io/ppt.c#4 (text+ko) ==== @@ -23,11 +23,11 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: head/sys/amd64/vmm/io/ppt.c 246686 2013-02-11 20:36:07Z neel $ + * $FreeBSD: head/sys/amd64/vmm/io/ppt.c 255342 2013-09-07 03:33:36Z grehan $ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/amd64/vmm/io/ppt.c 246686 2013-02-11 20:36:07Z neel $"); +__FBSDID("$FreeBSD: head/sys/amd64/vmm/io/ppt.c 255342 2013-09-07 03:33:36Z grehan $"); #include <sys/param.h> #include <sys/systm.h> @@ -568,7 +568,7 @@ return (ENXIO); ppt->msix.arg[idx].pptdev = ppt; - ppt->msix.arg[idx].vec = msg; + ppt->msix.arg[idx].vec = msg & 0xFF; ppt->msix.arg[idx].vcpu = (addr >> 12) & 0xFF; /* Setup the MSI-X interrupt */ ==== //depot/projects/smpng/sys/arm/broadcom/bcm2835/bcm2835_gpio.c#3 (text+ko) ==== @@ -26,7 +26,7 @@ * */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c 249449 2013-04-13 21:21:13Z dim $"); +__FBSDID("$FreeBSD: head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c 255370 2013-09-07 18:48:15Z loos $"); #include <sys/param.h> #include <sys/systm.h> @@ -52,6 +52,8 @@ #include <dev/ofw/ofw_bus.h> #include <dev/ofw/ofw_bus_subr.h> +#include <arm/broadcom/bcm2835/bcm2835_gpio.h> + #include "gpio_if.h" #undef DEBUG @@ -87,17 +89,6 @@ struct bcm_gpio_sysctl sc_sysctl[BCM_GPIO_PINS]; }; -enum bcm_gpio_fsel { - BCM_GPIO_INPUT, - BCM_GPIO_OUTPUT, - BCM_GPIO_ALT5, - BCM_GPIO_ALT4, - BCM_GPIO_ALT0, - BCM_GPIO_ALT1, - BCM_GPIO_ALT2, - BCM_GPIO_ALT3, -}; - enum bcm_gpio_pud { BCM_GPIO_NONE, BCM_GPIO_PULLDOWN, @@ -257,6 +248,32 @@ BCM_GPIO_WRITE(sc, BCM_GPIO_GPPUDCLK(bank), 0); } +void +bcm_gpio_set_alternate(device_t dev, uint32_t pin, uint32_t nfunc) +{ + struct bcm_gpio_softc *sc; + int i; + + sc = device_get_softc(dev); + BCM_GPIO_LOCK(sc); + + /* Disable pull-up or pull-down on pin. */ + bcm_gpio_set_pud(sc, pin, BCM_GPIO_NONE); + + /* And now set the pin function. */ + bcm_gpio_set_function(sc, pin, nfunc); + + /* Update the pin flags. */ + for (i = 0; i < sc->sc_gpio_npins; i++) { + if (sc->sc_gpio_pins[i].gp_pin == pin) + break; + } + if (i < sc->sc_gpio_npins) + sc->sc_gpio_pins[i].gp_flags = bcm_gpio_func_flag(nfunc); + + BCM_GPIO_UNLOCK(sc); +} + static void bcm_gpio_pin_configure(struct bcm_gpio_softc *sc, struct gpio_pin *pin, unsigned int flags) @@ -535,7 +552,7 @@ struct bcm_gpio_softc *sc; struct bcm_gpio_sysctl *sc_sysctl; uint32_t nfunc; - int i, error; + int error; sc_sysctl = arg1; sc = sc_sysctl->sc; @@ -552,24 +569,9 @@ if (bcm_gpio_str_func(buf, &nfunc) != 0) return (EINVAL); - BCM_GPIO_LOCK(sc); - - /* Disable pull-up or pull-down on pin. */ - bcm_gpio_set_pud(sc, sc_sysctl->pin, BCM_GPIO_NONE); - - /* And now set the pin function. */ - bcm_gpio_set_function(sc, sc_sysctl->pin, nfunc); - - /* Update the pin flags. */ - for (i = 0; i < sc->sc_gpio_npins; i++) { - if (sc->sc_gpio_pins[i].gp_pin == sc_sysctl->pin) - break; - } - if (i < sc->sc_gpio_npins) - sc->sc_gpio_pins[i].gp_flags = bcm_gpio_func_flag(nfunc); + /* Update the pin alternate function. */ + bcm_gpio_set_alternate(sc->sc_dev, sc_sysctl->pin, nfunc); - BCM_GPIO_UNLOCK(sc); - return (0); } @@ -729,7 +731,7 @@ goto fail; /* Initialize the software controlled pins. */ - for (i = 0, j = 0; j < BCM_GPIO_PINS - 1; j++) { + for (i = 0, j = 0; j < BCM_GPIO_PINS; j++) { if (bcm_gpio_pin_is_ro(sc, j)) continue; snprintf(sc->sc_gpio_pins[i].gp_name, GPIOMAXNAME, ==== //depot/projects/smpng/sys/arm/include/ieee.h#6 (text+ko) ==== @@ -39,7 +39,7 @@ * * @(#)ieee.h 8.1 (Berkeley) 6/11/93 * - * $FreeBSD: head/sys/arm/include/ieee.h 236992 2012-06-13 05:02:51Z imp $ + * $FreeBSD: head/sys/arm/include/ieee.h 255361 2013-09-07 14:04:10Z andrew $ * */ @@ -91,7 +91,7 @@ #define DBL_EXPBITS 11 #define DBL_FRACBITS 52 -#if defined(__VFP_FP__) +#if defined(__VFP_FP__) || defined(__ARM_EABI__) #define _IEEE_WORD_ORDER _BYTE_ORDER #else #define _IEEE_WORD_ORDER _BIG_ENDIAN ==== //depot/projects/smpng/sys/arm/include/sf_buf.h#5 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: head/sys/arm/include/sf_buf.h 255318 2013-09-06 17:44:13Z glebius $ + * $FreeBSD: head/sys/arm/include/sf_buf.h 255352 2013-09-07 07:56:55Z glebius $ */ #ifndef _MACHINE_SF_BUF_H_ @@ -40,9 +40,6 @@ struct sf_buf; -struct sf_buf * sf_buf_alloc(struct vm_page *m, int flags); -void sf_buf_free(struct sf_buf *sf); - static __inline vm_offset_t sf_buf_kva(struct sf_buf *sf) { @@ -82,4 +79,8 @@ } #endif + +struct sf_buf * sf_buf_alloc(struct vm_page *m, int flags); +void sf_buf_free(struct sf_buf *sf); + #endif /* !_MACHINE_SF_BUF_H_ */ ==== //depot/projects/smpng/sys/cddl/dev/dtrace/dtrace_clone.c#4 (text+ko) ==== @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * - * $FreeBSD: head/sys/cddl/dev/dtrace/dtrace_clone.c 183381 2008-09-26 14:19:52Z ed $ + * $FreeBSD: head/sys/cddl/dev/dtrace/dtrace_clone.c 255359 2013-09-07 13:45:44Z davide $ * */ @@ -52,10 +52,6 @@ /* Clone the device to the new minor number. */ if (clone_create(&dtrace_clones, &dtrace_cdevsw, &u, dev, 0) != 0) /* Create the /dev/dtrace/dtraceNN entry. */ - *dev = make_dev_cred(&dtrace_cdevsw, u, cred, + *dev = make_dev_credf(MAKEDEV_REF, &dtrace_cdevsw, u, cred, UID_ROOT, GID_WHEEL, 0600, "dtrace/dtrace%d", u); - if (*dev != NULL) { - dev_ref(*dev); - (*dev)->si_flags |= SI_CHEAPCLONE; - } } ==== //depot/projects/smpng/sys/conf/files#289 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: head/sys/conf/files 255219 2013-09-05 00:09:56Z pjd $ +# $FreeBSD: head/sys/conf/files 255362 2013-09-07 14:15:13Z markm $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -483,6 +483,16 @@ compile-with "${NORMAL_C} -I$S/contrib/ipfilter" contrib/ipfilter/netinet/mlfk_ipl.c optional ipfilter inet \ compile-with "${NORMAL_C} -I$S/contrib/ipfilter" +contrib/ipfilter/netinet/ip_nat6.c optional ipfilter inet \ + compile-with "${NORMAL_C} -I$S/contrib/ipfilter" +contrib/ipfilter/netinet/ip_rules.c optional ipfilter inet \ + compile-with "${NORMAL_C} -I$S/contrib/ipfilter" +contrib/ipfilter/netinet/ip_scan.c optional ipfilter inet \ + compile-with "${NORMAL_C} -I$S/contrib/ipfilter" +contrib/ipfilter/netinet/ip_dstlist.c optional ipfilter inet \ + compile-with "${NORMAL_C} -I$S/contrib/ipfilter" +contrib/ipfilter/netinet/radix_ipf.c optional ipfilter inet \ + compile-with "${NORMAL_C} -I$S/contrib/ipfilter" contrib/libfdt/fdt.c optional fdt contrib/libfdt/fdt_ro.c optional fdt contrib/libfdt/fdt_rw.c optional fdt @@ -2032,8 +2042,9 @@ clean "rt2860.fw" dev/random/harvest.c standard dev/random/hash.c optional random -dev/random/probe.c optional random +dev/random/pseudo_rng.c standard dev/random/random_adaptors.c standard +dev/random/random_harvestq.c standard dev/random/randomdev.c optional random dev/random/randomdev_soft.c optional random dev/random/yarrow.c optional random ==== //depot/projects/smpng/sys/conf/files.mips#25 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: head/sys/conf/files.mips 255290 2013-09-06 05:38:20Z glebius $ +# $FreeBSD: head/sys/conf/files.mips 255367 2013-09-07 16:31:30Z jchandra $ # # Arch dependent files @@ -38,6 +38,7 @@ mips/mips/stdatomic.c standard \ compile-with "${NORMAL_C:N-Wmissing-prototypes}" mips/mips/support.S standard +mips/mips/bcopy.S standard mips/mips/swtch.S standard mips/mips/sys_machdep.c standard mips/mips/tlb.c standard ==== //depot/projects/smpng/sys/contrib/ipfilter/netinet/fil.c#28 (text+ko) ==== @@ -1,9 +1,14 @@ -/* $FreeBSD: head/sys/contrib/ipfilter/netinet/fil.c 241546 2012-10-14 15:03:06Z glebius $ */ +/* $FreeBSD: head/sys/contrib/ipfilter/netinet/fil.c 255355 2013-09-07 09:47:18Z glebius $ */ /* - * Copyright (C) 1993-2003 by Darren Reed. + * Copyright (C) 2012 by Darren Reed. * * See the IPFILTER.LICENCE file for details on licencing. + * + * Copyright 2008 Sun Microsystems. + * + * $Id$ + * */ #if defined(KERNEL) || defined(_KERNEL) # undef KERNEL @@ -15,15 +20,6 @@ #include <sys/types.h> #include <sys/param.h> #include <sys/time.h> -#if defined(__NetBSD__) -# if (NetBSD >= 199905) && !defined(IPFILTER_LKM) && defined(_KERNEL) -# if (__NetBSD_Version__ < 301000000) -# include "opt_ipfilter_log.h" -# else -# include "opt_ipfilter.h" -# endif -# endif -#endif #if defined(_KERNEL) && defined(__FreeBSD_version) && \ (__FreeBSD_version >= 220000) # if (__FreeBSD_version >= 400000) @@ -82,23 +78,9 @@ #ifdef sun # include <net/af.h> #endif -#if !defined(_KERNEL) && (defined(__FreeBSD__) || defined(SOLARIS2)) -# if (__FreeBSD_version >= 504000) -# undef _RADIX_H_ -# endif -# include "radix_ipf.h" -#endif -#ifdef __osf__ -# include "radix_ipf.h" -#else -# include <net/route.h> -#endif #include <netinet/in.h> #include <netinet/in_systm.h> #include <netinet/ip.h> -#if !defined(linux) -# include <netinet/ip_var.h> -#endif #if defined(__sgi) && defined(IFF_DRVRLOCK) /* IRIX 6 */ # include <sys/hashing.h> # include <netinet/in_var.h> @@ -121,7 +103,6 @@ # include <netinet6/in6_var.h> # endif #endif -#include <netinet/tcpip.h> #include "netinet/ip_fil.h" #include "netinet/ip_nat.h" #include "netinet/ip_frag.h" @@ -131,9 +112,8 @@ #ifdef IPFILTER_SCAN # include "netinet/ip_scan.h" #endif -#ifdef IPFILTER_SYNC -# include "netinet/ip_sync.h" -#endif +#include "netinet/ip_sync.h" +#include "netinet/ip_lookup.h" #include "netinet/ip_pool.h" #include "netinet/ip_htable.h" #ifdef IPFILTER_COMPILED @@ -144,120 +124,103 @@ #endif #if defined(__FreeBSD_version) && (__FreeBSD_version >= 300000) # include <sys/malloc.h> -# if defined(_KERNEL) && !defined(IPFILTER_LKM) -# include "opt_ipfilter.h" -# endif #endif #include "netinet/ipl.h" + +#if defined(__NetBSD__) && (__NetBSD_Version__ >= 104230000) +# include <sys/callout.h> +extern struct callout ipf_slowtimer_ch; +#endif +#if defined(__OpenBSD__) +# include <sys/timeout.h> +extern struct timeout ipf_slowtimer_ch; +#endif /* END OF INCLUDES */ -#include <machine/in_cksum.h> - #if !defined(lint) static const char sccsid[] = "@(#)fil.c 1.36 6/5/96 (C) 1993-2000 Darren Reed"; -static const char rcsid[] = "@(#)$FreeBSD: head/sys/contrib/ipfilter/netinet/fil.c 241546 2012-10-14 15:03:06Z glebius $"; +static const char rcsid[] = "@(#)$FreeBSD: head/sys/contrib/ipfilter/netinet/fil.c 255355 2013-09-07 09:47:18Z glebius $"; /* static const char rcsid[] = "@(#)$Id: fil.c,v 2.243.2.125 2007/10/10 09:27:20 darrenr Exp $"; */ #endif #ifndef _KERNEL # include "ipf.h" # include "ipt.h" -# include "bpf-ipf.h" extern int opts; +extern int blockreason; #endif /* _KERNEL */ +#define LBUMP(x) softc->x++ +#define LBUMPD(x, y) do { softc->x.y++; DT(y); } while (0) -fr_info_t frcache[2][8]; -struct filterstats frstats[2]; -struct frentry *ipfilter[2][2] = { { NULL, NULL }, { NULL, NULL } }, - *ipfilter6[2][2] = { { NULL, NULL }, { NULL, NULL } }, - *ipacct6[2][2] = { { NULL, NULL }, { NULL, NULL } }, - *ipacct[2][2] = { { NULL, NULL }, { NULL, NULL } }, - *ipnatrules[2][2] = { { NULL, NULL }, { NULL, NULL } }; -struct frgroup *ipfgroups[IPL_LOGSIZE][2]; -char ipfilter_version[] = IPL_VERSION; -int fr_refcnt = 0; -/* - * For fr_running: - * 0 == loading, 1 = running, -1 = disabled, -2 = unloading - */ -int fr_running = 0; -int fr_flags = IPF_LOGGING; -int fr_active = 0; -int fr_control_forwarding = 0; -int fr_update_ipid = 0; -u_short fr_ip_id = 0; -int fr_chksrc = 0; /* causes a system crash if enabled */ -int fr_minttl = 4; -int fr_icmpminfragmtu = 68; -u_long fr_frouteok[2] = {0, 0}; -u_long fr_userifqs = 0; -u_long fr_badcoalesces[2] = {0, 0}; -u_char ipf_iss_secret[32]; -#if defined(IPFILTER_DEFAULT_BLOCK) >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309081502.r88F2ouY031313>
