Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Sep 2023 10:30:16 +0200
From:      John Hay <john@sanren.ac.za>
To:        freebsd-drivers@freebsd.org
Subject:   Re: debugging a msi interrupt panic
Message-ID:  <CAGv8uarzr6QBmk3Xoi1XbrFqPGb_=-O_AaVs41dNuKjPhz-RKw@mail.gmail.com>
In-Reply-To: <CAGv8uapeZ2VaBAsf76FAk-335o5FDw935qd1JTjDEEArH7s6tA@mail.gmail.com>
References:  <CAGv8uapeZ2VaBAsf76FAk-335o5FDw935qd1JTjDEEArH7s6tA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--00000000000045eb7206062ac5dc
Content-Type: text/plain; charset="UTF-8"

Hi,

I found the cause of the panics and thought I should give feedback here.

MSI interrupt vectors have to be aligned to the size of the allocation,
which have to be in powers of 2 up to a maximum of 32 vectors.

native_apic_alloc_vectors(), which is used by pci_alloc_msi(), does not
properly align the vectors that it allocates. It does an aligned check, but
then after that adds APIC_IO_INTS, which is 48, and so the alignment is
lost. So allocating smaller numbers of vectors would work because 48 is a
multiple of 16.

If you allocate 32 MSI interrupts, the pcie card just ignores the bottom 5
bits of the vector that was written to its MSI_DATA register, so in my case
where native_apic_alloc_vectors() allocated a base vector of 0x50, the card
ignores bit 4 and generates interrupt vectors from 0x40 to 0x5f.

I have opened a bug report about it:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=274074

Regards

John


On Fri, 22 Sept 2023 at 13:00, John Hay <john@sanren.ac.za> wrote:

> Hi,
>
> How do one debug msi interrupts on FreeBSD when writing a device driver?
>
> I'm writing a driver for a OCP TimeCard. The card has several different
> functions, each "tied" to a specific msi interrupt. So it would be useful
> to use multiple msi interrupts. The PCIe functionality is a Xilinx AXI PCIe
> blob, with 32 MSI interrupts. It does not have MSI-X capability.
>
> <snip>
> # pciconf -lbc none1@pci0:1:0:0:
> none0@pci0:1:0:0: class=0x058000 rev=0x00 hdr=0x00 vendor=0x1d9b
> device=0x0400 subvendor=0x10ee subdevice=0x0007
>     bar   [10] = type Memory, range 32, base 0xf4000000, size 33554432,
> enabled
>     cap 01[40] = powerspec 3  supports D0 D3  current D0
>     cap 05[48] = MSI supports 32 messages, 64 bit
>     cap 10[60] = PCI-Express 2 endpoint max data 256(256) NS
>                  max read 512
>                  link x1(x1) speed 2.5(2.5) ASPM disabled(L0s)
>     ecap 0003[100] = Serial 1 0000000000000000
> </snip>
>
> Currently in attach, I'm doing the following (error checking removed):
>
> <snip>
> pci_enable_busmaster(dev); /* msi irq needs it enabled, at least for the
> AXI core */
> sc->sc_msi = pci_msi_count(dev);
> pci_alloc_msi(dev, &sc->sc_msi)
> loop for each function /* currently just a single iteration to get one
> function working */
>    port->pp_irid = port->intr_num + 1; /* msi irq no starts at one */
>    port->pp_ires = bus_alloc_resource_any(dev, SYS_RES_IRQ,
> &port->pp_irid, RF_ACTIVE | RF_SHAREABLE);
>    bus_setup_intr(dev, port->pp_ires, INTR_TYPE_TTY | INTR_MPSAFE,
> timecard_intr, NULL, port, &port->p_ihandle)
> </snip>
>
> I did define a variable timecard_intr_count that timecard_intr() should
> increment, but it does not change, so timecard_intr() probably does not get
> called.
>
> Here is the console output of the panic and a show apic and show lapic.
> The driver is not compiled in, but loaded later manually.
>
> <snip>
> pci0: driver added
> found-> vendor=0x8086, dev=0x1e3a, revid=0x04
>         domain=0, bus=0, slot=22, func=0
>         class=07-80-00, hdrtype=0x00, mfdev=1
>         cmdreg=0x0006, statreg=0x0010, cachelnsz=0 (dwords)
>         lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 ns)
>         intpin=a, irq=16
>         powerspec 3  supports D0 D3  current D0
>         MSI supports 1 message, 64 bit
> pci0:0:22:0: reprobing on driver added
> timecard0: TimeCard Probe
> Vendor ID : 0x8086
> Device ID : 0x1e3a
> pci1: driver added
> found-> vendor=0x1d9b, dev=0x0400, revid=0x00
>         domain=0, bus=1, slot=0, func=0
>         class=05-80-00, hdrtype=0x00, mfdev=0
>         cmdreg=0x0002, statreg=0x0010, cachelnsz=16 (dwords)
>         lattimer=0x00 (0 ns), mingnt=0x00 (0 ns), maxlat=0x00 (0 ns)
>         powerspec 3  supports D0 D3  current D0
>         MSI supports 32 messages, 64 bit
> pci0:1:0:0: reprobing on driver added
> timecard0: TimeCard Probe
> Vendor ID : 0x1d9b
> Device ID : 0x400
> We've got the TimeCard, probe successful!
> timecard0: TimeCard Probe
> Vendor ID : 0x1d9b
> Device ID : 0x400
> We've got the TimeCard, probe successful!
> timecard0: <TimeCard> mem 0xf4000000-0xf5ffffff at device 0.0 on pci1
> TimeCard Attach for : deviceID : 0x4001d9b
> Address of timecard_intr_count 0xffffffff8314e400
> timecard0: attempting to allocate 32 MSI vectors (32 supported)
> msi: routing MSI IRQ 38 to local APIC 4 vector 80
> msi: routing MSI IRQ 39 to local APIC 4 vector 81
> msi: routing MSI IRQ 40 to local APIC 4 vector 82
> msi: routing MSI IRQ 41 to local APIC 4 vector 83
> msi: routing MSI IRQ 42 to local APIC 4 vector 84
> msi: routing MSI IRQ 43 to local APIC 4 vector 85
> msi: routing MSI IRQ 44 to local APIC 4 vector 86
> msi: routing MSI IRQ 45 to local APIC 4 vector 87
> msi: routing MSI IRQ 46 to local APIC 4 vector 88
> msi: routing MSI IRQ 47 to local APIC 4 vector 89
> msi: routing MSI IRQ 48 to local APIC 4 vector 90
> msi: routing MSI IRQ 49 to local APIC 4 vector 91
> msi: routing MSI IRQ 50 to local APIC 4 vector 92
> msi: routing MSI IRQ 51 to local APIC 4 vector 93
> msi: routing MSI IRQ 52 to local APIC 4 vector 94
> msi: routing MSI IRQ 53 to local APIC 4 vector 95
> msi: routing MSI IRQ 54 to local APIC 4 vector 96
> msi: routing MSI IRQ 55 to local APIC 4 vector 97
> msi: routing MSI IRQ 56 to local APIC 4 vector 98
> msi: routing MSI IRQ 57 to local APIC 4 vector 99
> msi: routing MSI IRQ 58 to local APIC 4 vector 100
> msi: routing MSI IRQ 59 to local APIC 4 vector 101
> msi: routing MSI IRQ 60 to local APIC 4 vector 102
> msi: routing MSI IRQ 61 to local APIC 4 vector 103
> msi: routing MSI IRQ 62 to local APIC 4 vector 104
> msi: routing MSI IRQ 63 to local APIC 4 vector 105
> msi: routing MSI IRQ 64 to local APIC 4 vector 106
> msi: routing MSI IRQ 65 to local APIC 4 vector 107
> msi: routing MSI IRQ 66 to local APIC 4 vector 108
> msi: routing MSI IRQ 67 to local APIC 4 vector 109
> msi: routing MSI IRQ 68 to local APIC 4 vector 110
> msi: routing MSI IRQ 69 to local APIC 4 vector 111
> timecard0: using IRQs 38-69 for MSI
> TimeCard msi 32
> rman iomem start f4000000, end f5ffffff, size 2000000
> timecard_corelist_read did not find list, using fb list 1
> nports 1
> Start with uart 0 0
> irq 41, irid 4
>
>
> Fatal trap 30: reserved (unknown) fault while in kernel mode
> cpuid = 2; apic id = 04
> port irq rid 4
> instruction pointer     = 0x20:0xffffffff804dda2d
> stack pointer           = 0x28:0xfffffe001b1d8de0
> TimeCard device loaded.
> pci2: driver added
> pci3: driver added
> pci4: driver added
> frame pointer           = 0x28:0xfffffe001b1d8e10
> code segment            = base 0x0, limit 0xfffff, type 0x1b
> pci5: driver added
>                         = DPL 0, pres 1, long 1, def32 0, gran 1
> processor eflags        = interrupt enabled, IOPL = 0
> current process         = 11 (idle: cpu2)
> trap number             = 30
> panic: reserved (unknown) fault
> cpuid = 2
> time = 1695375919
> KDB: stack backtrace:
> db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame
> 0xfffffe001b1d8c00
> vpanic() at vpanic+0x151/frame 0xfffffe001b1d8c50
> panic() at panic+0x43/frame 0xfffffe001b1d8cb0
> trap_fatal() at trap_fatal+0x387/frame 0xfffffe001b1d8d10
> calltrap() at calltrap+0x8/frame 0xfffffe001b1d8d10
> --- trap 0x1e, rip = 0xffffffff804dda2d, rsp = 0xfffffe001b1d8de0, rbp =
> 0xfffffe001b1d8e10 ---
> acpi_cpu_idle() at acpi_cpu_idle+0x28d/frame 0xfffffe001b1d8e10
> cpu_idle_acpi() at cpu_idle_acpi+0x4d/frame 0xfffffe001b1d8e30
> cpu_idle() at cpu_idle+0xac/frame 0xfffffe001b1d8e50
> sched_idletd() at sched_idletd+0x4b1/frame 0xfffffe001b1d8ef0
> fork_exit() at fork_exit+0x80/frame 0xfffffe001b1d8f30
> fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe001b1d8f30
> --- trap 0xe0c2545f, rip = 0x8f4a0c76246ffed9, rsp = 0x670c1cf091ea5e5b,
> rbp = 0x57639a151e2b2985 ---
> KDB: enter: panic
> [ thread pid 11 tid 100005 ]
> Stopped at      kdb_enter+0x37: movq    $0,0x129840e(%rip)
> db> x/wx timecard_intr_count
> timecard_intr_count:    0
> db> show apic
> Interrupts bound to lapic 0
> vec 0x30 -> IRQ 9
> vec 0x31 -> IRQ 28
> vec 0x32 -> IRQ 31
> vec 0x33 -> IRQ 24
> vec 0x34 -> IRQ 29
> vec 0x35 -> IRQ 30
> vec 0x36 -> IRQ 8
> vec 0x37 -> IRQ 16
> vec 0x38 -> IRQ 36
> vec 0x39 -> IRQ 1
> vec 0xef -> lapic timer
> Interrupts bound to lapic 2
> vec 0x30 -> IRQ 25
> vec 0x31 -> IRQ 33
> vec 0x32 -> IRQ 23
> vec 0x33 -> IRQ 18
> vec 0xef -> lapic timer
> Interrupts bound to lapic 4
> vec 0x30 -> IRQ 26
> vec 0x31 -> IRQ 0
> vec 0x32 -> IRQ 34
> vec 0x33 -> IRQ 37
> vec 0x50 -> IRQ 38
> vec 0x51 -> IRQ 39
> vec 0x52 -> IRQ 40
> vec 0x53 -> IRQ 41
> vec 0x54 -> IRQ 42
> vec 0x55 -> IRQ 43
> vec 0x56 -> IRQ 44
> vec 0x57 -> IRQ 45
> vec 0x58 -> IRQ 46
> vec 0x59 -> IRQ 47
> vec 0x5a -> IRQ 48
> vec 0x5b -> IRQ 49
> vec 0x5c -> IRQ 50
> vec 0x5d -> IRQ 51
> vec 0x5e -> IRQ 52
> vec 0x5f -> IRQ 53
> vec 0x60 -> IRQ 54
> vec 0x61 -> IRQ 55
> vec 0x62 -> IRQ 56
> vec 0x63 -> IRQ 57
> vec 0x64 -> IRQ 58
> vec 0x65 -> IRQ 59
> vec 0x66 -> IRQ 60
> vec 0x67 -> IRQ 61
> vec 0x68 -> IRQ 62
> vec 0x69 -> IRQ 63
> vec 0x6a -> IRQ 64
> vec 0x6b -> IRQ 65
> vec 0x6c -> IRQ 66
> vec 0x6d -> IRQ 67
> vec 0x6e -> IRQ 68
> vec 0x6f -> IRQ 69
> vec 0xef -> lapic timer
> Interrupts bound to lapic 6
> vec 0x30 -> IRQ 27
> vec 0x31 -> IRQ 32
> vec 0x32 -> IRQ 35
> vec 0x33 -> IRQ 4
> vec 0xef -> lapic timer
> db> show lapic
> lapic ID = 4
> version  = 1.5
> max LVT  = 6
> SVR      = ff (enabled)
> TPR      = 00
> In-service Interrupts:
> isr2: 43
> TMR Interrupts:
> IRR Interrupts:
> irr1: 32 33
> irr2: 43
> irr7: ef
> db>
> </snip>
>
> Regards
>
> John
>
>

