4.9 regression/bisection - 761ed4a94582 tty: serial_core: convert uart_close to use tty_port_close

From: Mike Galbraith
Date: Fri Oct 21 2016 - 08:45:32 EST


Greetings,

My old DL980 G7 is exploding on reboot with master, with only the first
couple lines actually making it to the console. Once (and only once)
during bisection it did manage to get the below emitted.

[ 358.315713] BUG: unable to handle kernel NULL pointer dereference at 00000000000001e0
[ 358.400610] IP: [<ffffffff81414b4c>] tty_wakeup+0xc/0x70
[ 358.460221] PGD 0
[ 358.481987] Oops: 0000 [#1] SMP
[ 358.515036] Dumping ftrace buffer:
[ 358.555845] (ftrace buffer empty)
[ 358.591789] Modules linked in: autofs4(E) edd(E) af_packet(E) cpufreq_conservative(E) cpufreq_userspace(E) fuse(E) loop(E) md_mod(E) dm_mod(E) vhost_net(E) macvtap(E) macvlan(E) vhost(E) tun(E) ipmi_ssif(E) iTCO_wdt(E) kvm_intel(E) iTCO_vendor_support(E) gpio_ich(E) ipmi_si(E) kvm(E) joydev(E) i7core_edac(E) lpc_ich(E) irqbypass(E) bnx2(E) netxen_nic(E) shpchp(E) sr_mod(E) pcspkr(E) ipmi_msghandler(E) mfd_core(E) cdrom(E) edac_core(E) hpilo(E) hpwdt(E) pcc_cpufreq(E) sg(E) fjes(E) hid_generic(E) button(E) acpi_cpufreq(E) ehci_pci(E) acpi_power_meter(E) ext4(E) mbcache(E) jbd2(E) crc16(E) usbhid(E) uhci_hcd(E) ehci_hcd(E) usbcore(E) sd_mod(E) thermal(E) scsi_dh_hp_sw(E) scsi_dh_emc(E) scsi_dh_rdac(E) scsi_dh_alua(E) ata_generic(E) ata_piix(E) libata(E) hpsa(E) scsi_transport_sas(E) cciss(E) scsi_mod(E)
[ 359.376789] CPU: 0 PID: 1698 Comm: kworker/0:4 Tainted: G E 4.9.0-default #230
[ 359.479980] Hardware name: Hewlett-Packard ProLiant DL980 G7, BIOS P66 07/07/2010
[ 359.568962] task: ffff880273eba240 task.stack: ffffc90001fe4000
[ 359.635241] RIP: 0010:[<ffffffff81414b4c>] [<ffffffff81414b4c>] tty_wakeup+0xc/0x70
[ 359.720193] RSP: 0018:ffff88027fc03df8 EFLAGS: 00010082
[ 359.781228] RAX: ffff880274e901a8 RBX: ffffffff820941e0 RCX: 0000000000000000
[ 359.863437] RDX: 000000000000001b RSI: 00000000000002f8 RDI: 0000000000000000
[ 359.946407] RBP: ffff88027fc03e08 R08: ffff88027fc17cc0 R09: 0000000000000000
[ 360.024457] R10: ffffffffffffffe4 R11: ffffffffffffff9e R12: ffff880274e901a8
[ 360.105862] R13: 0000000000000000 R14: 0000000000000020 R15: 00000000000000c2
[ 360.187865] FS: 0000000000000000(0000) GS:ffff88027fc00000(0000) knlGS:0000000000000000
[ 360.278200] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 360.345712] CR2: 00000000000000b8 CR3: 0000000001c06000 CR4: 00000000000006f0
[ 360.427968] Stack:
[ 360.449955] ffffffff820941e0 ffff880274e901a8 ffff88027fc03e18 ffffffff814319d1
[ 360.535162] ffff88027fc03e40 ffffffff81439e20 ffffffff820941e0 0000000000000060
[ 360.625426] 0000000000000046 ffff88027fc03e78 ffffffff8143a05d ffffffff820941e0
[ 360.709070] Call Trace:
[ 360.736862] <IRQ>
[ 360.756285] [<ffffffff814319d1>] uart_write_wakeup+0x21/0x30
[ 360.823321] [<ffffffff81439e20>] serial8250_tx_chars+0x220/0x280
[ 360.894461] [<ffffffff8143a05d>] serial8250_handle_irq.part.22+0xdd/0x100
[ 360.970372] [<ffffffff8143a0e7>] serial8250_default_handle_irq+0x47/0x70
[ 361.046833] [<ffffffff81435623>] serial8250_interrupt+0x63/0x130
[ 361.109593] [<ffffffff810cc82f>] __handle_irq_event_percpu+0x3f/0x1a0
[ 361.177384] [<ffffffff810cc9b3>] handle_irq_event_percpu+0x23/0x60
[ 361.240864] [<ffffffff810cca2e>] handle_irq_event+0x3e/0x60
[ 361.302754] [<ffffffff810d0089>] handle_edge_irq+0x99/0x150
[ 361.386869] [<ffffffff8101ec7d>] handle_irq+0x1d/0x30
[ 361.445032] [<ffffffff81600fad>] do_IRQ+0x4d/0xd0
[ 361.494099] [<ffffffff815ff18c>] common_interrupt+0x8c/0x8c
[ 361.552523] <EOI>
[ 361.572270] [<ffffffff810bcc9f>] ? native_queued_spin_lock_slowpath+0x12f/0x1a0
[ 361.652790] [<ffffffff811804e4>] queued_spin_lock_slowpath+0xb/0xf
[ 361.725628] [<ffffffff815fe5b0>] _raw_spin_lock+0x20/0x30
[ 361.789215] [<ffffffff811c7339>] find_vmap_area+0x19/0x60
[ 361.852010] [<ffffffff811c8b41>] remove_vm_area+0x11/0x70
[ 361.911002] [<ffffffff811c8bca>] __vunmap+0x2a/0xd0
[ 361.967589] [<ffffffff811c8cde>] vfree+0x2e/0x70
[ 362.020037] [<ffffffff8106dec5>] put_task_stack+0x75/0x110
[ 362.083000] [<ffffffff81098977>] finish_task_switch+0x1c7/0x240
[ 362.149896] [<ffffffff815fa6e4>] __schedule+0x224/0x6a0
[ 362.212147] [<ffffffff815fab96>] schedule+0x36/0x80
[ 362.268175] [<ffffffff8108acf2>] worker_thread+0x1a2/0x4b0
[ 362.332810] [<ffffffff8108ab50>] ? rescuer_thread+0x350/0x350
[ 362.399906] [<ffffffff810904ca>] kthread+0xca/0xe0
[ 362.457034] [<ffffffff81090400>] ? kthread_park+0x60/0x60
[ 362.519201] [<ffffffff815fea55>] ret_from_fork+0x25/0x30
[ 362.582964] Code: 00 00 48 85 c0 74 05 48 89 df ff d0 4c 89 ee 4c 89 e7 e8 18 98 1e 00 5b 41 5c 41 5d 5d c3 90 66 66 66 66 90 55 48 89 e5 41 54 53 <48> 8b 87 e0 01 00 00 48 89 fb a8 20 75 20 48 8d bb 30 02 00 00
[ 362.799640] RIP [<ffffffff81414b4c>] tty_wakeup+0xc/0x70
[ 362.860880] RSP <ffff88027fc03df8>
[ 362.901975] CR2: 00000000000001e0

