** Description changed:

  I ran into a problem with the console argument handling on a physical
  system with a BMC (Dell R610) and also reproduced the same behavior on a
  QEMU/KVM VM with multiple serial ports.
  
- The kernel documentation notes that the last entry will 
+ The kernel documentation notes that the last entry will be used for 
/dev/console
  https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-tty
  "What:        /sys/class/tty/console/active
-          Shows the list of currently configured console devices, like 'tty1 
ttyS0'. The last entry in the file is the active device connected to 
/dev/console.
-          The file supports poll() to detect virtual console switches."
+          Shows the list of currently configured console devices, like 'tty1 
ttyS0'. The last entry in the file is the active device connected to 
/dev/console.
+          The file supports poll() to detect virtual console switches."
  
  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L1960
  "The last preferred console added will be used for kernel messages and 
stdin/out/err for init."
  
  The actual behavior is different and the console specified in the last
  console argument does not become an active one. As a result, SOL
  functionality is not possible to use unless only one ttyS<n> argument is
  specified in the kernel command line arguments. Setting the arguments to
  only contain the right one results in a proper behavior and I can see rx
  counters increasing in /proc/tty/driver/serial for the relevant port
  after I type something via the BMC.
  
- $ cat /proc/cmdline 
+ $ cat /proc/cmdline
  BOOT_IMAGE=/vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro console=tty0 
console=ttyS0,115200 console=ttyS1,115200
  
  journalctl -k | grep ttyS
  Dec 03 21:42:41 ubuntu kernel: Command line: 
BOOT_IMAGE=/vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro console=tty0 
console=ttyS0,115200 console=ttyS1,115200
  Dec 03 21:42:41 ubuntu kernel: Kernel command line: 
BOOT_IMAGE=/vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro console=tty0 
console=ttyS0,115200 console=ttyS1,115200
  Dec 03 21:42:41 ubuntu kernel: console [ttyS0] enabled
  Dec 03 21:42:41 ubuntu kernel: 00:02: ttyS0 at I/O 0x3f8 (irq = 4, base_baud 
= 115200) is a 16550A
  Dec 03 21:42:41 ubuntu kernel: 00:03: ttyS1 at I/O 0x2f8 (irq = 3, base_baud 
= 115200) is a 16550A
  Dec 03 21:42:41 ubuntu kernel: tty ttyS3: hash matches
  
  Full dmesg: http://paste.ubuntu.com/p/bV2pDc4Hdw/
  
  $ cat /sys/class/tty/console/active
  ttyS0 tty0
  
  $ sudo cat /proc/tty/driver/serial
  serinfo:1.0 driver revision:
  0: uart:16550A port:000003F8 irq:4 tx:78 rx:0 RTS|DTR
  1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 CTS|DSR|CD
  2: uart:unknown port:000003E8 irq:4
  3: uart:unknown port:000002E8 irq:3
  # ...
  
- 
  ~~~
  GRUB setttings:
  
  # the ones that override /etc/default/grub
  $ cat /etc/default/grub.d/50-curtin-settings.cfg
  cat: cat: No such file or directory
  GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200 
console=ttyS1,115200"
  # disable grub os prober that might find other OS installs.
  GRUB_DISABLE_OS_PROBER=true
  GRUB_TERMINAL=console
  
  /etc/default/grub: https://paste.ubuntu.com/p/sdWQrY7JwN/
  
  # grub.cfg: http://paste.ubuntu.com/p/zKGTqDh6sR/
  # two entries, both with the proper arg and properly sent to the kernel 
cmdline based on /proc/cmdline
- grep ttyS grub.cfg 
-         linux /vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro  console=tty0 
console=ttyS0,115200 console=ttyS1,115200
-               linux   /vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro  console=tty0 
console=ttyS0,115200 console=ttyS1,115200
- 
+ grep ttyS grub.cfg
+         linux /vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro  console=tty0 
console=ttyS0,115200 console=ttyS1,115200
+          linux        /vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro  console=tty0 
console=ttyS0,115200 console=ttyS1,115200
  
  ~~~
  
- 
- I managed to reproduce the exact same behavior on a VM with multiple 8250 
serial ports.
+ I managed to reproduce the exact same behavior on a VM with multiple
+ 8250 serial ports.
  
  ubuntu@maas-vhost5:~$ cat /sys/class/tty/console/active
  ttyS0
  
- ubuntu@maas-vhost5:~$ cat /proc/cmdline 
+ ubuntu@maas-vhost5:~$ cat /proc/cmdline
  BOOT_IMAGE=/boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200
  
- ubuntu@maas-vhost5:~$ grep -RP ttyS /boot/grub/grub.cfg 
-         linux /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200
-               linux   /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200
-               linux   /boot/vmlinuz-4.15.0-39-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200
+ ubuntu@maas-vhost5:~$ grep -RP ttyS /boot/grub/grub.cfg
+         linux /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200
+          linux        /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200
+          linux        /boot/vmlinuz-4.15.0-39-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200
  
  # changed to the following config with only ttyS1 present:
- ubuntu@maas-vhost5:~$ grep -RP ttyS /boot/grub/grub.cfg 
-         linux /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS1,115200
-               linux   /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS1,115200
-               linux   /boot/vmlinuz-4.15.0-39-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS1,115200
+ ubuntu@maas-vhost5:~$ grep -RP ttyS /boot/grub/grub.cfg
+         linux /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS1,115200
+          linux        /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS1,115200
+          linux        /boot/vmlinuz-4.15.0-39-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS1,115200
  
  # 1 tty passed only
- ubuntu@maas-vhost5:~$ cat /proc/cmdline 
+ ubuntu@maas-vhost5:~$ cat /proc/cmdline
  BOOT_IMAGE=/boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro console=ttyS1,115200
  
  # now it's shown as active
  ubuntu@maas-vhost5:~$ cat /sys/class/tty/console/active
  ttyS1
  
  ubuntu@maas-vhost5:~$ sudo cat /proc/tty/driver/serial
  serinfo:1.0 driver revision:
  0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 CTS|DSR|CD
  1: uart:16550A port:000002F8 irq:3 tx:14763 rx:0 RTS|CTS|DTR|DSR|CD
  2: uart:16550A port:000003E8 irq:4 tx:0 rx:0 CTS|DSR|CD
  
  ~~~~
  
  Relevant code:
  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L2379
  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L1916
  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L1961
  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L1886

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/1807140

Title:
  The last console= argument is not used by the kernel

Status in linux package in Ubuntu:
  Incomplete

Bug description:
  I ran into a problem with the console argument handling on a physical
  system with a BMC (Dell R610) and also reproduced the same behavior on
  a QEMU/KVM VM with multiple serial ports.

  The kernel documentation notes that the last entry will be used for 
/dev/console
  https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-tty
  "What:        /sys/class/tty/console/active
           Shows the list of currently configured console devices, like 'tty1 
ttyS0'. The last entry in the file is the active device connected to 
/dev/console.
           The file supports poll() to detect virtual console switches."

  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L1960
  "The last preferred console added will be used for kernel messages and 
stdin/out/err for init."

  The actual behavior is different and the console specified in the last
  console argument does not become an active one. As a result, SOL
  functionality is not possible to use unless only one ttyS<n> argument
  is specified in the kernel command line arguments. Setting the
  arguments to only contain the right one results in a proper behavior
  and I can see rx counters increasing in /proc/tty/driver/serial for
  the relevant port after I type something via the BMC.

  $ cat /proc/cmdline
  BOOT_IMAGE=/vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro console=tty0 
console=ttyS0,115200 console=ttyS1,115200

  journalctl -k | grep ttyS
  Dec 03 21:42:41 ubuntu kernel: Command line: 
BOOT_IMAGE=/vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro console=tty0 
console=ttyS0,115200 console=ttyS1,115200
  Dec 03 21:42:41 ubuntu kernel: Kernel command line: 