--00000000000045eb7206062ac5dc
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Hi,</div><div><br></div><div>I found the cause of the=
 panics and thought I should give feedback here.</div><div><br></div><div>M=
SI interrupt vectors have to be aligned to the size of the allocation, whic=
h have to be in powers of 2 up to a maximum of 32 vectors.</div><div><br></=
div>native_apic_alloc_vectors(), which is used by pci_alloc_msi(), does not=
 properly align the vectors that it allocates. It does an aligned check, bu=
t then after that adds APIC_IO_INTS, which is 48, and so the alignment is l=
ost. So allocating smaller numbers of vectors would work because 48 is a mu=
ltiple of 16.<br><div><br></div><div>If you allocate 32 MSI interrupts, the=
 pcie card just ignores the bottom 5 bits of the vector that was written to=
 its MSI_DATA register, so in my case where native_apic_alloc_vectors() all=
ocated a base vector of 0x50, the card ignores bit 4 and generates interrup=
t vectors from 0x40 to 0x5f.</div><div><br></div><div>I have opened a bug r=
eport about it:</div><div><a href=3D"https://bugs.freebsd.org/bugzilla/show=
_bug.cgi?id=3D274074">https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D2=
74074</a></div><div><br></div><div>Regards</div><div><br></div><div>John</d=
iv><div><br></div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" cla=
ss=3D"gmail_attr">On Fri, 22 Sept 2023 at 13:00, John Hay &lt;<a href=3D"ma=
ilto:john@sanren.ac.za">john@sanren.ac.za</a>&gt; wrote:<br></div><blockquo=
te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px =
solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div>Hi,</div><di=
v><br></div><div>How do one debug msi interrupts on FreeBSD when writing a =
device driver?</div><div><br></div><div>I&#39;m writing a driver for a OCP =
TimeCard. The card has several different functions, each &quot;tied&quot; t=
o a specific msi interrupt. So it would be useful to use multiple msi inter=
rupts. The PCIe functionality is a Xilinx AXI PCIe blob, with 32 MSI interr=
upts. It does not have MSI-X capability.<br></div><div><br></div><div>&lt;s=
nip&gt;<br></div><div># pciconf -lbc none1@pci0:1:0:0:<br>none0@pci0:1:0:0:=
	class=3D0x058000 rev=3D0x00 hdr=3D0x00 vendor=3D0x1d9b device=3D0x0400 sub=
