pds_core: Require callers of register/unregister to pass PF drvdata
Pass a pointer to the PF's private data structure rather than bouncing in and out of the PF's PCI function address. Signed-off-by: Shannon Nelson <shannon.nelson@amd.com> Signed-off-by: Brett Creeley <brett.creeley@amd.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Reviewed-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/20230807205755.29579-4-brett.creeley@amd.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
38fe3975b4
commit
b021d05e10
@ -14,18 +14,13 @@
|
||||
* Return: 0 on success, or
|
||||
* negative for error
|
||||
*/
|
||||
int pds_client_register(struct pci_dev *pf_pdev, char *devname)
|
||||
int pds_client_register(struct pdsc *pf, char *devname)
|
||||
{
|
||||
union pds_core_adminq_comp comp = {};
|
||||
union pds_core_adminq_cmd cmd = {};
|
||||
struct pdsc *pf;
|
||||
int err;
|
||||
u16 ci;
|
||||
|
||||
pf = pci_get_drvdata(pf_pdev);
|
||||
if (pf->state)
|
||||
return -ENXIO;
|
||||
|
||||
cmd.client_reg.opcode = PDS_AQ_CMD_CLIENT_REG;
|
||||
strscpy(cmd.client_reg.devname, devname,
|
||||
sizeof(cmd.client_reg.devname));
|
||||
@ -59,17 +54,12 @@ EXPORT_SYMBOL_GPL(pds_client_register);
|
||||
* Return: 0 on success, or
|
||||
* negative for error
|
||||
*/
|
||||
int pds_client_unregister(struct pci_dev *pf_pdev, u16 client_id)
|
||||
int pds_client_unregister(struct pdsc *pf, u16 client_id)
|
||||
{
|
||||
union pds_core_adminq_comp comp = {};
|
||||
union pds_core_adminq_cmd cmd = {};
|
||||
struct pdsc *pf;
|
||||
int err;
|
||||
|
||||
pf = pci_get_drvdata(pf_pdev);
|
||||
if (pf->state)
|
||||
return -ENXIO;
|
||||
|
||||
cmd.client_unreg.opcode = PDS_AQ_CMD_CLIENT_UNREG;
|
||||
cmd.client_unreg.client_id = cpu_to_le16(client_id);
|
||||
|
||||
@ -198,7 +188,7 @@ int pdsc_auxbus_dev_del(struct pdsc *cf, struct pdsc *pf)
|
||||
|
||||
padev = pf->vfs[cf->vf_id].padev;
|
||||
if (padev) {
|
||||
pds_client_unregister(pf->pdev, padev->client_id);
|
||||
pds_client_unregister(pf, padev->client_id);
|
||||
auxiliary_device_delete(&padev->aux_dev);
|
||||
auxiliary_device_uninit(&padev->aux_dev);
|
||||
padev->client_id = 0;
|
||||
@ -243,7 +233,7 @@ int pdsc_auxbus_dev_add(struct pdsc *cf, struct pdsc *pf)
|
||||
*/
|
||||
snprintf(devname, sizeof(devname), "%s.%s.%d",
|
||||
PDS_CORE_DRV_NAME, pf->viftype_status[vt].name, cf->uid);
|
||||
client_id = pds_client_register(pf->pdev, devname);
|
||||
client_id = pds_client_register(pf, devname);
|
||||
if (client_id < 0) {
|
||||
err = client_id;
|
||||
goto out_unlock;
|
||||
@ -252,7 +242,7 @@ int pdsc_auxbus_dev_add(struct pdsc *cf, struct pdsc *pf)
|
||||
padev = pdsc_auxbus_dev_register(cf, pf, client_id,
|
||||
pf->viftype_status[vt].name);
|
||||
if (IS_ERR(padev)) {
|
||||
pds_client_unregister(pf->pdev, client_id);
|
||||
pds_client_unregister(pf, client_id);
|
||||
err = PTR_ERR(padev);
|
||||
goto out_unlock;
|
||||
}
|
||||
|
@ -41,9 +41,11 @@ enum pds_core_vif_types {
|
||||
|
||||
#define PDS_VDPA_DEV_NAME PDS_CORE_DRV_NAME "." PDS_DEV_TYPE_VDPA_STR
|
||||
|
||||
struct pdsc;
|
||||
|
||||
int pdsc_register_notify(struct notifier_block *nb);
|
||||
void pdsc_unregister_notify(struct notifier_block *nb);
|
||||
void *pdsc_get_pf_struct(struct pci_dev *vf_pdev);
|
||||
int pds_client_register(struct pci_dev *pf_pdev, char *devname);
|
||||
int pds_client_unregister(struct pci_dev *pf_pdev, u16 client_id);
|
||||
int pds_client_register(struct pdsc *pf, char *devname);
|
||||
int pds_client_unregister(struct pdsc *pf, u16 client_id);
|
||||
#endif /* _PDS_COMMON_H_ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user