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
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to