From mboxrd@z Thu Jan 1 00:00:00 1970 From: Emil Medve Subject: Re: [PATCH] iommu/fsl: Really fix init section(s) content Date: Mon, 16 Feb 2015 00:05:17 -0600 Message-ID: <54E1889D.5040902@Freescale.com> References: <1423777528-8143-1-git-send-email-Emilian.Medve@Freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Sethi Varun-B16395 , "iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org" , "joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org" , "jroedel-l3A5Bk7waGM@public.gmane.org" List-Id: iommu@lists.linux-foundation.org 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:Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org] >> Sent: Friday, February 13, 2015 3:15 AM >> To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org; joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; jroedel-l3A5Bk7waGM@public.gmane.org; >> 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 >> --- >> >> 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