bus: fsl-mc: do not add a device-link for the UAPI used DPMCP device
commit dd7d8e012b23de158ca0188239c7a1f2a83b4484 upstream.
The fsl-mc bus associated to the root DPRC in a DPAA2 system exports a
device file for userspace access to the MC firmware. In case the DPRC's
local MC portal (DPMCP) is currently in use, a new DPMCP device is
allocated through the fsl_mc_portal_allocate() function.
In this case, the call to fsl_mc_portal_allocate() will fail with -EINVAL
when trying to add a device link between the root DPRC (consumer) and
the newly allocated DPMCP device (supplier). This is because the DPMCP
is a dependent of the DPRC device (the bus).
Fix this by not adding a device link in case the DPMCP is allocated for
the root DPRC's usage.
Fixes: afb7742281
("bus: fsl-mc: automatically add a device_link on fsl_mc_[portal,object]_allocate")
Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20250408105814.2837951-3-ioana.ciornei@nxp.com
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
8edfed4439
commit
1e474b5fab
@@ -214,12 +214,19 @@ int __must_check fsl_mc_portal_allocate(struct fsl_mc_device *mc_dev,
|
|||||||
if (error < 0)
|
if (error < 0)
|
||||||
goto error_cleanup_resource;
|
goto error_cleanup_resource;
|
||||||
|
|
||||||
dpmcp_dev->consumer_link = device_link_add(&mc_dev->dev,
|
/* If the DPRC device itself tries to allocate a portal (usually for
|
||||||
&dpmcp_dev->dev,
|
* UAPI interaction), don't add a device link between them since the
|
||||||
DL_FLAG_AUTOREMOVE_CONSUMER);
|
* DPMCP device is an actual child device of the DPRC and a reverse
|
||||||
if (!dpmcp_dev->consumer_link) {
|
* dependency is not allowed.
|
||||||
error = -EINVAL;
|
*/
|
||||||
goto error_cleanup_mc_io;
|
if (mc_dev != mc_bus_dev) {
|
||||||
|
dpmcp_dev->consumer_link = device_link_add(&mc_dev->dev,
|
||||||
|
&dpmcp_dev->dev,
|
||||||
|
DL_FLAG_AUTOREMOVE_CONSUMER);
|
||||||
|
if (!dpmcp_dev->consumer_link) {
|
||||||
|
error = -EINVAL;
|
||||||
|
goto error_cleanup_mc_io;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*new_mc_io = mc_io;
|
*new_mc_io = mc_io;
|
||||||
|
Reference in New Issue
Block a user