vendor=3D0x10ee subdevice=3D0x0007<br>=C2=A0 =C2=A0 bar =C2=A0 [10] =3D typ=
e Memory, range 32, base 0xf4000000, size 33554432, enabled<br>=C2=A0 =C2=
=A0 cap 01[40] =3D powerspec 3 =C2=A0supports D0 D3 =C2=A0current D0<br>=C2=
=A0 =C2=A0 cap 05[48] =3D MSI supports 32 messages, 64 bit <br>=C2=A0 =C2=
=A0 cap 10[60] =3D PCI-Express 2 endpoint max data 256(256) NS<br>=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0max read 512<br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0link x1(x1) spee=
d 2.5(2.5) ASPM disabled(L0s)<br>=C2=A0 =C2=A0 ecap 0003[100] =3D Serial 1 =
0000000000000000<br></div><div>&lt;/snip&gt;<br></div><div><br></div><div>C=
urrently in attach, I&#39;m doing the following (error checking removed):</=
div><div><br></div><div>&lt;snip&gt;<br></div><div>pci_enable_busmaster(dev=
); /* msi irq needs it enabled, at least for the AXI core */<br></div><div>=
sc-&gt;sc_msi =3D pci_msi_count(dev);</div><div>pci_alloc_msi(dev, &amp;sc-=
&gt;sc_msi)</div><div>loop for each function /* currently just a single ite=
ration to get one function working */<br></div><div>=C2=A0=C2=A0 port-&gt;p=
p_irid =3D port-&gt;intr_num + 1; /* msi irq no starts at one */<br></div><=
div>=C2=A0=C2=A0 port-&gt;pp_ires =3D bus_alloc_resource_any(dev, SYS_RES_I=
RQ, &amp;port-&gt;pp_irid, RF_ACTIVE | RF_SHAREABLE);</div><div>=C2=A0=C2=
=A0 bus_setup_intr(dev, port-&gt;pp_ires, INTR_TYPE_TTY | INTR_MPSAFE, time=
card_intr, NULL, port, &amp;port-&gt;p_ihandle)</div><div>&lt;/snip&gt;</di=
v><div><br></div><div>I did define a variable timecard_intr_count that time=
card_intr() should increment, but it does not change, so timecard_intr() pr=
obably does not get called.</div><div><br></div><div>Here is the console ou=
tput of the panic and a show apic and show lapic. The driver is not compile=
d in, but loaded later manually.</div><div><br></div><div>&lt;snip&gt;</div=
><div>pci0: driver added<br>found-&gt; vendor=3D0x8086, dev=3D0x1e3a, revid=
=3D0x04<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 domain=3D0, bus=3D0, slot=3D22, func=
=3D0<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 class=3D07-80-00, hdrtype=3D0x00, mfdev=
=3D1<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 cmdreg=3D0x0006, statreg=3D0x0010, cach=
elnsz=3D0 (dwords)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 lattimer=3D0x00 (0 ns), m=
ingnt=3D0x00 (0 ns), maxlat=3D0x00 (0 ns)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 in=
tpin=3Da, irq=3D16<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 powerspec 3 =C2=A0support=
s D0 D3 =C2=A0current D0<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 MSI supports 1 mess=
age, 64 bit<br>pci0:0:22:0: reprobing on driver added<br>timecard0: TimeCar=
d Probe<br>Vendor ID : 0x8086<br>Device ID : 0x1e3a<br>pci1: driver added<b=
r>found-&gt; vendor=3D0x1d9b, dev=3D0x0400, revid=3D0x00<br>=C2=A0 =C2=A0 =
=C2=A0 =C2=A0 domain=3D0, bus=3D1, slot=3D0, func=3D0<br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 class=3D05-80-00, hdrtype=3D0x00, mfdev=3D0<br>=C2=A0 =C2=A0 =C2=
=A0 =C2=A0 cmdreg=3D0x0002, statreg=3D0x0010, cachelnsz=3D16 (dwords)<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 lattimer=3D0x00 (0 ns), mingnt=3D0x00 (0 ns), m=
axlat=3D0x00 (0 ns)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 powerspec 3 =C2=A0suppor=
ts D0 D3 =C2=A0current D0<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 MSI supports 32 me=
ssages, 64 bit<br>pci0:1:0:0: reprobing on driver added<br>timecard0: TimeC=
ard Probe<br>Vendor ID : 0x1d9b<br>Device ID : 0x400<br>We&#39;ve got the T=
imeCard, probe successful!<br>timecard0: TimeCard Probe<br>Vendor ID : 0x1d=
9b<br>Device ID : 0x400<br>We&#39;ve got the TimeCard, probe successful!<br=
>timecard0: &lt;TimeCard&gt; mem 0xf4000000-0xf5ffffff at device 0.0 on pci=
1<br>TimeCard Attach for : deviceID : 0x4001d9b<br>Address of timecard_intr=
_count 0xffffffff8314e400<br>timecard0: attempting to allocate 32 MSI vecto=
rs (32 supported)<br>msi: routing MSI IRQ 38 to local APIC 4 vector 80<br>m=
si: routing MSI IRQ 39 to local APIC 4 vector 81<br>msi: routing MSI IRQ 40=
 to local APIC 4 vector 82<br>msi: routing MSI IRQ 41 to local APIC 4 vecto=
