Thanks Emil,
> -----Original Message----- > From: Emil Medve [mailto:[email protected]] > Sent: Monday, February 16, 2015 11:35 AM > To: Sethi Varun-B16395; [email protected]; > [email protected]; [email protected] > Subject: Re: [PATCH] iommu/fsl: Really fix init section(s) content > > Hello Varun, > > > On 02/13/2015 12:39 AM, Sethi Varun-B16395 wrote: > > Thanks Emil, Has this also been tested in context of DPAA? > > Yes. We regressed it across all the SoC(s) > > > Cheers, > > > >> -----Original Message----- > >> From: Emil Medve [mailto:[email protected]] > >> Sent: Friday, February 13, 2015 3:15 AM > >> To: [email protected]; [email protected]; > >> [email protected]; Sethi Varun-B16395 > >> Cc: Medve Emilian-EMMEDVE1 > >> Subject: [PATCH] iommu/fsl: Really fix init section(s) content > >> > >> '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 > >> > >> Signed-off-by: Emil Medve <[email protected]> > >> --- > >> > >> Hello Joerg, > >> > >> > >> This is a critical fix and needs to go into v3.20 > >> > >> > >> Cheers, > >> > >> drivers/iommu/fsl_pamu.c | 26 +++++++++++++------------- > >> 1 file changed, 13 insertions(+), 13 deletions(-) > >> > >> diff --git a/drivers/iommu/fsl_pamu.c b/drivers/iommu/fsl_pamu.c > >> index abeedc9..2570f2a 100644 > >> --- a/drivers/iommu/fsl_pamu.c > >> +++ b/drivers/iommu/fsl_pamu.c > >> @@ -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(struct > paace > >> *ppaace, int paace_type) > >> * 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 *omt) > >> * 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(unsigned > >> long pamu_reg_base) } > >> > >> /* 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(unsigned long > >> pamu_reg_base, unsigned long pamu } > >> > >> /* 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(struct > >> platform_device *pdev) > >> int 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", > >> }, > >> -- > >> 2.3.0 Acked-by: Varun Sethi <[email protected]> _______________________________________________ iommu mailing list [email protected] https://lists.linuxfoundation.org/mailman/listinfo/iommu
