Date: Tue, 27 Mar 2018 10:20:50 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r331610 - in head/sys: amd64/include i386/include x86/x86 x86/xen Message-ID: <201803271020.w2RAKoBP037397@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jeff Date: Tue Mar 27 10:20:50 2018 New Revision: 331610 URL: https://svnweb.freebsd.org/changeset/base/331610 Log: Backout r331606 until I can identify why it does not boot on some machines. Modified: head/sys/amd64/include/intr_machdep.h head/sys/i386/include/intr_machdep.h head/sys/x86/x86/intr_machdep.c head/sys/x86/x86/io_apic.c head/sys/x86/x86/msi.c head/sys/x86/x86/nexus.c head/sys/x86/xen/xen_intr.c Modified: head/sys/amd64/include/intr_machdep.h ============================================================================== --- head/sys/amd64/include/intr_machdep.h Tue Mar 27 06:33:00 2018 (r331609) +++ head/sys/amd64/include/intr_machdep.h Tue Mar 27 10:20:50 2018 (r331610) @@ -132,7 +132,6 @@ struct intsrc { u_long *is_straycount; u_int is_index; u_int is_handlers; - u_int is_domain; u_int is_cpu; }; @@ -169,7 +168,7 @@ void intr_add_cpu(u_int cpu); #endif int intr_add_handler(const char *name, int vector, driver_filter_t filter, driver_intr_t handler, void *arg, enum intr_type flags, - void **cookiep, int domain); + void **cookiep); #ifdef SMP int intr_bind(u_int vector, u_char cpu); #endif @@ -177,7 +176,7 @@ int intr_config_intr(int vector, enum intr_trigger tri enum intr_polarity pol); int intr_describe(u_int vector, void *ih, const char *descr); void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame); -u_int intr_next_cpu(int domain); +u_int intr_next_cpu(void); struct intsrc *intr_lookup_source(int vector); int intr_register_pic(struct pic *pic); int intr_register_source(struct intsrc *isrc); Modified: head/sys/i386/include/intr_machdep.h ============================================================================== --- head/sys/i386/include/intr_machdep.h Tue Mar 27 06:33:00 2018 (r331609) +++ head/sys/i386/include/intr_machdep.h Tue Mar 27 10:20:50 2018 (r331610) @@ -132,7 +132,6 @@ struct intsrc { u_long *is_straycount; u_int is_index; u_int is_handlers; - u_int is_domain; u_int is_cpu; }; @@ -159,8 +158,7 @@ void elcr_write_trigger(u_int irq, enum intr_trigger t void intr_add_cpu(u_int cpu); #endif int intr_add_handler(const char *name, int vector, driver_filter_t filter, - driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep, - int domain); + driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep); #ifdef SMP int intr_bind(u_int vector, u_char cpu); #endif @@ -168,7 +166,7 @@ int intr_config_intr(int vector, enum intr_trigger tri enum intr_polarity pol); int intr_describe(u_int vector, void *ih, const char *descr); void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame); -u_int intr_next_cpu(int domain); +u_int intr_next_cpu(void); struct intsrc *intr_lookup_source(int vector); int intr_register_pic(struct pic *pic); int intr_register_source(struct intsrc *isrc); Modified: head/sys/x86/x86/intr_machdep.c ============================================================================== --- head/sys/x86/x86/intr_machdep.c Tue Mar 27 06:33:00 2018 (r331609) +++ head/sys/x86/x86/intr_machdep.c Tue Mar 27 10:20:50 2018 (r331610) @@ -71,8 +71,6 @@ #include <isa/isareg.h> #endif -#include <vm/vm.h> - #define MAX_STRAY_LOG 5 typedef void (*mask_fn)(void *); @@ -187,8 +185,7 @@ intr_lookup_source(int vector) int intr_add_handler(const char *name, int vector, driver_filter_t filter, - driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep, - int domain) + driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep) { struct intsrc *isrc; int error; @@ -203,7 +200,6 @@ intr_add_handler(const char *name, int vector, driver_ intrcnt_updatename(isrc); isrc->is_handlers++; if (isrc->is_handlers == 1) { - isrc->is_domain = domain; isrc->is_pic->pic_enable_intr(isrc); isrc->is_pic->pic_enable_source(isrc); } @@ -511,27 +507,14 @@ DB_SHOW_COMMAND(irqs, db_show_irqs) */ cpuset_t intr_cpus = CPUSET_T_INITIALIZER(0x1); -static int current_cpu[MAXMEMDOM]; +static int current_cpu; -static void -intr_init_cpus(void) -{ - int i; - - for (i = 0; i < vm_ndomains; i++) { - current_cpu[i] = 0; - if (!CPU_ISSET(current_cpu[i], &intr_cpus) || - !CPU_ISSET(current_cpu[i], &cpuset_domain[i])) - intr_next_cpu(i); - } -} - /* * Return the CPU that the next interrupt source should use. For now * this just returns the next local APIC according to round-robin. */ u_int -intr_next_cpu(int domain) +intr_next_cpu(void) { u_int apic_id; @@ -546,13 +529,12 @@ intr_next_cpu(int domain) #endif mtx_lock_spin(&icu_lock); - apic_id = cpu_apic_ids[current_cpu[domain]]; + apic_id = cpu_apic_ids[current_cpu]; do { - current_cpu[domain]++; - if (current_cpu[domain] > mp_maxid) - current_cpu[domain] = 0; - } while (!CPU_ISSET(current_cpu[domain], &intr_cpus) || - !CPU_ISSET(current_cpu[domain], &cpuset_domain[domain])); + current_cpu++; + if (current_cpu > mp_maxid) + current_cpu = 0; + } while (!CPU_ISSET(current_cpu, &intr_cpus)); mtx_unlock_spin(&icu_lock); return (apic_id); } @@ -586,18 +568,7 @@ intr_add_cpu(u_int cpu) CPU_SET(cpu, &intr_cpus); } -#ifdef EARLY_AP_STARTUP -static void -intr_smp_startup(void *arg __unused) -{ - - intr_init_cpus(); - return; -} -SYSINIT(intr_smp_startup, SI_SUB_SMP, SI_ORDER_SECOND, intr_smp_startup, - NULL); - -#else +#ifndef EARLY_AP_STARTUP /* * Distribute all the interrupt sources among the available CPUs once the * AP's have been launched. @@ -609,7 +580,6 @@ intr_shuffle_irqs(void *arg __unused) u_int cpu; int i; - intr_init_cpus(); /* Don't bother on UP. */ if (mp_ncpus == 1) return; @@ -629,12 +599,12 @@ intr_shuffle_irqs(void *arg __unused) */ cpu = isrc->is_event->ie_cpu; if (cpu == NOCPU) - cpu = current_cpu[isrc->is_domain]; + cpu = current_cpu; if (isrc->is_pic->pic_assign_cpu(isrc, cpu_apic_ids[cpu]) == 0) { isrc->is_cpu = cpu; if (isrc->is_event->ie_cpu == NOCPU) - intr_next_cpu(isrc->is_domain); + intr_next_cpu(); } } } @@ -665,11 +635,10 @@ sysctl_hw_intrs(SYSCTL_HANDLER_ARGS) isrc = interrupt_sources[i]; if (isrc == NULL) continue; - sbuf_printf(&sbuf, "%s:%d @cpu%d(domain%d): %ld\n", + sbuf_printf(&sbuf, "%s:%d @%d: %ld\n", isrc->is_event->ie_fullname, isrc->is_index, isrc->is_cpu, - isrc->is_domain, *isrc->is_count); } @@ -728,7 +697,7 @@ intr_balance(void *dummy __unused, int pending __unuse * Restart the scan from the same location to avoid moving in the * common case. */ - intr_init_cpus(); + current_cpu = 0; /* * Assign round-robin from most loaded to least. @@ -737,8 +706,8 @@ intr_balance(void *dummy __unused, int pending __unuse isrc = interrupt_sorted[i]; if (isrc == NULL || isrc->is_event->ie_cpu != NOCPU) continue; - cpu = current_cpu[isrc->is_domain]; - intr_next_cpu(isrc->is_domain); + cpu = current_cpu; + intr_next_cpu(); if (isrc->is_cpu != cpu && isrc->is_pic->pic_assign_cpu(isrc, cpu_apic_ids[cpu]) == 0) @@ -766,7 +735,7 @@ SYSINIT(intr_balance_init, SI_SUB_SMP, SI_ORDER_ANY, i * Always route interrupts to the current processor in the UP case. */ u_int -intr_next_cpu(int domain) +intr_next_cpu(void) { return (PCPU_GET(apic_id)); Modified: head/sys/x86/x86/io_apic.c ============================================================================== --- head/sys/x86/x86/io_apic.c Tue Mar 27 06:33:00 2018 (r331609) +++ head/sys/x86/x86/io_apic.c Tue Mar 27 10:20:50 2018 (r331610) @@ -499,7 +499,7 @@ ioapic_enable_intr(struct intsrc *isrc) struct ioapic_intsrc *intpin = (struct ioapic_intsrc *)isrc; if (intpin->io_vector == 0) - if (ioapic_assign_cpu(isrc, intr_next_cpu(isrc->is_domain)) != 0) + if (ioapic_assign_cpu(isrc, intr_next_cpu()) != 0) panic("Couldn't find an APIC vector for IRQ %d", intpin->io_irq); apic_enable_vector(intpin->io_cpu, intpin->io_vector); Modified: head/sys/x86/x86/msi.c ============================================================================== --- head/sys/x86/x86/msi.c Tue Mar 27 06:33:00 2018 (r331609) +++ head/sys/x86/x86/msi.c Tue Mar 27 10:20:50 2018 (r331610) @@ -363,7 +363,7 @@ int msi_alloc(device_t dev, int count, int maxcount, int *irqs) { struct msi_intsrc *msi, *fsrc; - u_int cpu, domain; + u_int cpu; int cnt, i, *mirqs, vector; #ifdef ACPI_DMAR u_int cookies[count]; @@ -373,9 +373,6 @@ msi_alloc(device_t dev, int count, int maxcount, int * if (!msi_enabled) return (ENXIO); - if (bus_get_domain(dev, &domain) != 0) - domain = 0; - if (count > 1) mirqs = malloc(count * sizeof(*mirqs), M_MSI, M_WAITOK); else @@ -423,7 +420,7 @@ again: KASSERT(cnt == count, ("count mismatch")); /* Allocate 'count' IDT vectors. */ - cpu = intr_next_cpu(domain); + cpu = intr_next_cpu(); vector = apic_alloc_vectors(cpu, irqs, count, maxcount); if (vector == 0) { mtx_unlock(&msi_lock); @@ -613,7 +610,7 @@ int msix_alloc(device_t dev, int *irq) { struct msi_intsrc *msi; - u_int cpu, domain; + u_int cpu; int i, vector; #ifdef ACPI_DMAR u_int cookie; @@ -623,9 +620,6 @@ msix_alloc(device_t dev, int *irq) if (!msi_enabled) return (ENXIO); - if (bus_get_domain(dev, &domain) != 0) - domain = 0; - again: mtx_lock(&msi_lock); @@ -657,7 +651,7 @@ again: } /* Allocate an IDT vector. */ - cpu = intr_next_cpu(domain); + cpu = intr_next_cpu(); vector = apic_alloc_vector(cpu, i); if (vector == 0) { mtx_unlock(&msi_lock); Modified: head/sys/x86/x86/nexus.c ============================================================================== --- head/sys/x86/x86/nexus.c Tue Mar 27 06:33:00 2018 (r331609) +++ head/sys/x86/x86/nexus.c Tue Mar 27 10:20:50 2018 (r331610) @@ -573,7 +573,7 @@ nexus_setup_intr(device_t bus, device_t child, struct int flags, driver_filter_t filter, void (*ihand)(void *), void *arg, void **cookiep) { - int error, domain; + int error; /* somebody tried to setup an irq that failed to allocate! */ if (irq == NULL) @@ -589,11 +589,9 @@ nexus_setup_intr(device_t bus, device_t child, struct error = rman_activate_resource(irq); if (error) return (error); - if (bus_get_domain(child, &domain) != 0) - domain = 0; error = intr_add_handler(device_get_nameunit(child), - rman_get_start(irq), filter, ihand, arg, flags, cookiep, domain); + rman_get_start(irq), filter, ihand, arg, flags, cookiep); return (error); } Modified: head/sys/x86/xen/xen_intr.c ============================================================================== --- head/sys/x86/xen/xen_intr.c Tue Mar 27 06:33:00 2018 (r331609) +++ head/sys/x86/xen/xen_intr.c Tue Mar 27 10:20:50 2018 (r331610) @@ -430,7 +430,7 @@ xen_intr_bind_isrc(struct xenisrc **isrcp, evtchn_port * unless specified otherwise, so shuffle them to balance * the interrupt load. */ - xen_intr_assign_cpu(&isrc->xi_intsrc, intr_next_cpu(0)); + xen_intr_assign_cpu(&isrc->xi_intsrc, intr_next_cpu()); } #endif @@ -1562,7 +1562,7 @@ xen_intr_add_handler(const char *name, driver_filter_t return (EINVAL); error = intr_add_handler(name, isrc->xi_vector,filter, handler, arg, - flags|INTR_EXCL, &isrc->xi_cookie, 0); + flags|INTR_EXCL, &isrc->xi_cookie); if (error != 0) { printf( "%s: xen_intr_add_handler: intr_add_handler failed: %d\n",
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803271020.w2RAKoBP037397>