r 83<br>msi: routing MSI IRQ 42 to local APIC 4 vector 84<br>msi: routing M=
SI IRQ 43 to local APIC 4 vector 85<br>msi: routing MSI IRQ 44 to local API=
C 4 vector 86<br>msi: routing MSI IRQ 45 to local APIC 4 vector 87<br>msi: =
routing MSI IRQ 46 to local APIC 4 vector 88<br>msi: routing MSI IRQ 47 to =
local APIC 4 vector 89<br>msi: routing MSI IRQ 48 to local APIC 4 vector 90=
<br>msi: routing MSI IRQ 49 to local APIC 4 vector 91<br>msi: routing MSI I=
RQ 50 to local APIC 4 vector 92<br>msi: routing MSI IRQ 51 to local APIC 4 =
vector 93<br>msi: routing MSI IRQ 52 to local APIC 4 vector 94<br>msi: rout=
ing MSI IRQ 53 to local APIC 4 vector 95<br>msi: routing MSI IRQ 54 to loca=
l APIC 4 vector 96<br>msi: routing MSI IRQ 55 to local APIC 4 vector 97<br>=
msi: routing MSI IRQ 56 to local APIC 4 vector 98<br>msi: routing MSI IRQ 5=
7 to local APIC 4 vector 99<br>msi: routing MSI IRQ 58 to local APIC 4 vect=
or 100<br>msi: routing MSI IRQ 59 to local APIC 4 vector 101<br>msi: routin=
g MSI IRQ 60 to local APIC 4 vector 102<br>msi: routing MSI IRQ 61 to local=
 APIC 4 vector 103<br>msi: routing MSI IRQ 62 to local APIC 4 vector 104<br=
