On Mon, Apr 16, 2018 at 04:31:21PM +1000, Jonathan Gray wrote:
> On Sun, Apr 15, 2018 at 10:04:13PM -0700, Mike Larkin wrote:
> > On Sun, Apr 15, 2018 at 11:47:45PM -0500, Juan Morado wrote:
> > > System:  OpenBSD 6.3
> > > Details: OpenBSD 6.3 (GENERIC.MP) #107: Sat Mar 24 14:21:59 MDT 2018
> > >             dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/
> > > GENERIC.MP
> > > 
> > > Architecture: OpenBSD.amd64
> > > Machine:      amd64
> > > 
> > > Description:  Touching the track pad of this ASUS X541SA laptop during 
> > > boot
> > > causes a kernel panic when running 6.3. Touching/using the trackpad after 
> > > X
> > > starts causes the system to become unresponsive (hang).
> > > 
> > > How to repeat: Reboot the system, swipe a finger on the track pad while
> > > booting. Or use the track pad after the machine has booted and X has
> > > started.
> > > 
> > > Fix: no known work around or fix
> > > 
> > > "show panic", trace, ps, and "show registers" output attached in
> > > ddb_trace.txt
> > > 
> > > dmesg.txt contains the dmesg.
> > 
> > > addr 1: xHCI root hub, Intel
> > >  addr 2: USB Flash Disk, General
> > 
> > 
> > jsg, kettenis? Thoughts?
> > 
> > -ml
> > 

Heh, thanks Jonathan. I meant jcs@ but the diff below might help :)

-ml

> > 
> > 
> > 
> > 
> > > Domain /dev/pci0:
> > >  0:0:0: Intel Braswell Host
> > >  0:2:0: Intel HD Graphics
> > >  0:11:0: Intel Braswell Power
> > >  0:19:0: Intel Braswell AHCI
> > >  0:20:0: Intel Braswell xHCI
> > >  0:26:0: Intel Braswell TXE
> > >  0:27:0: Intel Braswell HD Audio
> > >  0:28:0: Intel Braswell PCIE
> > >  0:28:2: Intel Braswell PCIE
> > >  0:28:3: Intel Braswell PCIE
> > >  0:31:0: Intel Braswell PCU LPC
> > >  0:31:3: Intel Braswell SMBus
> > >  2:0:0: Realtek 8101E
> > >  3:0:0: Realtek 8191SE
> > 
> > > System:  OpenBSD 6.3
> > > Details: OpenBSD 6.3 (GENERIC.MP) #107: Sat Mar 24 14:21:59 MDT 2018
> > >             
> > > dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
> > > 
> > > Architecture: OpenBSD.amd64
> > > Machine:      amd64
> > > 
> > > Description:  Touching the track pad of this ASUS X541SA laptop during 
> > > boot causes a kernel panic. Touching/using the trackpad after X starts 
> > > causes the system to become unresponsive (hang).
> > > 
> > > How to repeat: Reboot the system, swip a finger on the track pad while 
> > > booting. Or use the track pad after the machine has booted and X has 
> > > started. 
> > > 
> > > Fix: no known work around or fix
> > > 
> > > 
> > > ddb{0}> show panic
> > > kernel page fault
> > > uvm_fault(0xffffffff81afca80, 0xffff8000006f8000, 0, 1) -> e
> > > ihidev_intr(ffff8000000d9300) at ihidev_intr+0x18a
> > > end trace frame: 0xffff8000314a3ac8, count: 0
> > > 
> > > ddb{0}> trace
> > > ihidev_intr(ffff8000000d9300) at ihidev_intr+0x18a
> > > intr_handler(0,ffff800000127280) at intr_handler+0x57
> > > Xintr_ioapic_level17_untramp() at Xintr_ioapic_level17_untramp+0x12c
> > > --- interrupt ---
> > > acpicpu_idle() at acpicpu_idle+0x1d9
> > > cpu_idle_cycle(0,0,ffffffff81abbff0,ffffffff817e4290,ffffffff817e44b5,fffffff181c1f0)
> > >  at cpu_idle_cycle+0x10
> > > end trace frame: 0x0, count: -5
> 
> I'm curious if disestablishing the interrupt handler in attach in the
> early returns before sc_ibuf has been allocated changes anything.
> 
> Index: ihidev.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/i2c/ihidev.c,v
> retrieving revision 1.16
> diff -u -p -r1.16 ihidev.c
> --- ihidev.c  12 Jan 2018 08:11:47 -0000      1.16
> +++ ihidev.c  16 Apr 2018 06:17:48 -0000
> @@ -139,8 +139,14 @@ ihidev_attach(struct device *parent, str
>           (char *)ia->ia_cookie);
>  
>       sc->sc_nrepid = ihidev_maxrepid(sc->sc_report, sc->sc_reportlen);
> -     if (sc->sc_nrepid < 0)
> +     if (sc->sc_nrepid < 0) {
> +             printf("%s: nrepid %d\n", sc->sc_dev.dv_xname, sc->sc_nrepid);
> +             if (sc->sc_ih) {
> +                     intr_disestablish(sc->sc_ih);
> +                     sc->sc_ih = NULL;
> +             }
>               return;
> +     }
>  
>       printf("%s: %d report id%s\n", sc->sc_dev.dv_xname, sc->sc_nrepid,
>           sc->sc_nrepid > 1 ? "s" : "");
> @@ -150,6 +156,10 @@ ihidev_attach(struct device *parent, str
>           M_DEVBUF, M_NOWAIT | M_ZERO);
>       if (sc->sc_subdevs == NULL) {
>               printf("%s: failed allocating memory\n", sc->sc_dev.dv_xname);
> +             if (sc->sc_ih) {
> +                     intr_disestablish(sc->sc_ih);
> +                     sc->sc_ih = NULL;
> +             }
>               return;
>       }
>  

Reply via email to