Thanks Emil,

> -----Original Message-----
> From: Emil Medve [mailto:[email protected]]
> Sent: Monday, February 16, 2015 11:35 AM
> To: Sethi Varun-B16395; [email protected];
> [email protected]; [email protected]
> 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:[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
Acked-by: Varun Sethi <[email protected]>
_______________________________________________
iommu mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to