>msi: routing MSI IRQ 63 to local APIC 4 vector 105<br>msi: routing MSI IRQ=
 64 to local APIC 4 vector 106<br>msi: routing MSI IRQ 65 to local APIC 4 v=
ector 107<br>msi: routing MSI IRQ 66 to local APIC 4 vector 108<br>msi: rou=
ting MSI IRQ 67 to local APIC 4 vector 109<br>msi: routing MSI IRQ 68 to lo=
cal APIC 4 vector 110<br>msi: routing MSI IRQ 69 to local APIC 4 vector 111=
<br>timecard0: using IRQs 38-69 for MSI<br>TimeCard msi 32<br>rman iomem st=
art f4000000, end f5ffffff, size 2000000<br>timecard_corelist_read did not =
find list, using fb list 1<br>nports 1<br>Start with uart 0 0<br>irq 41, ir=
id 4<br><br><br>Fatal trap 30: reserved (unknown) fault while in kernel mod=
e<br>cpuid =3D 2; apic id =3D 04<br>port irq rid 4<br>instruction pointer =
=C2=A0 =C2=A0 =3D 0x20:0xffffffff804dda2d<br>stack pointer =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =3D 0x28:0xfffffe001b1d8de0<br>TimeCard device loaded.=
<br>pci2: driver added<br>pci3: driver added<br>pci4: driver added<br>frame=
 pointer =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =3D 0x28:0xfffffe001b1d8e10<br>=
