summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/xhci.c
diff options
context:
space:
mode:
authordlg <dlg@openbsd.org>2020-06-24 00:40:53 +0000
committerdlg <dlg@openbsd.org>2020-06-24 00:40:53 +0000
commit83935807bd8e77cc358e237abec3a4d24d49a92b (patch)
treea4911652c444a64d8815241f31ea7becb7d5e447 /sys/dev/usb/xhci.c
parentenable wg(4). (diff)
downloadwireguard-openbsd-83935807bd8e77cc358e237abec3a4d24d49a92b.tar.xz
wireguard-openbsd-83935807bd8e77cc358e237abec3a4d24d49a92b.zip
remove ifdeffed out code for redistributing pyro eq interrupts over cpus.
when sparc64 attaches cpus early during boot, it really just allocates the software state for them (ie, the devices and the cpu_info structs) and fills them in with information from openfirmware, but it doesnt actually spin them up in a physical sense until just before root is mounted. in between that, we now set up pyro with an msi event queue per cpu, and target the interrupts for those event queues at the different cpus. if a device generates an msi interrupt before the cpus are spun up, pyro will fire an interrupt at those cpus, but cos they're not running yet, they don't handle the interrupt, and the event queue never gets processed. because the msi interrupt state is never cleared by the pyro interrupt handler because the cpu didn't run it, any further msi interrupts from that pci device don't cause the eq interrupt to fire again, so it gets stuck. one approach to dealing with this is to target all the event queues that pyro sets up at the boot cpu, and once the other cpus are running we go through and retarget the event queue interrupts at the different cpus. this means the boot cpu works on the other cpus behalf until they're running, and it avoids the eq interrupts being ignored before the other cpus are running. another approach is to spin the cpus up when they're attached, so they'll be set up to process early pyro interrupts, even if they sit at splhigh until after autoconf has run. i had a quick go at this and it didn't go well. the approach we went with was to avoid having the device in question generate interrupts early. i left the redistributing code in the tree so people might discover it if needed, or at least see this description of what's happening. kettenis@ seemed ok with leaving the code in jmatthew@s pci_intr_establish_cpu commit, but removing it after. this is that removal.
Diffstat (limited to 'sys/dev/usb/xhci.c')
0 files changed, 0 insertions, 0 deletions