pds_core: Remove unnecessary check in pds_client_adminq_cmd()
authorBrett Creeley <brett.creeley@amd.com>
Mon, 21 Apr 2025 17:46:05 +0000 (10:46 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 24 Apr 2025 01:50:17 +0000 (18:50 -0700)
When the pds_core driver was first created there were some race
conditions around using the adminq, especially for client drivers.
To reduce the possibility of a race condition there's a check
against pf->state in pds_client_adminq_cmd(). This is problematic
for a couple of reasons:

1. The PDSC_S_INITING_DRIVER bit is set during probe, but not
   cleared until after everything in probe is complete, which
   includes creating the auxiliary devices. For pds_fwctl this
   means it can't make any adminq commands until after pds_core's
   probe is complete even though the adminq is fully up by the
   time pds_fwctl's auxiliary device is created.

2. The race conditions around using the adminq have been fixed
   and this path is already protected against client drivers
   calling pds_client_adminq_cmd() if the adminq isn't ready,
   i.e. see pdsc_adminq_post() -> pdsc_adminq_inc_if_up().

Fix this by removing the pf->state check in pds_client_adminq_cmd()
because invalid accesses to pds_core's adminq is already handled by
pdsc_adminq_post()->pdsc_adminq_inc_if_up().

Fixes: 10659034c622 ("pds_core: add the aux client API")
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Brett Creeley <brett.creeley@amd.com>
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20250421174606.3892-4-shannon.nelson@amd.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/amd/pds_core/auxbus.c

index eeb72b1809eabd8f3cd7da89a8030e4edfeb9bab..c9aac27883a3cb605fc10f22de8856dfd3d57b6e 100644 (file)
@@ -107,9 +107,6 @@ int pds_client_adminq_cmd(struct pds_auxiliary_dev *padev,
        dev_dbg(pf->dev, "%s: %s opcode %d\n",
                __func__, dev_name(&padev->aux_dev.dev), req->opcode);
 
-       if (pf->state)
-               return -ENXIO;
-
        /* Wrap the client's request */
        cmd.client_request.opcode = PDS_AQ_CMD_CLIENT_CMD;
        cmd.client_request.client_id = cpu_to_le16(padev->client_id);