From: Bjorn Helgaas <helgaas@kernel.org>
To: Christian Gmeiner <christian.gmeiner@gmail.com>
Cc: linux-kernel@vger.kernel.org,
"Kishon Vijay Abraham I" <kishon@ti.com>,
"Tom Joseph" <tjoseph@cadence.com>,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Bjorn Helgaas" <bhelgaas@google.com>,
linux-omap@vger.kernel.org, linux-pci@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] Revert "PCI: j721e: Drop redundant struct device *"
Date: Wed, 26 Jan 2022 14:51:05 -0600 [thread overview]
Message-ID: <20220126205105.GA47875@bhelgaas> (raw)
In-Reply-To: <20220124122132.435743-1-christian.gmeiner@gmail.com>
On Mon, Jan 24, 2022 at 01:21:22PM +0100, Christian Gmeiner wrote:
> This reverts commit 19e863828acf6d8ac8475ba1fd93c0fe17fdc4ef.
>
> Fixes the following oops:
> Unable to handle kernel NULL pointer dereference at virtual address 0000000000000010
My fault, sorry for breaking this. Thanks a lot for the report!
19e863828acf ("PCI: j721e: Drop redundant struct device *") failed to
consider the uses of pcie->cdns_pcie->dev before pcie->cdns_pcie is
initialized. I'll figure out what to do about it.
> Internal error: Oops: 96000004 [#1] PREEMPT SMP
> Modules linked in:
> CPU: 1 PID: 7 Comm: kworker/u4:0 Not tainted 5.17.0-rc1-00086-ge38b27816fea-dirty #71
> Hardware name: CPE0108 (DT)
> Workqueue: events_unbound deferred_probe_work_func
> pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> pc : j721e_pcie_probe+0x184/0x600
> lr : j721e_pcie_probe+0x170/0x600
> sp : ffff80000957bae0
> x29: ffff80000957bae0 x28: ffff800009357000 x27: ffff00000000c078
> x26: ffff00003fe047a8 x25: 0000000000000000 x24: ffff0000000f5280
> x23: ffff800008c98f78 x22: ffff800008f90ff0 x21: ffff000000231410
> x20: ffff000002ef2780 x19: 0000000000000021 x18: 0000000000000001
> x17: 0000000000000000 x16: 0000000000058c00 x15: ffffffffffffffff
> x14: ffffffffffffffff x13: 0000000000000010 x12: 0101010101010101
> x11: 0000000000000040 x10: ffff8000093e06c8 x9 : ffff8000093e06c0
> x8 : ffff000000400270 x7 : 0000000000000000 x6 : ffff000000231590
> x5 : ffff80000957b9e0 x4 : 0000000000000000 x3 : ffff0000002314f4
> x2 : 0000000000000000 x1 : ffff0000000f5280 x0 : 0000000000000000
> Call trace:
> j721e_pcie_probe+0x184/0x600
> platform_probe+0x68/0xe0
> really_probe+0x144/0x320
> __driver_probe_device+0xc4/0xe0
> driver_probe_device+0x7c/0x110
> __device_attach_driver+0x90/0xe0
> bus_for_each_drv+0x78/0xd0
> __device_attach+0xf0/0x150
> device_initial_probe+0x14/0x20
> bus_probe_device+0x9c/0xb0
> deferred_probe_work_func+0x88/0xc0
> process_one_work+0x1bc/0x340
> worker_thread+0x1f8/0x420
> kthread+0x110/0x120
> ret_from_fork+0x10/0x20
> Code: f9400280 a90573fb d0005396 913fc2d6 (f9400800)
>
> Fixes: 19e863828acf ("PCI: j721e: Drop redundant struct device *")
> Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
> ---
> drivers/pci/controller/cadence/pci-j721e.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/pci-j721e.c b/drivers/pci/controller/cadence/pci-j721e.c
> index 489586a4cdc7..cd43d1898482 100644
> --- a/drivers/pci/controller/cadence/pci-j721e.c
> +++ b/drivers/pci/controller/cadence/pci-j721e.c
> @@ -51,10 +51,11 @@ enum link_status {
> #define MAX_LANES 2
>
> struct j721e_pcie {
> - struct cdns_pcie *cdns_pcie;
> + struct device *dev;
> struct clk *refclk;
> u32 mode;
> u32 num_lanes;
> + struct cdns_pcie *cdns_pcie;
> void __iomem *user_cfg_base;
> void __iomem *intd_cfg_base;
> u32 linkdown_irq_regfield;
> @@ -98,7 +99,7 @@ static inline void j721e_pcie_intd_writel(struct j721e_pcie *pcie, u32 offset,
> static irqreturn_t j721e_pcie_link_irq_handler(int irq, void *priv)
> {
> struct j721e_pcie *pcie = priv;
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> u32 reg;
>
> reg = j721e_pcie_intd_readl(pcie, STATUS_REG_SYS_2);
> @@ -164,7 +165,7 @@ static const struct cdns_pcie_ops j721e_pcie_ops = {
> static int j721e_pcie_set_mode(struct j721e_pcie *pcie, struct regmap *syscon,
> unsigned int offset)
> {
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> u32 mask = J721E_MODE_RC;
> u32 mode = pcie->mode;
> u32 val = 0;
> @@ -183,7 +184,7 @@ static int j721e_pcie_set_mode(struct j721e_pcie *pcie, struct regmap *syscon,
> static int j721e_pcie_set_link_speed(struct j721e_pcie *pcie,
> struct regmap *syscon, unsigned int offset)
> {
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> struct device_node *np = dev->of_node;
> int link_speed;
> u32 val = 0;
> @@ -204,7 +205,7 @@ static int j721e_pcie_set_link_speed(struct j721e_pcie *pcie,
> static int j721e_pcie_set_lane_count(struct j721e_pcie *pcie,
> struct regmap *syscon, unsigned int offset)
> {
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> u32 lanes = pcie->num_lanes;
> u32 val = 0;
> int ret;
> @@ -219,7 +220,7 @@ static int j721e_pcie_set_lane_count(struct j721e_pcie *pcie,
>
> static int j721e_pcie_ctrl_init(struct j721e_pcie *pcie)
> {
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> struct device_node *node = dev->of_node;
> struct of_phandle_args args;
> unsigned int offset = 0;
> @@ -376,6 +377,7 @@ static int j721e_pcie_probe(struct platform_device *pdev)
> if (!pcie)
> return -ENOMEM;
>
> + pcie->dev = dev;
> pcie->mode = mode;
> pcie->linkdown_irq_regfield = data->linkdown_irq_regfield;
>
> --
> 2.34.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <helgaas@kernel.org>
To: Christian Gmeiner <christian.gmeiner@gmail.com>
Cc: linux-kernel@vger.kernel.org,
"Kishon Vijay Abraham I" <kishon@ti.com>,
"Tom Joseph" <tjoseph@cadence.com>,
"Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Bjorn Helgaas" <bhelgaas@google.com>,
linux-omap@vger.kernel.org, linux-pci@vger.kernel.org,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] Revert "PCI: j721e: Drop redundant struct device *"
Date: Wed, 26 Jan 2022 14:51:05 -0600 [thread overview]
Message-ID: <20220126205105.GA47875@bhelgaas> (raw)
In-Reply-To: <20220124122132.435743-1-christian.gmeiner@gmail.com>
On Mon, Jan 24, 2022 at 01:21:22PM +0100, Christian Gmeiner wrote:
> This reverts commit 19e863828acf6d8ac8475ba1fd93c0fe17fdc4ef.
>
> Fixes the following oops:
> Unable to handle kernel NULL pointer dereference at virtual address 0000000000000010
My fault, sorry for breaking this. Thanks a lot for the report!
19e863828acf ("PCI: j721e: Drop redundant struct device *") failed to
consider the uses of pcie->cdns_pcie->dev before pcie->cdns_pcie is
initialized. I'll figure out what to do about it.
> Internal error: Oops: 96000004 [#1] PREEMPT SMP
> Modules linked in:
> CPU: 1 PID: 7 Comm: kworker/u4:0 Not tainted 5.17.0-rc1-00086-ge38b27816fea-dirty #71
> Hardware name: CPE0108 (DT)
> Workqueue: events_unbound deferred_probe_work_func
> pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> pc : j721e_pcie_probe+0x184/0x600
> lr : j721e_pcie_probe+0x170/0x600
> sp : ffff80000957bae0
> x29: ffff80000957bae0 x28: ffff800009357000 x27: ffff00000000c078
> x26: ffff00003fe047a8 x25: 0000000000000000 x24: ffff0000000f5280
> x23: ffff800008c98f78 x22: ffff800008f90ff0 x21: ffff000000231410
> x20: ffff000002ef2780 x19: 0000000000000021 x18: 0000000000000001
> x17: 0000000000000000 x16: 0000000000058c00 x15: ffffffffffffffff
> x14: ffffffffffffffff x13: 0000000000000010 x12: 0101010101010101
> x11: 0000000000000040 x10: ffff8000093e06c8 x9 : ffff8000093e06c0
> x8 : ffff000000400270 x7 : 0000000000000000 x6 : ffff000000231590
> x5 : ffff80000957b9e0 x4 : 0000000000000000 x3 : ffff0000002314f4
> x2 : 0000000000000000 x1 : ffff0000000f5280 x0 : 0000000000000000
> Call trace:
> j721e_pcie_probe+0x184/0x600
> platform_probe+0x68/0xe0
> really_probe+0x144/0x320
> __driver_probe_device+0xc4/0xe0
> driver_probe_device+0x7c/0x110
> __device_attach_driver+0x90/0xe0
> bus_for_each_drv+0x78/0xd0
> __device_attach+0xf0/0x150
> device_initial_probe+0x14/0x20
> bus_probe_device+0x9c/0xb0
> deferred_probe_work_func+0x88/0xc0
> process_one_work+0x1bc/0x340
> worker_thread+0x1f8/0x420
> kthread+0x110/0x120
> ret_from_fork+0x10/0x20
> Code: f9400280 a90573fb d0005396 913fc2d6 (f9400800)
>
> Fixes: 19e863828acf ("PCI: j721e: Drop redundant struct device *")
> Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
> ---
> drivers/pci/controller/cadence/pci-j721e.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/pci-j721e.c b/drivers/pci/controller/cadence/pci-j721e.c
> index 489586a4cdc7..cd43d1898482 100644
> --- a/drivers/pci/controller/cadence/pci-j721e.c
> +++ b/drivers/pci/controller/cadence/pci-j721e.c
> @@ -51,10 +51,11 @@ enum link_status {
> #define MAX_LANES 2
>
> struct j721e_pcie {
> - struct cdns_pcie *cdns_pcie;
> + struct device *dev;
> struct clk *refclk;
> u32 mode;
> u32 num_lanes;
> + struct cdns_pcie *cdns_pcie;
> void __iomem *user_cfg_base;
> void __iomem *intd_cfg_base;
> u32 linkdown_irq_regfield;
> @@ -98,7 +99,7 @@ static inline void j721e_pcie_intd_writel(struct j721e_pcie *pcie, u32 offset,
> static irqreturn_t j721e_pcie_link_irq_handler(int irq, void *priv)
> {
> struct j721e_pcie *pcie = priv;
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> u32 reg;
>
> reg = j721e_pcie_intd_readl(pcie, STATUS_REG_SYS_2);
> @@ -164,7 +165,7 @@ static const struct cdns_pcie_ops j721e_pcie_ops = {
> static int j721e_pcie_set_mode(struct j721e_pcie *pcie, struct regmap *syscon,
> unsigned int offset)
> {
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> u32 mask = J721E_MODE_RC;
> u32 mode = pcie->mode;
> u32 val = 0;
> @@ -183,7 +184,7 @@ static int j721e_pcie_set_mode(struct j721e_pcie *pcie, struct regmap *syscon,
> static int j721e_pcie_set_link_speed(struct j721e_pcie *pcie,
> struct regmap *syscon, unsigned int offset)
> {
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> struct device_node *np = dev->of_node;
> int link_speed;
> u32 val = 0;
> @@ -204,7 +205,7 @@ static int j721e_pcie_set_link_speed(struct j721e_pcie *pcie,
> static int j721e_pcie_set_lane_count(struct j721e_pcie *pcie,
> struct regmap *syscon, unsigned int offset)
> {
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> u32 lanes = pcie->num_lanes;
> u32 val = 0;
> int ret;
> @@ -219,7 +220,7 @@ static int j721e_pcie_set_lane_count(struct j721e_pcie *pcie,
>
> static int j721e_pcie_ctrl_init(struct j721e_pcie *pcie)
> {
> - struct device *dev = pcie->cdns_pcie->dev;
> + struct device *dev = pcie->dev;
> struct device_node *node = dev->of_node;
> struct of_phandle_args args;
> unsigned int offset = 0;
> @@ -376,6 +377,7 @@ static int j721e_pcie_probe(struct platform_device *pdev)
> if (!pcie)
> return -ENOMEM;
>
> + pcie->dev = dev;
> pcie->mode = mode;
> pcie->linkdown_irq_regfield = data->linkdown_irq_regfield;
>
> --
> 2.34.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-01-26 20:51 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-24 12:21 [PATCH] Revert "PCI: j721e: Drop redundant struct device *" Christian Gmeiner
2022-01-24 12:21 ` Christian Gmeiner
2022-01-24 15:24 ` Rob Herring
2022-01-24 15:24 ` Rob Herring
2022-01-26 20:51 ` Bjorn Helgaas [this message]
2022-01-26 20:51 ` Bjorn Helgaas
2022-01-27 22:29 ` Bjorn Helgaas
2022-01-27 22:29 ` Bjorn Helgaas
2022-01-31 11:06 ` Christian Gmeiner
2022-01-31 11:06 ` Christian Gmeiner
2022-01-31 23:10 ` Bjorn Helgaas
2022-01-31 23:10 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220126205105.GA47875@bhelgaas \
--to=helgaas@kernel.org \
--cc=bhelgaas@google.com \
--cc=christian.gmeiner@gmail.com \
--cc=kishon@ti.com \
--cc=kw@linux.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=robh@kernel.org \
--cc=tjoseph@cadence.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.