Commit 7d6d38aa authored by Emil Medve's avatar Emil Medve Committed by Greg Kroah-Hartman

iommu/fsl: Really fix init section(s) content

commit 57fb907d upstream.

'0f1fb99b 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

'cd70d465 iommu/fsl: Various cleanups' contains annotations that go further down
the wrong path laid by '0f1fb99b 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

Fixes: 0f1fb99b ("iommu/fsl: Fix section mismatch")
Fixes: cd70d465 ("iommu/fsl: Various cleanups")
Signed-off-by: default avatarEmil Medve <Emilian.Medve@Freescale.com>
Acked-by: default avatarVarun Sethi <Varun.Sethi@freescale.com>
Tested-by: default avatarMadalin Bucur <Madalin.Bucur@freescale.com>
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0332dbad
...@@ -41,7 +41,6 @@ struct pamu_isr_data { ...@@ -41,7 +41,6 @@ struct pamu_isr_data {
static struct paace *ppaact; static struct paace *ppaact;
static struct paace *spaact; static struct paace *spaact;
static struct ome *omt __initdata;
/* /*
* Table for matching compatible strings, for device tree * Table for matching compatible strings, for device tree
...@@ -50,7 +49,7 @@ static struct ome *omt __initdata; ...@@ -50,7 +49,7 @@ static struct ome *omt __initdata;
* SOCs. For the older SOCs "fsl,qoriq-device-config-1.0" * SOCs. For the older SOCs "fsl,qoriq-device-config-1.0"
* string would be used. * 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-1.0", },
{ .compatible = "fsl,qoriq-device-config-2.0", }, { .compatible = "fsl,qoriq-device-config-2.0", },
{} {}
...@@ -599,7 +598,7 @@ u32 get_stash_id(u32 stash_dest_hint, u32 vcpu) ...@@ -599,7 +598,7 @@ u32 get_stash_id(u32 stash_dest_hint, u32 vcpu)
* Memory accesses to QMAN and BMAN private memory need not be coherent, so * Memory accesses to QMAN and BMAN private memory need not be coherent, so
* clear the PAACE entry coherency attribute for them. * 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) { switch (paace_type) {
case QMAN_PAACE: case QMAN_PAACE:
...@@ -629,7 +628,7 @@ static void __init setup_qbman_paace(struct paace *ppaace, int paace_type) ...@@ -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 * this table to translate device transaction to appropriate corenet
* transaction. * transaction.
*/ */
static void __init setup_omt(struct ome *omt) static void setup_omt(struct ome *omt)
{ {
struct ome *ome; struct ome *ome;
...@@ -666,7 +665,7 @@ static void __init setup_omt(struct ome *omt) ...@@ -666,7 +665,7 @@ static void __init setup_omt(struct ome *omt)
* Get the maximum number of PAACT table entries * Get the maximum number of PAACT table entries
* and subwindows supported by PAMU * 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; u32 pc_val;
...@@ -676,9 +675,9 @@ static void __init get_pamu_cap_values(unsigned long pamu_reg_base) ...@@ -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 */ /* 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, 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 ppaact_phys, phys_addr_t spaact_phys,
phys_addr_t omt_phys) phys_addr_t omt_phys)
{ {
u32 *pc; u32 *pc;
struct pamu_mmap_regs *pamu_regs; struct pamu_mmap_regs *pamu_regs;
...@@ -720,7 +719,7 @@ static int __init setup_one_pamu(unsigned long pamu_reg_base, unsigned long pamu ...@@ -720,7 +719,7 @@ static int __init setup_one_pamu(unsigned long pamu_reg_base, unsigned long pamu
} }
/* Enable all device LIODNS */ /* Enable all device LIODNS */
static void __init setup_liodns(void) static void setup_liodns(void)
{ {
int i, len; int i, len;
struct paace *ppaace; struct paace *ppaace;
...@@ -846,7 +845,7 @@ struct ccsr_law { ...@@ -846,7 +845,7 @@ struct ccsr_law {
/* /*
* Create a coherence subdomain for a given memory block. * 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; struct device_node *np;
const __be32 *iprop; const __be32 *iprop;
...@@ -988,7 +987,7 @@ static int __init create_csd(phys_addr_t phys, size_t size, u32 csd_port_id) ...@@ -988,7 +987,7 @@ static int __init create_csd(phys_addr_t phys, size_t size, u32 csd_port_id)
static const struct { static const struct {
u32 svr; u32 svr;
u32 port_id; u32 port_id;
} port_id_map[] __initconst = { } port_id_map[] = {
{(SVR_P2040 << 8) | 0x10, 0xFF000000}, /* P2040 1.0 */ {(SVR_P2040 << 8) | 0x10, 0xFF000000}, /* P2040 1.0 */
{(SVR_P2040 << 8) | 0x11, 0xFF000000}, /* P2040 1.1 */ {(SVR_P2040 << 8) | 0x11, 0xFF000000}, /* P2040 1.1 */
{(SVR_P2041 << 8) | 0x10, 0xFF000000}, /* P2041 1.0 */ {(SVR_P2041 << 8) | 0x10, 0xFF000000}, /* P2041 1.0 */
...@@ -1006,7 +1005,7 @@ static const struct { ...@@ -1006,7 +1005,7 @@ static const struct {
#define SVR_SECURITY 0x80000 /* The Security (E) bit */ #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; struct device *dev = &pdev->dev;
void __iomem *pamu_regs = NULL; void __iomem *pamu_regs = NULL;
...@@ -1022,6 +1021,7 @@ static int __init fsl_pamu_probe(struct platform_device *pdev) ...@@ -1022,6 +1021,7 @@ static int __init fsl_pamu_probe(struct platform_device *pdev)
int irq; int irq;
phys_addr_t ppaact_phys; phys_addr_t ppaact_phys;
phys_addr_t spaact_phys; phys_addr_t spaact_phys;
struct ome *omt;
phys_addr_t omt_phys; phys_addr_t omt_phys;
size_t mem_size = 0; size_t mem_size = 0;
unsigned int order = 0; unsigned int order = 0;
...@@ -1200,7 +1200,7 @@ static int __init fsl_pamu_probe(struct platform_device *pdev) ...@@ -1200,7 +1200,7 @@ static int __init fsl_pamu_probe(struct platform_device *pdev)
return ret; return ret;
} }
static struct platform_driver fsl_of_pamu_driver __initdata = { static struct platform_driver fsl_of_pamu_driver = {
.driver = { .driver = {
.name = "fsl-of-pamu", .name = "fsl-of-pamu",
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment