Patch "PCI: keystone: Fix MSI code that retrieves struct pcie_port pointer" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
PCI: keystone: Fix MSI code that retrieves struct pcie_port pointer
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pci-keystone-fix-msi-code-that-retrieves-struct-pcie_port-pointer.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
79e3f4a853ed161cd4c06d84b50beebf961a47c6Mon Sep 17 00:00:00 2001
From: Murali Karicheri <[email protected]>
Date: Mon, 29 Feb 2016 17:18:22 -0600
Subject: PCI: keystone: Fix MSI code that retrieves struct pcie_port pointer
From: Murali Karicheri <[email protected]>
commit 79e3f4a853ed161cd4c06d84b50beebf961a47c6 upstream.
Commit cbce7900598c ("PCI: designware: Make driver arch-agnostic") changed the host bridge sysdata pointer from the ARM pci_sys_data to the DesignWare pcie_port structure, and changed pcie-designware.c to reflect that. But it did not change the corresponding code in pci-keystone-dw.c, so it caused crashes on Keystone:
Unable to handle kernel NULL pointer dereference at virtual address 00000030 pgd = c0003000 [00000030] *pgd=80000800004003, *pmd=00000000 Internal error: Oops: 206 [#1] PREEMPT SMP ARM CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.4.2-00139-gb74f926 #2 Hardware name: Keystone PC is at ks_dw_pcie_msi_irq_unmask+0x24/0x58
Change pci-keystone-dw.c to expect sysdata to be the struct pcie_port pointer.
--- drivers/pci/host/pci-keystone-dw.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-)
drivers/pci/host/pci-keystone-dw.c +3 -8
@@ -58,11 +58,6 @@#define to_keystone_pcie (x) container_of(x, struct keystone_pcie, pp) -static inline struct pcie_port *sys_to_pcie (struct pci_sys_data *sys) -{ -return sys->private_data; -} -static inline void update_reg_offset_bit_pos (u32 offset,u32 *reg_offset,u32 *bit_pos) {
@@ -108,7 +103,7 @@ static void ks_dw_pcie_msi_irq_ack(strucstruct pcie_port *pp; msi =irq_data_get_msi_desc (d); - pp =sys_to_pcie (msi_desc_to_pci_sysdata (msi)); + pp = (struct pcie_port *)msi_desc_to_pci_sysdata (msi); ks_pcie =to_keystone_pcie (pp); offset = d->irq -irq_linear_revmap (pp->irq_domain,0 );update_reg_offset_bit_pos (offset, ®_offset, &bit_pos);
@@ -146,7 +141,7 @@ static void ks_dw_pcie_msi_irq_mask(struu32 offset; msi =irq_data_get_msi_desc (d); - pp =sys_to_pcie (msi_desc_to_pci_sysdata (msi)); + pp = (struct pcie_port *)msi_desc_to_pci_sysdata (msi); ks_pcie =to_keystone_pcie (pp); offset = d->irq -irq_linear_revmap (pp->irq_domain,0 );
@@ -167,7 +162,7 @@ static void ks_dw_pcie_msi_irq_unmask(stu32 offset; msi =irq_data_get_msi_desc (d); - pp =sys_to_pcie (msi_desc_to_pci_sysdata (msi)); + pp = (struct pcie_port *)msi_desc_to_pci_sysdata (msi); ks_pcie =to_keystone_pcie (pp); offset = d->irq -irq_linear_revmap (pp->irq_domain,0 );
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/pci-keystone-fix-msi-code-that-retrieves-struct-pcie_port-pointer.patch