830 TI on Tuleta during IPL of Linux - bad xisr passed to PHYP
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux (Ubuntu) |
Fix Released
|
High
|
Tim Gardner | ||
Vivid |
Fix Released
|
Undecided
|
Tim Gardner | ||
Wily |
Fix Released
|
High
|
Tim Gardner |
Bug Description
I looked at the dump and the assert is due to a bad xisr. From the VIO trace the xisr was 0000000001000A00.
> ~d4a3/phypmacro/vio -globals -fr
+------
| HvVioGlobals (address=
+------
BitBucket: 0x07F000001A2D2000
AssertFr: 0x07F000080F394C80
AssertEnabled: True
VlanMap: 0x07F0000807621000
+-----
| HvVioFr (address=
+-----
[ 0] HvVioInterruptA
Here is the trace along with some Linux output that followed:
Token = 34, timebase = 0x24222848
h_hypervisor_
175: b=
0100 0A00 0000 0000 0000 0000 0000 0001 [................]
105: get_parms_ptr=
0100 0A00 0000 0000 0000 0000 0000 0001 [................]
GET XIVE ERROR hcall rc=fffffffc buff_rc=1
[ 0.000517] irq: (null) didn't like hwirq-0x1000a00 to VIRQ16 mapping (rc=-22)
[ 0.000578] hvsi_console_init: couldn't create irq mapping for 0x1000a00
-------
I then dumped the device tree for interrupts that PFW communicates to Linux
via the device as follows:
1) Here are all the 'interrupt-ranges' properties found:
0 > showprops -i interrupt-ranges
/ibm,platform-
/event-sources 00090000 00000008
/interrupt-
/interrupt-
/interrupt-
/interrupt-
/interrupt-
/interrupt-
/interrupt-
/interrupt-
/interrupt-
/interrupt-
/interrupt-
/interrupt-
/vdevice 000a0000 000000c7 000b0000 0000007f
2) Here are all the 'ibm,msi-ranges' properties found:
0 > showprops -i ibm,msi-ranges
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
/pci@8000000200
3) Here are all the 'interrupts' properties found:
0 > showprops -i interrupts
/event-
/vdevice/
/vdevice/
/vdevice/
-------
PFW did not provide interrupt 01000A00 to the OS, so I don't think either PFW or
PHYP (who provides PFW with the int values) is at fault here. This needs to go
to Linux to determine where the 01000A00 comes from.
My guess is the interrupt 000A0001 provided for virtual console device /vdevice/
may be the source of the issue. Perhaps Linux is passing RTAS the little endian version of
the /vdevice/
I think there is an endianess issue in hvsi_console_init where irq, as well as vtermno, are not byte swapped when fetched from the DT.
However, I tried to get it fixed on my LPAR but I can't reach that code since there is no such a device configured.
How could I get this device (serial hvterm-protocol) set up ?
I confirm that hvsi_console_init() assumes big endian, which is wrong. That explains the swapped irq value.
This patch is fixing all the endianness issues I found by reading the HVSI driver's code.
When booting the system, there is no more error messages displayed and the tty driver sounds configured correctly. However, I can't tell that the driver is fully functional since I don't know how to access the other side of the configured TTY.
The patch has been accpeted upstream in the powerpc/next branch:
https:/
Hi,
This patch should be applied to Ubuntu 15.04 and 15.10.
Thanks,
Laurent.
Related branches
CVE References
affects: | ubuntu → linux (Ubuntu) |
Changed in linux (Ubuntu): | |
assignee: | nobody → Taco Screen team (taco-screen-team) |
Changed in linux (Ubuntu): | |
assignee: | Taco Screen team (taco-screen-team) → Canonical Kernel Team (canonical-kernel-team) |
importance: | Undecided → High |
status: | New → Triaged |
Changed in linux (Ubuntu Vivid): | |
status: | In Progress → Fix Committed |
tags: |
added: verification-done-vivid removed: verification-needed-vivid |
Default Comment by Bridge