code segment =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D base 0x0, limit 0=
xfffff, type 0x1b<br>pci5: driver added<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =3D DPL 0, pres 1, lon=
g 1, def32 0, gran 1<br>processor eflags =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D int=
errupt enabled, IOPL =3D 0<br>current process =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=3D 11 (idle: cpu2)<br>trap number =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =3D 30<br>panic: reserved (unknown) fault<br>cpuid =3D 2<br>time =3D 16=
95375919<br>KDB: stack backtrace:<br>db_trace_self_wrapper() at db_trace_se=
lf_wrapper+0x2b/frame 0xfffffe001b1d8c00<br>vpanic() at vpanic+0x151/frame =
0xfffffe001b1d8c50<br>panic() at panic+0x43/frame 0xfffffe001b1d8cb0<br>tra=
p_fatal() at trap_fatal+0x387/frame 0xfffffe001b1d8d10<br>calltrap() at cal=
ltrap+0x8/frame 0xfffffe001b1d8d10<br>--- trap 0x1e, rip =3D 0xffffffff804d=
da2d, rsp =3D 0xfffffe001b1d8de0, rbp =3D 0xfffffe001b1d8e10 ---<br>acpi_cp=
u_idle() at acpi_cpu_idle+0x28d/frame 0xfffffe001b1d8e10<br>cpu_idle_acpi()=
 at cpu_idle_acpi+0x4d/frame 0xfffffe001b1d8e30<br>cpu_idle() at cpu_idle+0=
xac/frame 0xfffffe001b1d8e50<br>sched_idletd() at sched_idletd+0x4b1/frame =
0xfffffe001b1d8ef0<br>fork_exit() at fork_exit+0x80/frame 0xfffffe001b1d8f3=
0<br>fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe001b1d8f30<br>-=
-- trap 0xe0c2545f, rip =3D 0x8f4a0c76246ffed9, rsp =3D 0x670c1cf091ea5e5b,=
 rbp =3D 0x57639a151e2b2985 ---<br>KDB: enter: panic<br>[ thread pid 11 tid=
 100005 ]<br>Stopped at =C2=A0 =C2=A0 =C2=A0kdb_enter+0x37: movq =C2=A0 =C2=
