* [PATCH] iommu/fsl: Really fix init section(s) content
@ 2015-02-12 21:45 Emil Medve
[not found] ` <1423777528-8143-1-git-send-email-Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org>
0 siblings, 1 reply; 5+ messages in thread
From: Emil Medve @ 2015-02-12 21:45 UTC (permalink / raw)
To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
joro-zLv9SwRftAIdnm+yROfE0A, jroedel-l3A5Bk7waGM,
Varun.Sethi-eDlz3WWmN0ll57MIdRCFDg
Cc: Emil Medve
'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 <Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org>
---
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
^ permalink raw reply related [flat|nested] 5+ messages in thread[parent not found: <1423777528-8143-1-git-send-email-Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org>]
* RE: [PATCH] iommu/fsl: Really fix init section(s) content [not found] ` <1423777528-8143-1-git-send-email-Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org> @ 2015-02-13 6:39 ` Varun Sethi [not found] ` <BN3PR0301MB1219994CDB540EDC2F7B1EC3EA230-CEkquS/Gb81uuip9JPHoc5wN6zqB+hSMnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org> 2015-03-03 13:55 ` Joerg Roedel 1 sibling, 1 reply; 5+ messages in thread From: Varun Sethi @ 2015-02-13 6:39 UTC (permalink / raw) To: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, jroedel-l3A5Bk7waGM@public.gmane.org Cc: Emilian Medve Thanks Emil, Has this also been tested in context of DPAA? > -----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 <Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org> > --- > > 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <BN3PR0301MB1219994CDB540EDC2F7B1EC3EA230-CEkquS/Gb81uuip9JPHoc5wN6zqB+hSMnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org>]
* Re: [PATCH] iommu/fsl: Really fix init section(s) content [not found] ` <BN3PR0301MB1219994CDB540EDC2F7B1EC3EA230-CEkquS/Gb81uuip9JPHoc5wN6zqB+hSMnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org> @ 2015-02-16 6:05 ` Emil Medve [not found] ` <54E1889D.5040902-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org> 0 siblings, 1 reply; 5+ messages in thread From: Emil Medve @ 2015-02-16 6:05 UTC (permalink / raw) To: Sethi Varun-B16395, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, jroedel-l3A5Bk7waGM@public.gmane.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 <Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org> >> --- >> >> 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <54E1889D.5040902-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org>]
* RE: [PATCH] iommu/fsl: Really fix init section(s) content [not found] ` <54E1889D.5040902-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org> @ 2015-02-16 6:42 ` Varun Sethi 0 siblings, 0 replies; 5+ messages in thread From: Varun Sethi @ 2015-02-16 6:42 UTC (permalink / raw) To: Emilian Medve, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, jroedel-l3A5Bk7waGM@public.gmane.org Thanks Emil, > -----Original Message----- > From: Emil Medve [mailto:Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org] > Sent: Monday, February 16, 2015 11:35 AM > To: Sethi Varun-B16395; iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org; > joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org; jroedel-l3A5Bk7waGM@public.gmane.org > 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: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 <Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org> > >> --- > >> > >> 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 <Varun.Sethi-KZfg59tc24xl57MIdRCFDg@public.gmane.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] iommu/fsl: Really fix init section(s) content [not found] ` <1423777528-8143-1-git-send-email-Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org> 2015-02-13 6:39 ` Varun Sethi @ 2015-03-03 13:55 ` Joerg Roedel 1 sibling, 0 replies; 5+ messages in thread From: Joerg Roedel @ 2015-03-03 13:55 UTC (permalink / raw) To: Emil Medve Cc: Varun.Sethi-eDlz3WWmN0ll57MIdRCFDg, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA, jroedel-l3A5Bk7waGM On Thu, Feb 12, 2015 at 03:45:28PM -0600, Emil Medve wrote: > '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 <Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org> Please resend this with the Acks, a proper stable-tag and a Fixes: line with the commit this patch fixes. Joerg ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-03-03 13:55 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-12 21:45 [PATCH] iommu/fsl: Really fix init section(s) content Emil Medve
[not found] ` <1423777528-8143-1-git-send-email-Emilian.Medve-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org>
2015-02-13 6:39 ` Varun Sethi
[not found] ` <BN3PR0301MB1219994CDB540EDC2F7B1EC3EA230-CEkquS/Gb81uuip9JPHoc5wN6zqB+hSMnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org>
2015-02-16 6:05 ` Emil Medve
[not found] ` <54E1889D.5040902-eDlz3WWmN0ll57MIdRCFDg@public.gmane.org>
2015-02-16 6:42 ` Varun Sethi
2015-03-03 13:55 ` Joerg Roedel
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox