Linux IOMMU Development
 help / color / mirror / Atom feed
* [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