Date: Sat, 18 Oct 2008 06:56:07 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r184024 - in projects/release_6_3_xen/sys: conf i386/i386 i386/xen libkern sys xen xen/evtchn xen/xenbus Message-ID: <200810180656.m9I6u7M9009740@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kmacy Date: Sat Oct 18 06:56:07 2008 New Revision: 184024 URL: http://svn.freebsd.org/changeset/base/184024 Log: - Merge fixes to sys/xen - change pcpu usage back to 6.3 - import strcspn support Added: projects/release_6_3_xen/sys/libkern/strcspn.c Modified: projects/release_6_3_xen/sys/conf/files projects/release_6_3_xen/sys/i386/i386/machdep.c projects/release_6_3_xen/sys/i386/xen/locore.s projects/release_6_3_xen/sys/i386/xen/mp_machdep.c projects/release_6_3_xen/sys/sys/libkern.h projects/release_6_3_xen/sys/xen/evtchn/evtchn.c projects/release_6_3_xen/sys/xen/gnttab.c projects/release_6_3_xen/sys/xen/gnttab.h projects/release_6_3_xen/sys/xen/xenbus/xenbus_xs.c Modified: projects/release_6_3_xen/sys/conf/files ============================================================================== --- projects/release_6_3_xen/sys/conf/files Sat Oct 18 06:37:43 2008 (r184023) +++ projects/release_6_3_xen/sys/conf/files Sat Oct 18 06:56:07 2008 (r184024) @@ -1463,6 +1463,7 @@ libkern/strcasecmp.c standard libkern/strcat.c standard libkern/strcmp.c standard libkern/strcpy.c standard +libkern/strcspn.c standard libkern/strdup.c standard libkern/strlcat.c standard libkern/strlcpy.c standard Modified: projects/release_6_3_xen/sys/i386/i386/machdep.c ============================================================================== --- projects/release_6_3_xen/sys/i386/i386/machdep.c Sat Oct 18 06:37:43 2008 (r184023) +++ projects/release_6_3_xen/sys/i386/i386/machdep.c Sat Oct 18 06:56:07 2008 (r184024) @@ -2205,7 +2205,11 @@ init386(int first) gdt_segs[GUDATA_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE); gdt_segs[GBIOSLOWMEM_SEL].ssd_limit = atop(HYPERVISOR_VIRT_START + MTOPSIZE); - pc = &__pcpu[0]; +#ifdef SMP + pc = &SMP_prvspace[0].pcpu; +#else + pc = &__pcpu; +#endif gdt_segs[GPRIV_SEL].ssd_base = (int) pc; gdt_segs[GPROC0_SEL].ssd_base = (int) &pc->pc_common_tss; Modified: projects/release_6_3_xen/sys/i386/xen/locore.s ============================================================================== --- projects/release_6_3_xen/sys/i386/xen/locore.s Sat Oct 18 06:37:43 2008 (r184023) +++ projects/release_6_3_xen/sys/i386/xen/locore.s Sat Oct 18 06:56:07 2008 (r184024) @@ -110,7 +110,16 @@ .set PTmap,(PTDPTDI << PDRSHIFT) .set PTD,PTmap + (PTDPTDI * PAGE_SIZE) .set PTDpde,PTD + (PTDPTDI * PDESIZE) - +#ifdef SMP +/* + * Define layout of per-cpu address space. + * This is "constructed" in locore.s on the BSP and in mp_machdep.c + * for each AP. DO NOT REORDER THESE WITHOUT UPDATING THE REST! + */ + .globl SMP_prvspace + .set SMP_prvspace,(MPPTDI << PDRSHIFT) +#endif /* SMP */ + /* * Compiled KERNBASE location and the kernel load address */ Modified: projects/release_6_3_xen/sys/i386/xen/mp_machdep.c ============================================================================== --- projects/release_6_3_xen/sys/i386/xen/mp_machdep.c Sat Oct 18 06:37:43 2008 (r184023) +++ projects/release_6_3_xen/sys/i386/xen/mp_machdep.c Sat Oct 18 06:56:07 2008 (r184024) @@ -81,6 +81,7 @@ __FBSDID("$FreeBSD$"); #include <machine/smp.h> #include <machine/smptests.h> /** COUNT_XINVLTLB_HITS */ #include <machine/specialreg.h> +#include <machine/privatespace.h> #include <machine/xen/hypervisor.h> #include <machine/xen/evtchn.h> @@ -622,7 +623,7 @@ start_all_aps(void) bootAPgdt = gdt + (512*cpu); /* Get per-cpu data */ - pc = &__pcpu[bootAP]; + pc = &SMP_prvspace[bootAP].pcpu; pcpu_init(pc, bootAP, sizeof(struct pcpu)); pc->pc_apic_id = cpu_apic_ids[bootAP]; pc->pc_prvspace = pc; Added: projects/release_6_3_xen/sys/libkern/strcspn.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/release_6_3_xen/sys/libkern/strcspn.c Sat Oct 18 06:56:07 2008 (r184024) @@ -0,0 +1,72 @@ +/*- + * Copyright (c) 2005 David Schultz <das@FreeBSD.ORG> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/libkern.h> +#include <sys/types.h> +#include <sys/limits.h> + +#define IDX(c) ((u_char)(c) / LONG_BIT) +#define BIT(c) ((u_long)1 << ((u_char)(c) % LONG_BIT)) + +size_t +strcspn(const char *s, const char *charset) +{ + /* + * NB: idx and bit are temporaries whose use causes gcc 3.4.2 to + * generate better code. Without them, gcc gets a little confused. + */ + const char *s1; + u_long bit; + u_long tbl[(UCHAR_MAX + 1) / LONG_BIT]; + int idx; + + if(*s == '\0') + return (0); + +#if LONG_BIT == 64 /* always better to unroll on 64-bit architectures */ + tbl[0] = 1; + tbl[3] = tbl[2] = tbl[1] = 0; +#else + for (tbl[0] = idx = 1; idx < sizeof(tbl) / sizeof(tbl[0]); idx++) + tbl[idx] = 0; +#endif + for (; *charset != '\0'; charset++) { + idx = IDX(*charset); + bit = BIT(*charset); + tbl[idx] |= bit; + } + + for(s1 = s; ; s1++) { + idx = IDX(*s1); + bit = BIT(*s1); + if ((tbl[idx] & bit) != 0) + break; + } + return (s1 - s); +} Modified: projects/release_6_3_xen/sys/sys/libkern.h ============================================================================== --- projects/release_6_3_xen/sys/sys/libkern.h Sat Oct 18 06:37:43 2008 (r184023) +++ projects/release_6_3_xen/sys/sys/libkern.h Sat Oct 18 06:56:07 2008 (r184024) @@ -98,6 +98,7 @@ void srandom(u_long); int strcasecmp(const char *, const char *); char *strcat(char * __restrict, const char * __restrict); int strcmp(const char *, const char *); +size_t strcspn(const char *s, const char *charset); char *strcpy(char * __restrict, const char * __restrict); char *strdup(const char *__restrict, struct malloc_type *); size_t strlcat(char *, const char *, size_t); @@ -151,6 +152,18 @@ memset(void *b, int c, size_t len) return (b); } +static __inline char * +strchr(const char *p, int ch) +{ + return (index(p, ch)); +} + +static __inline char * +strrchr(const char *p, int ch) +{ + return (rindex(p, ch)); +} + /* fnmatch() return values. */ #define FNM_NOMATCH 1 /* Match failed. */ Modified: projects/release_6_3_xen/sys/xen/evtchn/evtchn.c ============================================================================== --- projects/release_6_3_xen/sys/xen/evtchn/evtchn.c Sat Oct 18 06:37:43 2008 (r184023) +++ projects/release_6_3_xen/sys/xen/evtchn/evtchn.c Sat Oct 18 06:56:07 2008 (r184024) @@ -21,7 +21,9 @@ __FBSDID("$FreeBSD$"); #include <machine/cpufunc.h> #include <machine/intr_machdep.h> + #include <machine/xen/xen-os.h> +#include <machine/xen/xenvar.h> #include <machine/xen/xen_intr.h> #include <machine/xen/synch_bitops.h> #include <machine/xen/evtchn.h> @@ -178,7 +180,7 @@ void force_evtchn_callback(void) } void -evtchn_do_upcall(struct trapframe *frame) +evtchn_do_upcall(struct intrframe *frame) { unsigned long l1, l2; unsigned int l1i, l2i, port; @@ -434,7 +436,7 @@ bind_caller_port_to_irqhandler(unsigned irq = bind_caller_port_to_irq(caller_port); intr_register_source(&xp->xp_pins[irq].xp_intsrc); - retval = intr_add_handler(devname, irq, NULL, handler, arg, irqflags, cookiep); + retval = intr_add_handler(devname, irq, handler, arg, irqflags, cookiep); if (retval != 0) { unbind_from_irq(irq); return -retval; @@ -457,7 +459,7 @@ bind_listening_port_to_irqhandler( irq = bind_listening_port_to_irq(remote_domain); intr_register_source(&xp->xp_pins[irq].xp_intsrc); - retval = intr_add_handler(devname, irq, NULL, handler, arg, irqflags, cookiep); + retval = intr_add_handler(devname, irq, handler, arg, irqflags, cookiep); if (retval != 0) { unbind_from_irq(irq); return -retval; @@ -471,7 +473,6 @@ bind_interdomain_evtchn_to_irqhandler( unsigned int remote_domain, unsigned int remote_port, const char *devname, - driver_filter_t filter, driver_intr_t handler, unsigned long irqflags) { @@ -480,7 +481,7 @@ bind_interdomain_evtchn_to_irqhandler( irq = bind_interdomain_evtchn_to_irq(remote_domain, remote_port); intr_register_source(&xp->xp_pins[irq].xp_intsrc); - retval = intr_add_handler(devname, irq, filter, handler, NULL, irqflags, NULL); + retval = intr_add_handler(devname, irq, handler, NULL, irqflags, NULL); if (retval != 0) { unbind_from_irq(irq); return -retval; @@ -493,7 +494,6 @@ int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, const char *devname, - driver_filter_t filter, driver_intr_t handler, unsigned long irqflags) { @@ -502,7 +502,7 @@ bind_virq_to_irqhandler(unsigned int vir irq = bind_virq_to_irq(virq, cpu); intr_register_source(&xp->xp_pins[irq].xp_intsrc); - retval = intr_add_handler(devname, irq, filter, handler, NULL, irqflags, NULL); + retval = intr_add_handler(devname, irq, handler, NULL, irqflags, NULL); if (retval != 0) { unbind_from_irq(irq); return -retval; @@ -523,7 +523,7 @@ bind_ipi_to_irqhandler(unsigned int ipi, irq = bind_ipi_to_irq(ipi, cpu); intr_register_source(&xp->xp_pins[irq].xp_intsrc); - retval = intr_add_handler(devname, irq, NULL, handler, NULL, irqflags, NULL); + retval = intr_add_handler(devname, irq, handler, NULL, irqflags, NULL); if (retval != 0) { unbind_from_irq(irq); return -retval; @@ -592,13 +592,11 @@ static void xenpic_dynirq_enable_sou static void xenpic_dynirq_disable_source(struct intsrc *isrc, int); static void xenpic_dynirq_eoi_source(struct intsrc *isrc); static void xenpic_dynirq_enable_intr(struct intsrc *isrc); -static void xenpic_dynirq_disable_intr(struct intsrc *isrc); static void xenpic_pirq_enable_source(struct intsrc *isrc); static void xenpic_pirq_disable_source(struct intsrc *isrc, int); static void xenpic_pirq_eoi_source(struct intsrc *isrc); static void xenpic_pirq_enable_intr(struct intsrc *isrc); -static void xenpic_pirq_disable_intr(struct intsrc *isrc); static int xenpic_vector(struct intsrc *isrc); @@ -613,7 +611,6 @@ struct pic xenpic_dynirq_template = { .pic_disable_source = xenpic_dynirq_disable_source, .pic_eoi_source = xenpic_dynirq_eoi_source, .pic_enable_intr = xenpic_dynirq_enable_intr, - .pic_disable_intr = xenpic_dynirq_disable_intr, .pic_vector = xenpic_vector, .pic_source_pending = xenpic_source_pending, .pic_suspend = xenpic_suspend, @@ -625,7 +622,6 @@ struct pic xenpic_pirq_template = { .pic_disable_source = xenpic_pirq_disable_source, .pic_eoi_source = xenpic_pirq_eoi_source, .pic_enable_intr = xenpic_pirq_enable_intr, - .pic_disable_intr = xenpic_pirq_disable_intr, .pic_vector = xenpic_vector, .pic_source_pending = xenpic_source_pending, .pic_suspend = xenpic_suspend, @@ -684,20 +680,6 @@ xenpic_dynirq_enable_intr(struct intsrc } static void -xenpic_dynirq_disable_intr(struct intsrc *isrc) -{ - unsigned int irq; - struct xenpic_intsrc *xp; - - xp = (struct xenpic_intsrc *)isrc; - mtx_lock_spin(&irq_mapping_update_lock); - xp->xp_masked = 1; - irq = xenpic_vector(isrc); - mask_evtchn(evtchn_from_irq(irq)); - mtx_unlock_spin(&irq_mapping_update_lock); -} - -static void xenpic_dynirq_eoi_source(struct intsrc *isrc) { unsigned int irq; @@ -830,32 +812,6 @@ xenpic_pirq_enable_intr(struct intsrc *i } static void -xenpic_pirq_disable_intr(struct intsrc *isrc) -{ - unsigned int irq; - int evtchn; - struct evtchn_close close; - - mtx_lock_spin(&irq_mapping_update_lock); - irq = xenpic_vector(isrc); - evtchn = evtchn_from_irq(irq); - - if (!VALID_EVTCHN(evtchn)) - goto done; - - mask_evtchn(evtchn); - - close.port = evtchn; - PANIC_IF(HYPERVISOR_event_channel_op(EVTCHNOP_close, &close) != 0); - - bind_evtchn_to_cpu(evtchn, 0); - evtchn_to_irq[evtchn] = -1; - irq_info[irq] = IRQ_UNBOUND; - done: - mtx_unlock_spin(&irq_mapping_update_lock); -} - -static void xenpic_pirq_enable_source(struct intsrc *isrc) { int evtchn; Modified: projects/release_6_3_xen/sys/xen/gnttab.c ============================================================================== --- projects/release_6_3_xen/sys/xen/gnttab.c Sat Oct 18 06:37:43 2008 (r184023) +++ projects/release_6_3_xen/sys/xen/gnttab.c Sat Oct 18 06:56:07 2008 (r184024) @@ -25,11 +25,6 @@ __FBSDID("$FreeBSD$"); #include <sys/lock.h> #include <sys/malloc.h> #include <sys/mman.h> -#include <vm/vm.h> -#include <vm/vm_extern.h> - -#include <vm/vm_page.h> -#include <vm/vm_kern.h> #include <machine/xen/hypervisor.h> #include <machine/xen/synch_bitops.h> Modified: projects/release_6_3_xen/sys/xen/gnttab.h ============================================================================== --- projects/release_6_3_xen/sys/xen/gnttab.h Sat Oct 18 06:37:43 2008 (r184023) +++ projects/release_6_3_xen/sys/xen/gnttab.h Sat Oct 18 06:56:07 2008 (r184024) @@ -36,12 +36,16 @@ #ifndef __ASM_GNTTAB_H__ +#include <vm/vm.h> +#include <vm/vm_extern.h> +#include <vm/vm_page.h> +#include <vm/vm_kern.h> + #include <machine/xen/hypervisor.h> #include <xen/interface/grant_table.h> #include <machine/xen/xen-os.h> #include <machine/xen/hypervisor.h> #include <machine/xen/features.h> - struct gnttab_free_callback { struct gnttab_free_callback *next; void (*fn)(void *); Modified: projects/release_6_3_xen/sys/xen/xenbus/xenbus_xs.c ============================================================================== --- projects/release_6_3_xen/sys/xen/xenbus/xenbus_xs.c Sat Oct 18 06:37:43 2008 (r184023) +++ projects/release_6_3_xen/sys/xen/xenbus/xenbus_xs.c Sat Oct 18 06:56:07 2008 (r184024) @@ -883,7 +883,7 @@ static void xenbus_thread(void *unused) DELAY(10000); xenbus_running = 1; - pause("xenbus", hz/10); + tsleep(&lbolt, 0, "xenbus", hz/10); for (;;) { err = xs_process_msg(&type); @@ -922,13 +922,13 @@ int xs_init(void) if (err) return err; - err = kproc_create(xenwatch_thread, NULL, &p, + err = kthread_create(xenwatch_thread, NULL, &p, RFHIGHPID, 0, "xenwatch"); if (err) return err; xenwatch_pid = p->p_pid; - err = kproc_create(xenbus_thread, NULL, NULL, + err = kthread_create(xenbus_thread, NULL, NULL, RFHIGHPID, 0, "xenbus"); return err;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200810180656.m9I6u7M9009740>