> +static int bnxt_nvm_read(struct bnxt *bp, int nvm_param, int idx,
> +                      void *buf, int size)
> +{
> +     struct hwrm_nvm_get_variable_input req = {0};
> +     dma_addr_t dest_data_dma_addr;
> +     void *dest_data_addr = NULL;
> +     int bytesize;
> +     int rc;
> +
> +     bytesize = (size + 7) / BITS_PER_BYTE;
roundup?

..

+static int bnxt_nvm_write(struct bnxt *bp, int nvm_param, int idx,
> +                       const void *buf, int size)
> +{
> +     struct hwrm_nvm_set_variable_input req = {0};
> +     dma_addr_t src_data_dma_addr;
> +     void *src_data_addr = NULL;
> +     int bytesize;
> +     int rc;
> +
> +     bytesize = (size + 7) / BITS_PER_BYTE;
Likewise

> +
> +     src_data_addr = dma_alloc_coherent(&bp->pdev->dev, bytesize,
> +                                        &src_data_dma_addr,
> GFP_KERNEL);
> +     if (!src_data_addr) {
> +             netdev_err(bp->dev, "dma_alloc_coherent failure\n");

Won't you see an oom? Why do you need the print?

> +static int bnxt_dl_perm_config_set(struct devlink *devlink,
> +                                enum devlink_perm_config_param param,
> +                                u8 type, void *value, u8 *restart_reqd)
> +{
> +     struct bnxt *bp = bnxt_get_bp_from_dl(devlink);
> +     struct bnxt_drv_cfgparam *entry;
> +     int idx = 0;
> +     int ret = 0;
> +     u32 bytesize;
> +     u32 val32;
> +     u16 val16;
> +     u8 val8;
> +     int i;
> +
> +     *restart_reqd = 0;
> +
> +     /* Find parameter in table */
> +     for (i = 0; i < BNXT_NUM_DRV_CFGPARAM; i++) {
> +             if (param == bnxt_drv_cfgparam_list[i].param) {
> +                     entry = &bnxt_drv_cfgparam_list[i];
> +                     break;
> +             }
> +     }
> +
> +     /* Not found */
> +     if (i == BNXT_NUM_DRV_CFGPARAM)
> +             return -EINVAL;
> +
Looks cleaner to check whether entry is set instead
...

> +     bytesize = (entry->bitlength + 7) / BITS_PER_BYTE;

Roundup?

...

> +             if (bytesize == 1) {
> +                     val8 = val32;

Don't you need explicit castings for these kind of assignments
to prevent warnings?

> +                     ret = bnxt_nvm_write(bp, entry->nvm_param, idx,
> &val8,
> +                                          entry->bitlength);
> +             } else if (bytesize == 2) {
> +                     val16 = val32;
> +                     ret = bnxt_nvm_write(bp, entry->nvm_param, idx,
> &val16,
> +                                          entry->bitlength);
> +             } else {
> +                     ret = bnxt_nvm_write(bp, entry->nvm_param, idx,
> &val32,
> +                                          entry->bitlength);
> +             }
> +     }
> +
> +     /* Restart required for all nvm parameter writes */
> +     *restart_reqd = 1;
> +
> +     return ret;
> +}
> +
> +static int bnxt_dl_perm_config_get(struct devlink *devlink,
> +                                enum devlink_perm_config_param param,
> +                                u8 type, void *value)
> +{
Same comments as for the setter
...

> -     if (!pci_find_ext_capability(bp->pdev, PCI_EXT_CAP_ID_SRIOV))
> -             return 0;
> -
> -     if (bp->hwrm_spec_code < 0x10800) {
> +     if ((!pci_find_ext_capability(bp->pdev, PCI_EXT_CAP_ID_SRIOV)) ||
> +         bp->hwrm_spec_code < 0x10800) {
> +             /* eswitch switchdev mode not supported */
> +             bnxt_dl_ops.eswitch_mode_set = NULL;
> +             bnxt_dl_ops.eswitch_mode_get = NULL;

Why would you need to tie this interface to the presence of SRIOV in PCIe?
Also, Assuming the ability to disable sriov in #2 would cause this capability
not to be exposed after reboot, isn't this a one-way ticket?


Reply via email to