Patch "iommu/fsl: Really fix init section(s) content" has been added to the 4.2-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iommu/fsl: Really fix init section(s) content
to the 4.2-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:
iommu-fsl-really-fix-init-section-s-content.patch
and it can be found in the queue-4.2 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
57fb907da89977640ef183556a621336c1348fa0Mon Sep 17 00:00:00 2001
From: Emil Medve <[email protected]>
Date: Wed, 25 Mar 2015 00:28:48 -0500
Subject: iommu/fsl: Really fix init section(s) content
From: Emil Medve <[email protected]>
commit 57fb907da89977640ef183556a621336c1348fa0 upstream.
'0f1fb99 iommu/fsl: Fix section mismatch' was intended to address the modpost warning and the potential crash. Crash which is actually easy to trigger with a 'unbind' followed by a 'bind' sequence. The fix is wrong as fsl_of_pamu_driver.driver gets added by bus_add_driver() to a couple of klist(s) which become invalid/corrupted as soon as the init sections are freed. Depending on when/how the init sections storage is reused various/random errors and crashes will happen
'cd70d46 iommu/fsl: Various cleanups' contains annotations that go further down the wrong path laid by '0f1fb99 iommu/fsl: Fix section mismatch'
Now remove all the incorrect annotations from the above mentioned patches (not exactly a revert) and those previously existing in the code, This fixes the modpost warning(s), the unbind/bind sequence crashes and the random errors/crashes
--- drivers/iommu/fsl_pamu.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-)
drivers/iommu/fsl_pamu.c +13 -13
@@ -41,7 +41,6 @@ struct pamu_isr_data {static struct paace *ppaact;static struct paace *spaact; -static struct ome *omt__initdata ;/* * Table for matching compatible strings, for device tree
@@ -50,7 +49,7 @@ static struct ome *omt __initdata;* SOCs. For the older SOCs "fsl,qoriq-device-config-1.0" * string would be used. */ -static const struct of_device_id guts_device_ids[]__initconst = { +static const struct of_device_id guts_device_ids[] = { { .compatible ="fsl,qoriq-device-config-1.0" , }, { .compatible ="fsl,qoriq-device-config-2.0" , }, {}
@@ -599,7 +598,7 @@ found_cpu_node:* Memory accesses to QMAN and BMAN private memory need not be coherent, so * clear the PAACE entry coherency attribute for them. */ -static void __init setup_qbman_paace (struct paace *ppaace,int paace_type) +static void setup_qbman_paace (struct paace *ppaace,int paace_type) {switch (paace_type) {case QMAN_PAACE :
@@ -629,7 +628,7 @@ static void __init setup_qbman_paace(str* this table to translate device transaction to appropriate corenet * transaction. */ -static void __init setup_omt (struct ome *omt) +static void setup_omt (struct ome *omt) {struct ome *ome;
@@ -666,7 +665,7 @@ static void __init setup_omt(struct ome* Get the maximum number of PAACT table entries * and subwindows supported by PAMU */ -static void __init get_pamu_cap_values (unsigned long pamu_reg_base) +static void get_pamu_cap_values (unsigned long pamu_reg_base) {u32 pc_val;
@@ -676,9 +675,9 @@ static void __init get_pamu_cap_values(u }/* Setup PAMU registers pointing to PAACT, SPAACT and OMT */ -static int __init setup_one_pamu (unsigned long pamu_reg_base,unsigned long pamu_reg_size, -phys_addr_t ppaact_phys,phys_addr_t spaact_phys, -phys_addr_t omt_phys) +static int setup_one_pamu (unsigned long pamu_reg_base,unsigned long pamu_reg_size, +phys_addr_t ppaact_phys,phys_addr_t spaact_phys, +phys_addr_t omt_phys) {u32 *pc;struct pamu_mmap_regs *pamu_regs;
@@ -720,7 +719,7 @@ static int __init setup_one_pamu(unsigne }/* Enable all device LIODNS */ -static void __init setup_liodns (void ) +static void setup_liodns (void ) {int i, len;struct paace *ppaace;
@@ -846,7 +845,7 @@ struct ccsr_law {/* * Create a coherence subdomain for a given memory block. */ -static int __init create_csd (phys_addr_t phys,size_t size,u32 csd_port_id) +static int create_csd (phys_addr_t phys,size_t size,u32 csd_port_id) {struct device_node *np;const __be32 *iprop;
@@ -988,7 +987,7 @@ error:static const struct {u32 svr;u32 port_id; -} port_id_map[]__initconst = { +} port_id_map[] = { {(SVR_P2040 <<8 ) |0x10 ,0xFF000000 },/* P2040 1.0 */ {(SVR_P2040 <<8 ) |0x11 ,0xFF000000 },/* P2040 1.1 */ {(SVR_P2041 <<8 ) |0x10 ,0xFF000000 },/* P2041 1.0 */
@@ -1006,7 +1005,7 @@ static const struct {#define SVR_SECURITY 0x80000/* The Security (E) bit */ -static int __init fsl_pamu_probe (struct platform_device *pdev) +static int fsl_pamu_probe (struct platform_device *pdev) {struct device *dev = &pdev->dev;void __iomem *pamu_regs =NULL ;
@@ -1022,6 +1021,7 @@ static int __init fsl_pamu_probe(structint irq;phys_addr_t ppaact_phys;phys_addr_t spaact_phys; +struct ome *omt;phys_addr_t omt_phys;size_t mem_size =0 ;unsigned int order =0 ;
@@ -1200,7 +1200,7 @@ error:return ret; } -static struct platform_driver fsl_of_pamu_driver__initdata = { +static struct platform_driver fsl_of_pamu_driver = { .driver = { .name ="fsl-of-pamu" , },
Patches currently in stable-queue which might be from [email protected] are
queue-4.2/iommu-fsl-really-fix-init-section-s-content.patch