=A0$0,0x129840e(%rip)<br>db&gt; x/wx timecard_intr_count<br>timecard_intr_c=
ount: =C2=A0 =C2=A00<br>db&gt; show apic<br>Interrupts bound to lapic 0<br>=
vec 0x30 -&gt; IRQ 9<br>vec 0x31 -&gt; IRQ 28<br>vec 0x32 -&gt; IRQ 31<br>v=
ec 0x33 -&gt; IRQ 24<br>vec 0x34 -&gt; IRQ 29<br>vec 0x35 -&gt; IRQ 30<br>v=
ec 0x36 -&gt; IRQ 8<br>vec 0x37 -&gt; IRQ 16<br>vec 0x38 -&gt; IRQ 36<br>ve=
c 0x39 -&gt; IRQ 1<br>vec 0xef -&gt; lapic timer<br>Interrupts bound to lap=
ic 2<br>vec 0x30 -&gt; IRQ 25<br>vec 0x31 -&gt; IRQ 33<br>vec 0x32 -&gt; IR=
Q 23<br>vec 0x33 -&gt; IRQ 18<br>vec 0xef -&gt; lapic timer<br>Interrupts b=
ound to lapic 4<br>vec 0x30 -&gt; IRQ 26<br>vec 0x31 -&gt; IRQ 0<br>vec 0x3=
2 -&gt; IRQ 34<br>vec 0x33 -&gt; IRQ 37<br>vec 0x50 -&gt; IRQ 38<br>vec 0x5=
1 -&gt; IRQ 39<br>vec 0x52 -&gt; IRQ 40<br>vec 0x53 -&gt; IRQ 41<br>vec 0x5=
4 -&gt; IRQ 42<br>vec 0x55 -&gt; IRQ 43<br>vec 0x56 -&gt; IRQ 44<br>vec 0x5=
7 -&gt; IRQ 45<br>vec 0x58 -&gt; IRQ 46<br>vec 0x59 -&gt; IRQ 47<br>vec 0x5=
a -&gt; IRQ 48<br>vec 0x5b -&gt; IRQ 49<br>vec 0x5c -&gt; IRQ 50<br>vec 0x5=
d -&gt; IRQ 51<br>vec 0x5e -&gt; IRQ 52<br>vec 0x5f -&gt; IRQ 53<br>vec 0x6=
0 -&gt; IRQ 54<br>vec 0x61 -&gt; IRQ 55<br>vec 0x62 -&gt; IRQ 56<br>vec 0x6=
3 -&gt; IRQ 57<br>vec 0x64 -&gt; IRQ 58<br>vec 0x65 -&gt; IRQ 59<br>vec 0x6=
6 -&gt; IRQ 60<br>vec 0x67 -&gt; IRQ 61<br>vec 0x68 -&gt; IRQ 62<br>vec 0x6=
9 -&gt; IRQ 63<br>vec 0x6a -&gt; IRQ 64<br>vec 0x6b -&gt; IRQ 65<br>vec 0x6=
c -&gt; IRQ 66<br>vec 0x6d -&gt; IRQ 67<br>vec 0x6e -&gt; IRQ 68<br>vec 0x6=
f -&gt; IRQ 69<br>vec 0xef -&gt; lapic timer<br>Interrupts bound to lapic 6=
<br>vec 0x30 -&gt; IRQ 27<br>vec 0x31 -&gt; IRQ 32<br>vec 0x32 -&gt; IRQ 35=
<br>vec 0x33 -&gt; IRQ 4<br>vec 0xef -&gt; lapic timer<br>db&gt; show lapic=
<br>lapic ID =3D 4<br>version =C2=A0=3D 1.5<br>max LVT =C2=A0=3D 6<br>SVR =
=C2=A0 =C2=A0 =C2=A0=3D ff (enabled)<br>TPR =C2=A0 =C2=A0 =C2=A0=3D 00<br>I=
n-service Interrupts:<br>isr2: 43<br>TMR Interrupts:<br>IRR Interrupts:<br>=
irr1: 32 33<br>irr2: 43<br>irr7: ef<br>db&gt; <br></div><div>&lt;/snip&gt;<=
/div><div><br></div><div>Regards</div><div><br></div><div>John</div><div><b=
r></div></div>
</blockquote></div>

--00000000000045eb7206062ac5dc--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGv8uarzr6QBmk3Xoi1XbrFqPGb_=-O_AaVs41dNuKjPhz-RKw>