761ed4a94582ab291aa24dcbea4e01e8936488c8 is the first bad commit
commit 761ed4a94582ab291aa24dcbea4e01e8936488c8
Author: Rob Herring <robh@xxxxxxxxxx>
Date: Mon Aug 22 17:39:10 2016 -0500

tty: serial_core: convert uart_close to use tty_port_close

tty_port_close handles much of the common parts of tty close. Convert
uart_close to use it and move the serial_core specific parts into
tty_port.shutdown function. This will be needed to use tty_port functions
directly from in kernel clients.

This change causes ops->stop_rx() to be called after uart_wait_until_sent()
is called which I think should be fine. Otherwise, the sequence of the
close should be the same.

Cc: Peter Hurley <peter@xxxxxxxxxxxxxxxxxx>
Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
Acked-by: Alan Cox <alan@xxxxxxxxxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>

:040000 040000 91a49bab72cc416842d1058b43896c213a64ab5d e84cedcd2ce818ea3aafbd4e7221b283eaec45f4 M drivers

git bisect start
# good: [c8d2bc9bc39ebea8437fd974fdbc21847bb897a3] Linux 4.8
git bisect good c8d2bc9bc39ebea8437fd974fdbc21847bb897a3
# bad: [c3f8f7fa8b19e274e7eb99dee428ad3a9b2ad8eb] Merge tag 'platform-drivers-x86-v4.9-2' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86
git bisect bad c3f8f7fa8b19e274e7eb99dee428ad3a9b2ad8eb
# bad: [41844e36206be90cd4d962ea49b0abc3612a99d0] Merge tag 'staging-4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
git bisect bad 41844e36206be90cd4d962ea49b0abc3612a99d0
# bad: [d268dbe76a53d72cc41316eb59e7968db60e77ad] Merge tag 'pinctrl-v4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl
git bisect bad d268dbe76a53d72cc41316eb59e7968db60e77ad
# bad: [02bafd96f3a5d8e610b19033ffec55b92459aaae] Merge tag 'docs-4.9' of git://git.lwn.net/linux
git bisect bad 02bafd96f3a5d8e610b19033ffec55b92459aaae
# good: [9929780e86854833e649b39b290b5fe921eb1701] Merge tag 'driver-core-4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
git bisect good 9929780e86854833e649b39b290b5fe921eb1701
# bad: [77b0a4aa0732f1856aef85b8db085864e5971a14] Merge tag 'hwmon-for-linus-v4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging
git bisect bad 77b0a4aa0732f1856aef85b8db085864e5971a14
# good: [f21ca2c9999872da113a1fc70abb527129b72af3] Merge tag 'usb-ci-v4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb into usb-testing
git bisect good f21ca2c9999872da113a1fc70abb527129b72af3
# bad: [e6dce825fba05f447bd22c865e27233182ab3d79] Merge tag 'tty-4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
git bisect bad e6dce825fba05f447bd22c865e27233182ab3d79
# bad: [5d7519dfc963ec8b6a10a51356840580fc005a1e] serial: mxs-auart: Disable clock on error path
git bisect bad 5d7519dfc963ec8b6a10a51356840580fc005a1e
# bad: [a13e19cf3dc1080cf8a3a174cefd9199610faed7] serial: 8250_lpss: split LPSS driver to separate module
git bisect bad a13e19cf3dc1080cf8a3a174cefd9199610faed7
# bad: [5887ad43ee02a00f17a6132b7fb256dc6865474c] tty: serial: fsl_lpuart: Use cyclic DMA for Rx
git bisect bad 5887ad43ee02a00f17a6132b7fb256dc6865474c
# bad: [761ed4a94582ab291aa24dcbea4e01e8936488c8] tty: serial_core: convert uart_close to use tty_port_close
git bisect bad 761ed4a94582ab291aa24dcbea4e01e8936488c8
# good: [2426fbc77faef57c80a573303af6543531e2efa3] tty: amba-pl011: probe ZTE device from AMBA bus with a pseudo-ID
git bisect good 2426fbc77faef57c80a573303af6543531e2efa3
# good: [ebaa81c7287edd40dd4899e5d93a20e7a2b938e7] serial: samsung: Register cpufreq notifier only on S3C24xx
git bisect good ebaa81c7287edd40dd4899e5d93a20e7a2b938e7
# good: [b3b57646186400d4f54652ab7bbf55f5764d9467] tty: serial_core: convert uart_open to use tty_port_open
git bisect good b3b57646186400d4f54652ab7bbf55f5764d9467