BOOT_IMAGE=/vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro console=tty0 
console=ttyS0,115200 console=ttyS1,115200
  Dec 03 21:42:41 ubuntu kernel: console [ttyS0] enabled
  Dec 03 21:42:41 ubuntu kernel: 00:02: ttyS0 at I/O 0x3f8 (irq = 4, base_baud 
= 115200) is a 16550A
  Dec 03 21:42:41 ubuntu kernel: 00:03: ttyS1 at I/O 0x2f8 (irq = 3, base_baud 
= 115200) is a 16550A
  Dec 03 21:42:41 ubuntu kernel: tty ttyS3: hash matches

  Full dmesg: http://paste.ubuntu.com/p/bV2pDc4Hdw/

  $ cat /sys/class/tty/console/active
  ttyS0 tty0

  $ sudo cat /proc/tty/driver/serial
  serinfo:1.0 driver revision:
  0: uart:16550A port:000003F8 irq:4 tx:78 rx:0 RTS|DTR
  1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 CTS|DSR|CD
  2: uart:unknown port:000003E8 irq:4
  3: uart:unknown port:000002E8 irq:3
  # ...

  ~~~
  GRUB setttings:

  # the ones that override /etc/default/grub
  $ cat /etc/default/grub.d/50-curtin-settings.cfg
  cat: cat: No such file or directory
  GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200 
console=ttyS1,115200"
  # disable grub os prober that might find other OS installs.
  GRUB_DISABLE_OS_PROBER=true
  GRUB_TERMINAL=console

  /etc/default/grub: https://paste.ubuntu.com/p/sdWQrY7JwN/

  # grub.cfg: http://paste.ubuntu.com/p/zKGTqDh6sR/
  # two entries, both with the proper arg and properly sent to the kernel 
cmdline based on /proc/cmdline
  grep ttyS grub.cfg
          linux /vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro  console=tty0 
console=ttyS0,115200 console=ttyS1,115200
           linux        /vmlinuz-4.15.0-42-generic 
root=UUID=580a3c58-1040-4c7d-b94f-93230874caf5 ro  console=tty0 
console=ttyS0,115200 console=ttyS1,115200

  ~~~

  I managed to reproduce the exact same behavior on a VM with multiple
  8250 serial ports.

  ubuntu@maas-vhost5:~$ cat /sys/class/tty/console/active
  ttyS0

  ubuntu@maas-vhost5:~$ cat /proc/cmdline
  BOOT_IMAGE=/boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200

  ubuntu@maas-vhost5:~$ grep -RP ttyS /boot/grub/grub.cfg
          linux /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200
           linux        /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200
           linux        /boot/vmlinuz-4.15.0-39-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS0,115200 
console=ttyS2,115200 console=ttyS1,115200

  # changed to the following config with only ttyS1 present:
  ubuntu@maas-vhost5:~$ grep -RP ttyS /boot/grub/grub.cfg
          linux /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS1,115200
           linux        /boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS1,115200
           linux        /boot/vmlinuz-4.15.0-39-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro  console=ttyS1,115200

  # 1 tty passed only
  ubuntu@maas-vhost5:~$ cat /proc/cmdline
  BOOT_IMAGE=/boot/vmlinuz-4.15.0-42-generic 
root=UUID=a60217c2-6752-4c69-afb9-55f86a2b6c1d ro console=ttyS1,115200

  # now it's shown as active
  ubuntu@maas-vhost5:~$ cat /sys/class/tty/console/active
  ttyS1

  ubuntu@maas-vhost5:~$ sudo cat /proc/tty/driver/serial
  serinfo:1.0 driver revision:
  0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 CTS|DSR|CD
  1: uart:16550A port:000002F8 irq:3 tx:14763 rx:0 RTS|CTS|DTR|DSR|CD
  2: uart:16550A port:000003E8 irq:4 tx:0 rx:0 CTS|DSR|CD

  ~~~~

  Relevant code:
  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L2379
  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L1916
  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L1961
  https://elixir.bootlin.com/linux/v4.15.18/source/kernel/printk/printk.c#L1886

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1807140/+subscriptions

-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to