* [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
* 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
* 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
* 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