PERFORCE change 165772 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Tue Jul 7 18:36:54 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=165772
Change 165772 by hselasky at hselasky_laptop001 on 2009/07/07 18:36:28
IFC @ 165768
Affected files ...
.. //depot/projects/usb/src/sys/amd64/amd64/genassym.c#13 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/identcpu.c#16 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/intr_machdep.c#11 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/io_apic.c#8 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/local_apic.c#18 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/machdep.c#21 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/msi.c#10 integrate
.. //depot/projects/usb/src/sys/amd64/amd64/pmap.c#24 integrate
.. //depot/projects/usb/src/sys/amd64/conf/GENERIC#29 integrate
.. //depot/projects/usb/src/sys/amd64/include/intr_machdep.h#9 integrate
.. //depot/projects/usb/src/sys/amd64/include/param.h#8 integrate
.. //depot/projects/usb/src/sys/amd64/isa/atpic.c#5 integrate
.. //depot/projects/usb/src/sys/arm/at91/at91_machdep.c#4 integrate
.. //depot/projects/usb/src/sys/arm/include/param.h#4 integrate
.. //depot/projects/usb/src/sys/arm/mv/mv_machdep.c#6 integrate
.. //depot/projects/usb/src/sys/arm/sa11x0/assabet_machdep.c#9 integrate
.. //depot/projects/usb/src/sys/conf/files#72 integrate
.. //depot/projects/usb/src/sys/conf/newvers.sh#9 integrate
.. //depot/projects/usb/src/sys/conf/options#36 integrate
.. //depot/projects/usb/src/sys/contrib/dev/mwl/mw88W8363.fw.uu#2 integrate
.. //depot/projects/usb/src/sys/dev/acpi_support/acpi_hp.c#2 integrate
.. //depot/projects/usb/src/sys/dev/acpi_support/acpi_wmi.c#2 integrate
.. //depot/projects/usb/src/sys/dev/acpi_support/acpi_wmi_if.m#2 integrate
.. //depot/projects/usb/src/sys/dev/ale/if_ale.c#5 integrate
.. //depot/projects/usb/src/sys/dev/ata/chipsets/ata-nvidia.c#7 integrate
.. //depot/projects/usb/src/sys/dev/ath/ah_osdep.c#9 integrate
.. //depot/projects/usb/src/sys/dev/ath/ah_osdep.h#6 integrate
.. //depot/projects/usb/src/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c#7 integrate
.. //depot/projects/usb/src/sys/dev/cpuctl/cpuctl.c#5 integrate
.. //depot/projects/usb/src/sys/dev/e1000/e1000_82542.c#3 integrate
.. //depot/projects/usb/src/sys/dev/e1000/if_em.c#10 integrate
.. //depot/projects/usb/src/sys/dev/ixgbe/ixgbe.c#9 integrate
.. //depot/projects/usb/src/sys/dev/mpt/mpt_cam.c#11 integrate
.. //depot/projects/usb/src/sys/dev/mwl/if_mwl.c#3 integrate
.. //depot/projects/usb/src/sys/dev/mwl/if_mwlvar.h#2 integrate
.. //depot/projects/usb/src/sys/dev/mwl/mwlhal.c#2 integrate
.. //depot/projects/usb/src/sys/dev/mwl/mwlhal.h#2 integrate
.. //depot/projects/usb/src/sys/dev/mwl/mwlreg.h#2 integrate
.. //depot/projects/usb/src/sys/dev/sound/pcm/feeder_rate.c#9 integrate
.. //depot/projects/usb/src/sys/dev/usb/serial/usb_serial.c#11 integrate
.. //depot/projects/usb/src/sys/dev/usb/wlan/if_urtw.c#7 integrate
.. //depot/projects/usb/src/sys/fs/cd9660/cd9660_lookup.c#5 integrate
.. //depot/projects/usb/src/sys/fs/fifofs/fifo_vnops.c#12 integrate
.. //depot/projects/usb/src/sys/geom/geom.h#10 integrate
.. //depot/projects/usb/src/sys/geom/geom_io.c#10 integrate
.. //depot/projects/usb/src/sys/geom/geom_subr.c#14 integrate
.. //depot/projects/usb/src/sys/geom/geom_vfs.c#6 integrate
.. //depot/projects/usb/src/sys/geom/journal/g_journal.c#12 integrate
.. //depot/projects/usb/src/sys/i386/conf/GENERIC#28 integrate
.. //depot/projects/usb/src/sys/i386/i386/genassym.c#9 integrate
.. //depot/projects/usb/src/sys/i386/i386/intr_machdep.c#12 integrate
.. //depot/projects/usb/src/sys/i386/i386/io_apic.c#8 integrate
.. //depot/projects/usb/src/sys/i386/i386/local_apic.c#18 integrate
.. //depot/projects/usb/src/sys/i386/i386/msi.c#10 integrate
.. //depot/projects/usb/src/sys/i386/i386/pmap.c#19 integrate
.. //depot/projects/usb/src/sys/i386/include/intr_machdep.h#8 integrate
.. //depot/projects/usb/src/sys/i386/include/param.h#7 integrate
.. //depot/projects/usb/src/sys/i386/isa/atpic.c#5 integrate
.. //depot/projects/usb/src/sys/i386/xen/pmap.c#8 integrate
.. //depot/projects/usb/src/sys/ia64/conf/GENERIC#13 integrate
.. //depot/projects/usb/src/sys/ia64/include/param.h#4 integrate
.. //depot/projects/usb/src/sys/kern/kern_event.c#11 integrate
.. //depot/projects/usb/src/sys/kern/kern_exit.c#20 integrate
.. //depot/projects/usb/src/sys/kern/kern_intr.c#15 integrate
.. //depot/projects/usb/src/sys/kern/kern_linker.c#17 integrate
.. //depot/projects/usb/src/sys/kern/sys_generic.c#16 integrate
.. //depot/projects/usb/src/sys/kern/sys_pipe.c#13 integrate
.. //depot/projects/usb/src/sys/kern/sys_process.c#13 integrate
.. //depot/projects/usb/src/sys/kern/sys_socket.c#12 integrate
.. //depot/projects/usb/src/sys/kern/tty.c#28 integrate
.. //depot/projects/usb/src/sys/kern/uipc_socket.c#23 integrate
.. //depot/projects/usb/src/sys/kern/uipc_syscalls.c#17 integrate
.. //depot/projects/usb/src/sys/kern/vfs_cluster.c#8 integrate
.. //depot/projects/usb/src/sys/kern/vfs_export.c#11 integrate
.. //depot/projects/usb/src/sys/kern/vfs_mount.c#27 integrate
.. //depot/projects/usb/src/sys/kern/vfs_subr.c#24 integrate
.. //depot/projects/usb/src/sys/kern/vfs_syscalls.c#25 integrate
.. //depot/projects/usb/src/sys/kern/vfs_vnops.c#21 integrate
.. //depot/projects/usb/src/sys/mips/include/param.h#4 integrate
.. //depot/projects/usb/src/sys/mips/malta/yamon.c#3 integrate
.. //depot/projects/usb/src/sys/mips/mips/busdma_machdep.c#5 integrate
.. //depot/projects/usb/src/sys/mips/mips/dump_machdep.c#2 integrate
.. //depot/projects/usb/src/sys/mips/mips/intr_machdep.c#4 integrate
.. //depot/projects/usb/src/sys/modules/Makefile#38 integrate
.. //depot/projects/usb/src/sys/modules/geom/geom_label/Makefile#2 integrate
.. //depot/projects/usb/src/sys/modules/nfsclient/Makefile#7 integrate
.. //depot/projects/usb/src/sys/modules/nfsserver/Makefile#6 integrate
.. //depot/projects/usb/src/sys/modules/wlan/Makefile#11 integrate
.. //depot/projects/usb/src/sys/net/if.c#33 integrate
.. //depot/projects/usb/src/sys/net/if_var.h#23 integrate
.. //depot/projects/usb/src/sys/net/netisr.c#12 integrate
.. //depot/projects/usb/src/sys/net/vnet.h#12 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211.c#25 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_action.c#1 branch
.. //depot/projects/usb/src/sys/net80211/ieee80211_action.h#1 branch
.. //depot/projects/usb/src/sys/net80211/ieee80211_adhoc.c#10 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_ageq.c#1 branch
.. //depot/projects/usb/src/sys/net80211/ieee80211_ageq.h#1 branch
.. //depot/projects/usb/src/sys/net80211/ieee80211_freebsd.h#17 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_hostap.c#15 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_ht.c#14 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_ht.h#11 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_node.c#25 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_node.h#17 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_sta.c#12 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_var.h#24 integrate
.. //depot/projects/usb/src/sys/net80211/ieee80211_wds.c#12 integrate
.. //depot/projects/usb/src/sys/netgraph/ng_iface.c#14 integrate
.. //depot/projects/usb/src/sys/netgraph/ng_ksocket.c#7 integrate
.. //depot/projects/usb/src/sys/netinet6/in6_var.h#11 integrate
.. //depot/projects/usb/src/sys/nfs/nfs_common.c#4 integrate
.. //depot/projects/usb/src/sys/nfs/rpcv2.h#2 delete
.. //depot/projects/usb/src/sys/nfsclient/bootp_subr.c#16 integrate
.. //depot/projects/usb/src/sys/nfsclient/krpc_subr.c#6 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs.h#11 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs_bio.c#18 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs_diskless.c#12 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs_krpc.c#6 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs_lock.c#7 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs_nfsiod.c#5 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs_node.c#9 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs_socket.c#13 delete
.. //depot/projects/usb/src/sys/nfsclient/nfs_subs.c#11 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs_vfsops.c#19 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfs_vnops.c#26 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfsm_subs.h#4 integrate
.. //depot/projects/usb/src/sys/nfsclient/nfsmount.h#6 integrate
.. //depot/projects/usb/src/sys/nfsserver/nfs.h#11 integrate
.. //depot/projects/usb/src/sys/nfsserver/nfs_fha.c#4 integrate
.. //depot/projects/usb/src/sys/nfsserver/nfs_serv.c#15 integrate
.. //depot/projects/usb/src/sys/nfsserver/nfs_srvcache.c#6 delete
.. //depot/projects/usb/src/sys/nfsserver/nfs_srvkrpc.c#10 integrate
.. //depot/projects/usb/src/sys/nfsserver/nfs_srvsock.c#13 delete
.. //depot/projects/usb/src/sys/nfsserver/nfs_srvsubs.c#17 integrate
.. //depot/projects/usb/src/sys/nfsserver/nfs_syscalls.c#14 delete
.. //depot/projects/usb/src/sys/nfsserver/nfsrvcache.h#4 integrate
.. //depot/projects/usb/src/sys/pc98/conf/GENERIC#20 integrate
.. //depot/projects/usb/src/sys/powerpc/conf/GENERIC#22 integrate
.. //depot/projects/usb/src/sys/powerpc/include/param.h#5 integrate
.. //depot/projects/usb/src/sys/rpc/clnt_dg.c#6 integrate
.. //depot/projects/usb/src/sys/rpc/rpcsec_gss/rpcsec_gss.c#3 integrate
.. //depot/projects/usb/src/sys/security/audit/audit.c#14 integrate
.. //depot/projects/usb/src/sys/security/audit/audit.h#12 integrate
.. //depot/projects/usb/src/sys/security/audit/audit_arg.c#12 integrate
.. //depot/projects/usb/src/sys/security/audit/audit_bsm.c#15 integrate
.. //depot/projects/usb/src/sys/security/audit/audit_private.h#11 integrate
.. //depot/projects/usb/src/sys/sparc64/conf/GENERIC#22 integrate
.. //depot/projects/usb/src/sys/sparc64/include/param.h#5 integrate
.. //depot/projects/usb/src/sys/sparc64/include/pmap.h#3 integrate
.. //depot/projects/usb/src/sys/sparc64/sparc64/machdep.c#16 integrate
.. //depot/projects/usb/src/sys/sparc64/sparc64/pmap.c#12 integrate
.. //depot/projects/usb/src/sys/sun4v/conf/GENERIC#15 integrate
.. //depot/projects/usb/src/sys/sun4v/include/param.h#4 integrate
.. //depot/projects/usb/src/sys/sys/cpuctl.h#2 integrate
.. //depot/projects/usb/src/sys/sys/event.h#6 integrate
.. //depot/projects/usb/src/sys/sys/filio.h#3 integrate
.. //depot/projects/usb/src/sys/sys/mount.h#21 integrate
.. //depot/projects/usb/src/sys/sys/param.h#39 integrate
.. //depot/projects/usb/src/sys/sys/priv.h#20 integrate
.. //depot/projects/usb/src/sys/sys/socketvar.h#12 integrate
.. //depot/projects/usb/src/sys/sys/vnode.h#24 integrate
.. //depot/projects/usb/src/sys/tools/sound/feeder_rate_mkfilter.awk#3 integrate
.. //depot/projects/usb/src/sys/ufs/ffs/ffs_softdep.c#13 integrate
.. //depot/projects/usb/src/sys/ufs/ffs/ffs_vnops.c#14 integrate
.. //depot/projects/usb/src/sys/ufs/ufs/ufs_vnops.c#19 integrate
.. //depot/projects/usb/src/sys/vm/vm_extern.h#8 integrate
.. //depot/projects/usb/src/sys/vm/vm_fault.c#16 integrate
.. //depot/projects/usb/src/sys/vm/vm_map.c#17 integrate
.. //depot/projects/usb/src/sys/vm/vm_object.c#19 integrate
Differences ...
==== //depot/projects/usb/src/sys/amd64/amd64/genassym.c#13 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.175 2009/04/01 18:36:34 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.176 2009/07/01 07:34:28 dfr Exp $");
#include "opt_compat.h"
#include "opt_hwpmc_hooks.h"
@@ -64,7 +64,6 @@
#include <net/if.h>
#include <netinet/in.h>
#include <nfs/nfsproto.h>
-#include <nfs/rpcv2.h>
#include <nfsclient/nfs.h>
#include <nfsclient/nfsdiskless.h>
#include <machine/apicreg.h>
==== //depot/projects/usb/src/sys/amd64/amd64/identcpu.c#16 (text+ko) ====
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.173 2009/05/04 18:05:27 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.174 2009/06/30 11:16:32 avg Exp $");
#include "opt_cpu.h"
@@ -107,9 +107,6 @@
};
-extern int pq_l2size;
-extern int pq_l2nways;
-
void
printcpuinfo(void)
{
==== //depot/projects/usb/src/sys/amd64/amd64/intr_machdep.c#11 (text+ko) ====
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/amd64/amd64/intr_machdep.c,v 1.44 2009/06/25 20:35:46 jhb Exp $
+ * $FreeBSD: src/sys/amd64/amd64/intr_machdep.c,v 1.45 2009/07/01 17:20:07 jhb Exp $
*/
/*
@@ -163,8 +163,8 @@
}
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)
+intr_add_handler(const char *name, int vector, driver_filter_t filter,
+ driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep)
{
struct intsrc *isrc;
int error;
@@ -302,7 +302,8 @@
intr_assign_cpu(void *arg, u_char cpu)
{
#ifdef SMP
- struct intsrc *isrc;
+ struct intsrc *isrc;
+ int error;
/*
* Don't do anything during early boot. We will pick up the
@@ -311,10 +312,11 @@
if (assign_cpu && cpu != NOCPU) {
isrc = arg;
mtx_lock(&intr_table_lock);
- isrc->is_pic->pic_assign_cpu(isrc, cpu_apic_ids[cpu]);
+ error = isrc->is_pic->pic_assign_cpu(isrc, cpu_apic_ids[cpu]);
mtx_unlock(&intr_table_lock);
- }
- return (0);
+ } else
+ error = 0;
+ return (error);
#else
return (EOPNOTSUPP);
#endif
@@ -371,7 +373,7 @@
intrcnt_setname("???", 0);
intrcnt_index = 1;
STAILQ_INIT(&pics);
- mtx_init(&intr_table_lock, "intr sources", NULL, MTX_DEF | MTX_RECURSE);
+ mtx_init(&intr_table_lock, "intr sources", NULL, MTX_DEF);
mtx_init(&intrcnt_lock, "intrcnt", NULL, MTX_SPIN);
}
SYSINIT(intr_init, SI_SUB_INTR, SI_ORDER_FIRST, intr_init, NULL);
@@ -441,14 +443,14 @@
if (!assign_cpu)
return (cpu_apic_ids[0]);
- mtx_lock(&intr_table_lock);
+ mtx_lock_spin(&icu_lock);
apic_id = cpu_apic_ids[current_cpu];
do {
current_cpu++;
if (current_cpu > mp_maxid)
current_cpu = 0;
} while (!(intr_cpus & (1 << current_cpu)));
- mtx_unlock(&intr_table_lock);
+ mtx_unlock_spin(&icu_lock);
return (apic_id);
}
@@ -489,7 +491,6 @@
intr_shuffle_irqs(void *arg __unused)
{
struct intsrc *isrc;
- u_int apic_id;
int i;
/* Don't bother on UP. */
@@ -505,13 +506,17 @@
/*
* If this event is already bound to a CPU,
* then assign the source to that CPU instead
- * of picking one via round-robin.
+ * of picking one via round-robin. Note that
+ * this is careful to only advance the
+ * round-robin if the CPU assignment succeeds.
*/
if (isrc->is_event->ie_cpu != NOCPU)
- apic_id = isrc->is_event->ie_cpu;
- else
- apic_id = intr_next_cpu();
- isrc->is_pic->pic_assign_cpu(isrc, apic_id);
+ (void)isrc->is_pic->pic_assign_cpu(isrc,
+ isrc->is_event->ie_cpu);
+ else if (isrc->is_pic->pic_assign_cpu(isrc,
+ cpu_apic_ids[current_cpu]) == 0)
+ (void)intr_next_cpu();
+
}
}
mtx_unlock(&intr_table_lock);
==== //depot/projects/usb/src/sys/amd64/amd64/io_apic.c#8 (text+ko) ====
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/io_apic.c,v 1.33 2009/06/25 18:13:46 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/io_apic.c,v 1.35 2009/07/06 18:23:00 jhb Exp $");
#include "opt_isa.h"
@@ -120,7 +120,7 @@
static int ioapic_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
static void ioapic_resume(struct pic *pic);
-static void ioapic_assign_cpu(struct intsrc *isrc, u_int apic_id);
+static int ioapic_assign_cpu(struct intsrc *isrc, u_int apic_id);
static void ioapic_program_intpin(struct ioapic_intsrc *intpin);
static STAILQ_HEAD(,ioapic) ioapic_list = STAILQ_HEAD_INITIALIZER(ioapic_list);
@@ -322,12 +322,12 @@
mtx_unlock_spin(&icu_lock);
}
-static void
+static int
ioapic_assign_cpu(struct intsrc *isrc, u_int apic_id)
{
struct ioapic_intsrc *intpin = (struct ioapic_intsrc *)isrc;
struct ioapic *io = (struct ioapic *)isrc->is_pic;
- u_int old_vector;
+ u_int old_vector, new_vector;
u_int old_id;
/*
@@ -342,14 +342,20 @@
old_vector = intpin->io_vector;
old_id = intpin->io_cpu;
if (old_vector && apic_id == old_id)
- return;
+ return (0);
/*
* Allocate an APIC vector for this interrupt pin. Once
* we have a vector we program the interrupt pin.
*/
+ new_vector = apic_alloc_vector(apic_id, intpin->io_irq);
+ if (new_vector == 0)
+ return (ENOSPC);
+
intpin->io_cpu = apic_id;
- intpin->io_vector = apic_alloc_vector(apic_id, intpin->io_irq);
+ intpin->io_vector = new_vector;
+ if (isrc->is_handlers > 0)
+ apic_enable_vector(intpin->io_cpu, intpin->io_vector);
if (bootverbose) {
printf("ioapic%u: routing intpin %u (", io->io_id,
intpin->io_intpin);
@@ -362,8 +368,12 @@
* Free the old vector after the new one is established. This is done
* to prevent races where we could miss an interrupt.
*/
- if (old_vector)
+ if (old_vector) {
+ if (isrc->is_handlers > 0)
+ apic_disable_vector(old_id, old_vector);
apic_free_vector(old_id, old_vector, intpin->io_irq);
+ }
+ return (0);
}
static void
@@ -372,7 +382,9 @@
struct ioapic_intsrc *intpin = (struct ioapic_intsrc *)isrc;
if (intpin->io_vector == 0)
- ioapic_assign_cpu(isrc, intr_next_cpu());
+ 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);
}
@@ -496,7 +508,7 @@
io->io_pic = ioapic_template;
mtx_lock_spin(&icu_lock);
io->io_id = next_id++;
- io->io_apic_id = ioapic_read(apic, IOAPIC_ID) >> APIC_ID_SHIFT;
+ io->io_apic_id = ioapic_read(apic, IOAPIC_ID) >> APIC_ID_SHIFT;
if (apic_id != -1 && io->io_apic_id != apic_id) {
ioapic_write(apic, IOAPIC_ID, apic_id << APIC_ID_SHIFT);
mtx_unlock_spin(&icu_lock);
@@ -730,7 +742,7 @@
if (pin >= io->io_numintr || trigger == INTR_TRIGGER_CONFORM)
return (EINVAL);
if (io->io_pins[pin].io_irq >= NUM_IO_INTS)
- return (EINVAL);
+ return (EINVAL);
edgetrigger = (trigger == INTR_TRIGGER_EDGE);
if (io->io_pins[pin].io_edgetrigger == edgetrigger)
return (0);
==== //depot/projects/usb/src/sys/amd64/amd64/local_apic.c#18 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.57 2009/06/24 19:16:48 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.58 2009/07/01 17:20:07 jhb Exp $");
#include "opt_hwpmc_hooks.h"
#include "opt_kdtrace.h"
@@ -139,7 +139,7 @@
};
-static u_int32_t lapic_timer_divisors[] = {
+static u_int32_t lapic_timer_divisors[] = {
APIC_TDCR_1, APIC_TDCR_2, APIC_TDCR_4, APIC_TDCR_8, APIC_TDCR_16,
APIC_TDCR_32, APIC_TDCR_64, APIC_TDCR_128
};
@@ -797,7 +797,7 @@
return (vector + APIC_IO_INTS);
}
mtx_unlock_spin(&icu_lock);
- panic("Couldn't find an APIC vector for IRQ %u", irq);
+ return (0);
}
/*
@@ -1058,7 +1058,7 @@
static SLIST_HEAD(, apic_enumerator) enumerators =
SLIST_HEAD_INITIALIZER(enumerators);
static struct apic_enumerator *best_enum;
-
+
void
apic_register_enumerator(struct apic_enumerator *enumerator)
{
==== //depot/projects/usb/src/sys/amd64/amd64/machdep.c#21 (text+ko) ====
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.703 2009/06/23 22:42:39 jeff Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.704 2009/07/06 18:10:27 jhb Exp $");
#include "opt_atalk.h"
#include "opt_atpic.h"
@@ -100,8 +100,9 @@
#ifndef KDB
#error KDB must be enabled in order for DDB to work!
#endif
+#include <ddb/ddb.h>
+#include <ddb/db_sym.h>
#endif
-#include <ddb/ddb.h>
#include <net/netisr.h>
@@ -1083,6 +1084,30 @@
IDTVEC(xmm), IDTVEC(dblfault),
IDTVEC(fast_syscall), IDTVEC(fast_syscall32);
+#ifdef DDB
+/*
+ * Display the index and function name of any IDT entries that don't use
+ * the default 'rsvd' entry point.
+ */
+DB_SHOW_COMMAND(idt, db_show_idt)
+{
+ struct gate_descriptor *ip;
+ int idx;
+ uintptr_t func;
+
+ ip = idt;
+ for (idx = 0; idx < NIDT && !db_pager_quit; idx++) {
+ func = ((long)ip->gd_hioffset << 16 | ip->gd_looffset);
+ if (func != (uintptr_t)&IDTVEC(rsvd)) {
+ db_printf("%3d\t", idx);
+ db_printsym(func, DB_STGY_PROC);
+ db_printf("\n");
+ }
+ ip++;
+ }
+}
+#endif
+
void
sdtossd(sd, ssd)
struct user_segment_descriptor *sd;
==== //depot/projects/usb/src/sys/amd64/amd64/msi.c#10 (text+ko) ====
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.12 2009/06/25 18:13:46 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.14 2009/07/06 18:23:00 jhb Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -113,6 +113,8 @@
u_int msi_vector:8; /* IDT vector. */
u_int msi_cpu:8; /* Local APIC ID. (g) */
u_int msi_count:8; /* Messages in this group. (g) */
+ u_int msi_maxcount:8; /* Alignment for this group. (g) */
+ int *msi_irqs; /* Group's IRQ list. (g) */
};
static void msi_create_source(void);
@@ -125,7 +127,7 @@
static int msi_source_pending(struct intsrc *isrc);
static int msi_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
-static void msi_assign_cpu(struct intsrc *isrc, u_int apic_id);
+static int msi_assign_cpu(struct intsrc *isrc, u_int apic_id);
struct pic msi_pic = { msi_enable_source, msi_disable_source, msi_eoi_source,
msi_enable_intr, msi_disable_intr, msi_vector,
@@ -195,39 +197,72 @@
return (ENODEV);
}
-static void
+static int
msi_assign_cpu(struct intsrc *isrc, u_int apic_id)
{
- struct msi_intsrc *msi = (struct msi_intsrc *)isrc;
+ struct msi_intsrc *sib, *msi = (struct msi_intsrc *)isrc;
int old_vector;
u_int old_id;
- int vector;
+ int i, vector;
+
+ /*
+ * Only allow CPUs to be assigned to the first message for an
+ * MSI group.
+ */
+ if (msi->msi_first != msi)
+ return (EINVAL);
/* Store information to free existing irq. */
old_vector = msi->msi_vector;
old_id = msi->msi_cpu;
if (old_id == apic_id)
- return;
- if (!msi->msi_msix && msi->msi_first->msi_count > 1)
- return;
+ return (0);
- /* Allocate IDT vector on this cpu. */
- vector = apic_alloc_vector(apic_id, msi->msi_irq);
+ /* Allocate IDT vectors on this cpu. */
+ if (msi->msi_count > 1) {
+ KASSERT(msi->msi_msix == 0, ("MSI-X message group"));
+ vector = apic_alloc_vectors(apic_id, msi->msi_irqs,
+ msi->msi_count, msi->msi_maxcount);
+ } else
+ vector = apic_alloc_vector(apic_id, msi->msi_irq);
if (vector == 0)
- return; /* XXX alloc_vector panics on failure. */
+ return (ENOSPC);
+
msi->msi_cpu = apic_id;
msi->msi_vector = vector;
+ if (msi->msi_intsrc.is_handlers > 0)
+ apic_enable_vector(msi->msi_cpu, msi->msi_vector);
if (bootverbose)
printf("msi: Assigning %s IRQ %d to local APIC %u vector %u\n",
msi->msi_msix ? "MSI-X" : "MSI", msi->msi_irq,
msi->msi_cpu, msi->msi_vector);
+ for (i = 1; i < msi->msi_count; i++) {
+ sib = (struct msi_intsrc *)intr_lookup_source(msi->msi_irqs[i]);
+ sib->msi_cpu = apic_id;
+ sib->msi_vector = vector + i;
+ if (sib->msi_intsrc.is_handlers > 0)
+ apic_enable_vector(sib->msi_cpu, sib->msi_vector);
+ if (bootverbose)
+ printf(
+ "msi: Assigning MSI IRQ %d to local APIC %u vector %u\n",
+ sib->msi_irq, sib->msi_cpu, sib->msi_vector);
+ }
pci_remap_msi_irq(msi->msi_dev, msi->msi_irq);
/*
* Free the old vector after the new one is established. This is done
* to prevent races where we could miss an interrupt.
*/
+ if (msi->msi_intsrc.is_handlers > 0)
+ apic_disable_vector(old_id, old_vector);
apic_free_vector(old_id, old_vector, msi->msi_irq);
+ for (i = 1; i < msi->msi_count; i++) {
+ sib = (struct msi_intsrc *)intr_lookup_source(msi->msi_irqs[i]);
+ if (sib->msi_intsrc.is_handlers > 0)
+ apic_disable_vector(old_id, old_vector + i);
+ apic_free_vector(old_id, old_vector + i, msi->msi_irqs[i]);
+ }
+ return (0);
}
void
@@ -268,7 +303,7 @@
msi_last_irq++;
mtx_unlock(&msi_lock);
- msi = malloc(sizeof(struct msi_intsrc), M_MSI, M_WAITOK | M_ZERO);
+ msi = malloc(sizeof(struct msi_intsrc), M_MSI, M_WAITOK | M_ZERO);
msi->msi_intsrc.is_pic = &msi_pic;
msi->msi_irq = irq;
intr_register_source(&msi->msi_intsrc);
@@ -276,21 +311,22 @@
}
/*
- * Try to allocate 'count' interrupt sources with contiguous IDT values. If
- * we allocate any new sources, then their IRQ values will be at the end of
- * the irqs[] array, with *newirq being the index of the first new IRQ value
- * and *newcount being the number of new IRQ values added.
+ * Try to allocate 'count' interrupt sources with contiguous IDT values.
*/
int
msi_alloc(device_t dev, int count, int maxcount, int *irqs)
{
struct msi_intsrc *msi, *fsrc;
u_int cpu;
- int cnt, i, vector;
+ int cnt, i, *mirqs, vector;
if (!msi_enabled)
return (ENXIO);
+ if (count > 1)
+ mirqs = malloc(count * sizeof(*mirqs), M_MSI, M_WAITOK);
+ else
+ mirqs = NULL;
again:
mtx_lock(&msi_lock);
@@ -317,6 +353,7 @@
/* If we would exceed the max, give up. */
if (i + (count - cnt) > FIRST_MSI_INT + NUM_MSI_INTS) {
mtx_unlock(&msi_lock);
+ free(mirqs, M_MSI);
return (ENXIO);
}
mtx_unlock(&msi_lock);
@@ -337,6 +374,7 @@
vector = apic_alloc_vectors(cpu, irqs, count, maxcount);
if (vector == 0) {
mtx_unlock(&msi_lock);
+ free(mirqs, M_MSI);
return (ENOSPC);
}
@@ -356,6 +394,10 @@
("dead MSI has handlers"));
}
fsrc->msi_count = count;
+ fsrc->msi_maxcount = maxcount;
+ if (count > 1)
+ bcopy(irqs, mirqs, count * sizeof(*mirqs));
+ fsrc->msi_irqs = mirqs;
mtx_unlock(&msi_lock);
return (0);
@@ -413,6 +455,9 @@
apic_free_vector(first->msi_cpu, first->msi_vector, first->msi_irq);
first->msi_vector = 0;
first->msi_count = 0;
+ first->msi_maxcount = 0;
+ free(first->msi_irqs, M_MSI);
+ first->msi_irqs = NULL;
mtx_unlock(&msi_lock);
return (0);
@@ -498,15 +543,23 @@
/* Allocate an IDT vector. */
cpu = intr_next_cpu();
vector = apic_alloc_vector(cpu, i);
+ if (vector == 0) {
+ mtx_unlock(&msi_lock);
+ return (ENOSPC);
+ }
if (bootverbose)
printf("msi: routing MSI-X IRQ %d to local APIC %u vector %u\n",
msi->msi_irq, cpu, vector);
-
+
/* Setup source. */
msi->msi_cpu = cpu;
msi->msi_dev = dev;
+ msi->msi_first = msi;
msi->msi_vector = vector;
msi->msi_msix = 1;
+ msi->msi_count = 1;
+ msi->msi_maxcount = 1;
+ msi->msi_irqs = NULL;
KASSERT(msi->msi_intsrc.is_handlers == 0, ("dead MSI-X has handlers"));
mtx_unlock(&msi_lock);
@@ -536,10 +589,13 @@
KASSERT(msi->msi_dev != NULL, ("unowned message"));
/* Clear out the message. */
+ msi->msi_first = NULL;
msi->msi_dev = NULL;
apic_free_vector(msi->msi_cpu, msi->msi_vector, msi->msi_irq);
msi->msi_vector = 0;
msi->msi_msix = 0;
+ msi->msi_count = 0;
+ msi->msi_maxcount = 0;
mtx_unlock(&msi_lock);
return (0);
==== //depot/projects/usb/src/sys/amd64/amd64/pmap.c#24 (text+ko) ====
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.661 2009/06/14 19:51:43 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.662 2009/07/06 18:43:42 alc Exp $");
/*
* Manages physical address maps.
@@ -2218,11 +2218,19 @@
/*
* Invalidate the 2MB page mapping and return "failure" if the
* mapping was never accessed or the allocation of the new
- * page table page fails.
+ * page table page fails. If the 2MB page mapping belongs to
+ * the direct map region of the kernel's address space, then
+ * the page allocation request specifies the highest possible
+ * priority (VM_ALLOC_INTERRUPT). Otherwise, the priority is
+ * normal. Page table pages are preallocated for every other
+ * part of the kernel address space, so the direct map region
+ * is the only part of the kernel address space that must be
+ * handled here.
*/
if ((oldpde & PG_A) == 0 || (mpte = vm_page_alloc(NULL,
- pmap_pde_pindex(va), VM_ALLOC_NOOBJ | VM_ALLOC_NORMAL |
- VM_ALLOC_WIRED)) == NULL) {
+ pmap_pde_pindex(va), (va >= DMAP_MIN_ADDRESS && va <
+ DMAP_MAX_ADDRESS ? VM_ALLOC_INTERRUPT : VM_ALLOC_NORMAL) |
+ VM_ALLOC_NOOBJ | VM_ALLOC_WIRED)) == NULL) {
free = NULL;
pmap_remove_pde(pmap, pde, trunc_2mpage(va), &free);
pmap_invalidate_page(pmap, trunc_2mpage(va));
==== //depot/projects/usb/src/sys/amd64/conf/GENERIC#29 (text+ko) ====
@@ -16,7 +16,7 @@
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
-# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.529 2009/06/14 18:01:35 ed Exp $
+# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.530 2009/07/02 18:24:37 ed Exp $
cpu HAMMER
ident GENERIC
@@ -65,6 +65,7 @@
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
+options P1003_1B_SEMAPHORES # POSIX-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed.
options KBD_INSTALL_CDEV # install a CDEV entry in /dev
==== //depot/projects/usb/src/sys/amd64/include/intr_machdep.h#9 (text+ko) ====
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD: src/sys/amd64/include/intr_machdep.h,v 1.23 2009/06/25 20:35:46 jhb Exp $
+ * $FreeBSD: src/sys/amd64/include/intr_machdep.h,v 1.24 2009/07/01 17:20:07 jhb Exp $
*/
#ifndef __MACHINE_INTR_MACHDEP_H__
@@ -93,7 +93,7 @@
void (*pic_resume)(struct pic *);
int (*pic_config_intr)(struct intsrc *, enum intr_trigger,
enum intr_polarity);
- void (*pic_assign_cpu)(struct intsrc *, u_int apic_id);
+ int (*pic_assign_cpu)(struct intsrc *, u_int apic_id);
STAILQ_ENTRY(pic) pics;
};
==== //depot/projects/usb/src/sys/amd64/include/param.h#8 (text+ko) ====
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)param.h 8.1 (Berkeley) 6/10/93
- * $FreeBSD: src/sys/amd64/include/param.h,v 1.29 2009/06/08 16:43:40 alc Exp $
+ * $FreeBSD: src/sys/amd64/include/param.h,v 1.30 2009/07/05 17:45:48 sam Exp $
*/
/*
@@ -47,12 +47,6 @@
* Round p (pointer or byte index) up to a correctly-aligned value
* for all data types (int, long, ...). The result is u_long and
* must be cast to any desired pointer type.
- *
- * ALIGNED_POINTER is a boolean macro that checks whether an address
- * is valid to fetch data elements of type t from on this architecture.
- * This does not reflect the optimal alignment, just the possibility
- * (within reasonable limits).
- *
*/
#ifndef _ALIGNBYTES
#define _ALIGNBYTES (sizeof(long) - 1)
@@ -60,9 +54,6 @@
#ifndef _ALIGN
#define _ALIGN(p) (((u_long)(p) + _ALIGNBYTES) &~ _ALIGNBYTES)
#endif
-#ifndef _ALIGNED_POINTER
-#define _ALIGNED_POINTER(p,t) ((((u_long)(p)) & (sizeof(t)-1)) == 0)
-#endif
#ifndef _NO_NAMESPACE_POLLUTION
@@ -87,7 +78,13 @@
#define ALIGNBYTES _ALIGNBYTES
#define ALIGN(p) _ALIGN(p)
-#define ALIGNED_POINTER(p,t) _ALIGNED_POINTER(p,t)
+/*
+ * ALIGNED_POINTER is a boolean macro that checks whether an address
+ * is valid to fetch data elements of type t from on this architecture.
+ * This does not reflect the optimal alignment, just the possibility
+ * (within reasonable limits).
+ */
+#define ALIGNED_POINTER(p, t) 1
/*
* CACHE_LINE_SIZE is the compile-time maximum cache line size for an
==== //depot/projects/usb/src/sys/amd64/isa/atpic.c#5 (text+ko) ====
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/isa/atpic.c,v 1.24 2008/03/20 21:53:27 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/isa/atpic.c,v 1.25 2009/07/01 17:20:07 jhb Exp $");
#include "opt_auto_eoi.h"
#include "opt_isa.h"
@@ -143,7 +143,7 @@
static int atpic_source_pending(struct intsrc *isrc);
static int atpic_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
-static void atpic_assign_cpu(struct intsrc *isrc, u_int apic_id);
+static int atpic_assign_cpu(struct intsrc *isrc, u_int apic_id);
static void i8259_init(struct atpic *pic, int slave);
static struct atpic atpics[] = {
@@ -357,7 +357,7 @@
return (0);
}
-static void
+static int
atpic_assign_cpu(struct intsrc *isrc, u_int apic_id)
{
==== //depot/projects/usb/src/sys/arm/at91/at91_machdep.c#4 (text+ko) ====
@@ -46,7 +46,7 @@
#include "opt_msgbuf.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/at91_machdep.c,v 1.5 2009/06/23 22:42:39 jeff Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/at91_machdep.c,v 1.6 2009/07/01 20:07:44 raj Exp $");
#define _ARM32_BUS_DMA_PRIVATE
#include <sys/param.h>
@@ -301,6 +301,11 @@
/* Map the vector page. */
pmap_map_entry(l1pagetable, ARM_VECTORS_HIGH, systempage.pv_pa,
VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+
+ /* Map the DPCPU pages */
+ pmap_map_chunk(l1pagetable, dpcpu.pv_va, dpcpu.pv_pa, DPCPU_SIZE,
+ VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+
/* Map the stack pages */
pmap_map_chunk(l1pagetable, irqstack.pv_va, irqstack.pv_pa,
IRQ_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
==== //depot/projects/usb/src/sys/arm/include/param.h#4 (text+ko) ====
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* from: @(#)param.h 5.8 (Berkeley) 6/28/91
- * $FreeBSD: src/sys/arm/include/param.h,v 1.15 2009/04/20 12:59:23 rwatson Exp $
+ * $FreeBSD: src/sys/arm/include/param.h,v 1.16 2009/07/05 17:45:48 sam Exp $
*/
/*
@@ -80,6 +80,13 @@
#define ALIGNBYTES _ALIGNBYTES
#define ALIGN(p) _ALIGN(p)
+/*
+ * ALIGNED_POINTER is a boolean macro that checks whether an address
+ * is valid to fetch data elements of type t from on this architecture.
+ * This does not reflect the optimal alignment, just the possibility
+ * (within reasonable limits).
+ */
+#define ALIGNED_POINTER(p, t) ((((unsigned)(p)) & (sizeof(t)-1)) == 0)
/*
* CACHE_LINE_SIZE is the compile-time maximum cache line size for an
==== //depot/projects/usb/src/sys/arm/mv/mv_machdep.c#6 (text+ko) ====
@@ -39,7 +39,7 @@
#include "opt_ddb.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/mv/mv_machdep.c,v 1.5 2009/06/23 22:42:39 jeff Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/mv/mv_machdep.c,v 1.6 2009/07/01 20:07:44 raj Exp $");
#define _ARM32_BUS_DMA_PRIVATE
#include <sys/param.h>
@@ -528,9 +528,9 @@
L2_TABLE_SIZE_REAL * l2size,
VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
- /* Map allocated stacks and msgbuf */
- pmap_map_chunk(l1pagetable, irqstack.pv_va, irqstack.pv_pa,
- freemempos - irqstack.pv_va,
+ /* Map allocated DPCPU, stacks and msgbuf */
+ pmap_map_chunk(l1pagetable, dpcpu.pv_va, dpcpu.pv_pa,
+ freemempos - dpcpu.pv_va,
VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
/* Link and map the vector page */
==== //depot/projects/usb/src/sys/arm/sa11x0/assabet_machdep.c#9 (text+ko) ====
@@ -47,7 +47,7 @@
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/sa11x0/assabet_machdep.c,v 1.29 2009/06/23 22:42:39 jeff Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/sa11x0/assabet_machdep.c,v 1.30 2009/07/01 20:07:44 raj Exp $");
#include "opt_md.h"
@@ -313,6 +313,9 @@
pmap_map_chunk(l1pagetable, KERNBASE, KERNBASE,
((uint32_t)lastaddr - KERNBASE), VM_PROT_READ|VM_PROT_WRITE,
PTE_CACHE);
+ /* Map the DPCPU pages */
+ pmap_map_chunk(l1pagetable, dpcpu.pv_va, dpcpu.pv_pa, DPCPU_SIZE,
+ VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
/* Map the stack pages */
pmap_map_chunk(l1pagetable, irqstack.pv_va, irqstack.pv_pa,
IRQ_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
==== //depot/projects/usb/src/sys/conf/files#72 (text+ko) ====
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list