powerpc: hugetlb: replace __get_cpu_var with get_cpu_var
Subsystems (3)
PATCH 1/1 powerpc: hugetlb: replace __get_cpu_var with get_cpu_var
Replace __get_cpu_var safely with get_cpu_var to avoid the following call trace:
[ 7253.637591] BUG: using smp_processor_id() in preemptible [00000000 00000000] code: hugemmap01/9048 [ 7253.637601] caller is free_hugepd_range.constprop.25+0x88/0x1a8 [ 7253.637605] CPU: 1 PID: 9048 Comm: hugemmap01 Not tainted 3.10.20-rt14+ #114 [ 7253.637606] Call Trace: [ 7253.637617] [cb049d80] [c0007ea4] show_stack+0x4c/0x168 (unreliable) [ 7253.637624] [cb049dc0] [c031c674] debug_smp_processor_id+0x114/0x134 [ 7253.637628] [cb049de0] [c0016d28] free_hugepd_range.constprop.25+0x88/0x1a8 [ 7253.637632] [cb049e00] [c001711c] hugetlb_free_pgd_range+0x6c/0x168 [ 7253.637639] [cb049e40] [c0117408] free_pgtables+0x12c/0x150 [ 7253.637646] [cb049e70] [c011ce38] unmap_region+0xa0/0x11c [ 7253.637671] [cb049ef0] [c011f03c] do_munmap+0x224/0x3bc [ 7253.637676] [cb049f20] [c011f2e0] vm_munmap+0x38/0x5c [ 7253.637682] [cb049f40] [c000ef88] ret_from_syscall+0x0/0x3c [ 7253.637686] --- Exception: c01 at 0xff16004
--- arch/powerpc/mm/hugetlbpage.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
arch/powerpc/mm/hugetlbpage.c +3 -1
@@ -472,12 +472,13 @@ static void hugepd_free(struct mmu_gather *tlb, void *hugepte) {struct hugepd_freelist **batchp; - batchp = &__get_cpu_var (hugepd_freelist_cur); + batchp = &get_cpu_var (hugepd_freelist_cur);if (atomic_read (&tlb->mm->mm_users) <2 ||cpumask_equal (mm_cpumask (tlb->mm),cpumask_of (smp_processor_id ()))) {kmem_cache_free (hugepte_cache, hugepte); +put_cpu_var (hugepd_freelist_cur);return ; }
@@ -491,6 +492,7 @@ static void hugepd_free(struct mmu_gather *tlb, void *hugepte)call_rcu_sched (&(*batchp)->rcu, hugepd_free_rcu_callback); *batchp = NULL; } +put_cpu_var (hugepd_freelist_cur); }#endif
Signature · 1 line
1.7.9.5
PATCH 1/1 powerpc: 85xx: EDAC PCI: request irq as IRQF_SHARED
AER driver needs to share this PCI err irq with EDAC, otherwise we can't register AER driver successfully as follows:
genirq: Flags mismatch irq 482. 00000080 (aerdrv) vs. 00000020 ([EDAC] PCI err)
CPU: 3 PID: 1 Comm: swapper/0 Not tainted 3.13.0-rc1-148346-g2513817 #69 Call Trace: [ee063cb0] [c00070c4] show_stack+0x44/0x160 (unreliable) [ee063cf0] [c055fac4] dump_stack+0x78/0xa0 [ee063d00] [c006e16c] __setup_irq+0x51c/0x540 [ee063d40] [c006e264] request_threaded_irq+0xd4/0x150 [ee063d70] [c0280d10] aer_probe+0xe0/0x2a0 [ee063da0] [c027e590] pcie_port_probe_service+0x40/0x90 [ee063dc0] [c02c253c] driver_probe_device+0x8c/0x250 [ee063de0] [c02c27bc] __driver_attach+0xbc/0xc0 [ee063e00] [c02c0760] bus_for_each_dev+0x70/0xb0 [ee063e30] [c02c1f94] driver_attach+0x24/0x40 [ee063e40] [c02c1aec] bus_add_driver+0xfc/0x210 [ee063e60] [c02c2d98] driver_register+0x88/0x140 [ee063e70] [c027e4b4] pcie_port_service_register+0x64/0x80 [ee063e80] [c06fb14c] aer_service_init+0x28/0x38 [ee063e90] [c0002468] do_one_initcall+0x158/0x1b0 [ee063f00] [c06e291c] kernel_init_freeable+0x128/0x1d4 [ee063f30] [c0002ac4] kernel_init+0x14/0x130 [ee063f40] [c000f84c] ret_from_kernel_thread+0x5c/0x64 aer: probe of 0000:00:00.0:pcie02 failed with error -16 genirq: Flags mismatch irq 480. 00000080 (aerdrv) vs. 00000020 ([EDAC] PCI err) CPU: 3 PID: 1 Comm: swapper/0 Not tainted 3.13.0-rc1-148346-g2513817 #69 Call Trace: [ee063cb0] [c00070c4] show_stack+0x44/0x160 (unreliable) [ee063cf0] [c055fac4] dump_stack+0x78/0xa0 [ee063d00] [c006e16c] __setup_irq+0x51c/0x540 [ee063d40] [c006e264] request_threaded_irq+0xd4/0x150 [ee063d70] [c0280d10] aer_probe+0xe0/0x2a0 [ee063da0] [c027e590] pcie_port_probe_service+0x40/0x90 [ee063dc0] [c02c253c] driver_probe_device+0x8c/0x250 [ee063de0] [c02c27bc] __driver_attach+0xbc/0xc0 [ee063e00] [c02c0760] bus_for_each_dev+0x70/0xb0 [ee063e30] [c02c1f94] driver_attach+0x24/0x40 [ee063e40] [c02c1aec] bus_add_driver+0xfc/0x210 [ee063e60] [c02c2d98] driver_register+0x88/0x140 [ee063e70] [c027e4b4] pcie_port_service_register+0x64/0x80 [ee063e80] [c06fb14c] aer_service_init+0x28/0x38 [ee063e90] [c0002468] do_one_initcall+0x158/0x1b0 [ee063f00] [c06e291c] kernel_init_freeable+0x128/0x1d4 [ee063f30] [c0002ac4] kernel_init+0x14/0x130 [ee063f40] [c000f84c] ret_from_kernel_thread+0x5c/0x64
aer: probe of 0001:02:00.0:pcie02 failed with error -16
--- drivers/edac/mpc85xx_edac.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/edac/mpc85xx_edac.c +2 -1
@@ -297,7 +297,8 @@ int mpc85xx_pci_err_probe(struct platform_device *op)if (edac_op_state ==EDAC_OPSTATE_INT ) { pdata->irq =irq_of_parse_and_map (op->dev.of_node,0 ); res =devm_request_irq (&op->dev, pdata->irq, - mpc85xx_pci_isr,IRQF_DISABLED , + mpc85xx_pci_isr,IRQF_SHARED | +IRQF_DISABLED ,"[EDAC] PCI err" , pci);if (res <0 ) { printk(KERN_ERR
Signature · 1 line
1.7.9.5
Re: [PATCH] powerpc: 85xx: EDAC PCI: request irq as IRQF_SHARED
Quoted 46 lines · Tiejun Chen
AER driver needs to share this PCI err irq with EDAC, otherwise we can't register AER driver successfully as follows:
genirq: Flags mismatch irq 482. 00000080 (aerdrv) vs. 00000020 ([EDAC] PCI err)
CPU: 3 PID: 1 Comm: swapper/0 Not tainted 3.13.0-rc1-148346-g2513817 #69 Call Trace: [ee063cb0] [c00070c4] show_stack+0x44/0x160 (unreliable) [ee063cf0] [c055fac4] dump_stack+0x78/0xa0 [ee063d00] [c006e16c] __setup_irq+0x51c/0x540 [ee063d40] [c006e264] request_threaded_irq+0xd4/0x150 [ee063d70] [c0280d10] aer_probe+0xe0/0x2a0 [ee063da0] [c027e590] pcie_port_probe_service+0x40/0x90 [ee063dc0] [c02c253c] driver_probe_device+0x8c/0x250 [ee063de0] [c02c27bc] __driver_attach+0xbc/0xc0 [ee063e00] [c02c0760] bus_for_each_dev+0x70/0xb0 [ee063e30] [c02c1f94] driver_attach+0x24/0x40 [ee063e40] [c02c1aec] bus_add_driver+0xfc/0x210 [ee063e60] [c02c2d98] driver_register+0x88/0x140 [ee063e70] [c027e4b4] pcie_port_service_register+0x64/0x80 [ee063e80] [c06fb14c] aer_service_init+0x28/0x38 [ee063e90] [c0002468] do_one_initcall+0x158/0x1b0 [ee063f00] [c06e291c] kernel_init_freeable+0x128/0x1d4 [ee063f30] [c0002ac4] kernel_init+0x14/0x130 [ee063f40] [c000f84c] ret_from_kernel_thread+0x5c/0x64 aer: probe of 0000:00:00.0:pcie02 failed with error -16 genirq: Flags mismatch irq 480. 00000080 (aerdrv) vs. 00000020 ([EDAC] PCI err) CPU: 3 PID: 1 Comm: swapper/0 Not tainted 3.13.0-rc1-148346-g2513817 #69 Call Trace: [ee063cb0] [c00070c4] show_stack+0x44/0x160 (unreliable) [ee063cf0] [c055fac4] dump_stack+0x78/0xa0 [ee063d00] [c006e16c] __setup_irq+0x51c/0x540 [ee063d40] [c006e264] request_threaded_irq+0xd4/0x150 [ee063d70] [c0280d10] aer_probe+0xe0/0x2a0 [ee063da0] [c027e590] pcie_port_probe_service+0x40/0x90 [ee063dc0] [c02c253c] driver_probe_device+0x8c/0x250 [ee063de0] [c02c27bc] __driver_attach+0xbc/0xc0 [ee063e00] [c02c0760] bus_for_each_dev+0x70/0xb0 [ee063e30] [c02c1f94] driver_attach+0x24/0x40 [ee063e40] [c02c1aec] bus_add_driver+0xfc/0x210 [ee063e60] [c02c2d98] driver_register+0x88/0x140 [ee063e70] [c027e4b4] pcie_port_service_register+0x64/0x80 [ee063e80] [c06fb14c] aer_service_init+0x28/0x38 [ee063e90] [c0002468] do_one_initcall+0x158/0x1b0 [ee063f00] [c06e291c] kernel_init_freeable+0x128/0x1d4 [ee063f30] [c0002ac4] kernel_init+0x14/0x130 [ee063f40] [c000f84c] ret_from_kernel_thread+0x5c/0x64
Quoted 6 lines
aer: probe of 0001:02:00.0:pcie02 failed with error -16
Signed-off-by Tiejun Chen <[email protected]>--- drivers/edac/mpc85xx_edac.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
This patch should be sent to the maintainer and list specified under EDAC-MPC85XX.
Quoted 5 lines
drivers/edac/mpc85xx_edac.c +0
-0
drivers/edac/mpc85xx_edac.c int mpc85xx_pci_err_probe(struct platform_device *op) · line 304
Quoted 9 lines
drivers/edac/mpc85xx_edac.c +2
-1@@ -297,7 +297,8 @@ int mpc85xx_pci_err_probe(struct platform_device *op)if (edac_op_state ==EDAC_OPSTATE_INT ) { pdata->irq =irq_of_parse_and_map (op->dev.of_node,0 ); res =devm_request_irq (&op->dev, pdata->irq, - mpc85xx_pci_isr,IRQF_DISABLED , + mpc85xx_pci_isr,IRQF_SHARED | +IRQF_DISABLED ,"[EDAC] PCI err" , pci);if (res <0 ) { printk(KERN_ERR
While you're touching this, perhaps remove IRQF_DISABLED which is a deprecated no-op and will eventually be removed.
-Scott
arch/powerpc/mm/hugetlbpage.c static void hugepd_free(struct mmu_gather *tlb, void *hugepte) · line 483
Quoted 8 lines · Tiejun Chen
arch/powerpc/mm/hugetlbpage.c +1
-0if (atomic_read (&tlb->mm->mm_users) <2 ||cpumask_equal (mm_cpumask (tlb->mm),cpumask_of (smp_processor_id ()))) {kmem_cache_free (hugepte_cache, hugepte); +put_cpu_var (hugepd_freelist_cur);return ; }
Whitespace
arch/powerpc/mm/hugetlbpage.c static void hugepd_free(struct mmu_gather *tlb, void *hugepte) · line 496
Quoted 6 lines
arch/powerpc/mm/hugetlbpage.c +1
-0@@ -491,6 +492,7 @@ static void hugepd_free(struct mmu_gather *tlb, void *hugepte)call_rcu_sched (&(*batchp)->rcu, hugepd_free_rcu_callback); *batchp =NULL ; } +put_cpu_var (hugepd_freelist_cur); }
A blank line before "put_cpu_var" would be nice.
-Scott