hv: fix MISRA-C violations in dm/vpci

120D: Pointer param should be declared pointer to const.
  Add 'const' qualifier to function parameters whenever it's possible:
    alloc_pci_vdev()
    enumerate_pci_dev()
    pci_scan_bus()
    pci_enumeration_cb()
    partition_mode_vpci_init()
    partition_mode_vpci_deinit()
    sharing_mode_vpci_init()
    sharing_mode_vpci_deinit()
    vpci_cleanup()

45D: Pointer not checked for null before use.
  Check pointer vm in vpci_reset_ptdev_intr_info() before using it.

Tracked-On: #861
Signed-off-by: Zide Chen <zide.chen@intel.com>
Acked-by: Anthony Xu <anthony.xu@intel.com>
This commit is contained in:
Zide Chen 2019-01-10 09:15:02 -08:00 committed by wenlingz
parent 4cfc259792
commit 12211fb67b
6 changed files with 22 additions and 19 deletions

View File

@ -49,10 +49,10 @@ static struct pci_vdev *partition_mode_find_vdev(struct acrn_vpci *vpci, union p
return NULL; return NULL;
} }
static int32_t partition_mode_vpci_init(struct acrn_vm *vm) static int32_t partition_mode_vpci_init(const struct acrn_vm *vm)
{ {
struct vpci_vdev_array *vdev_array; struct vpci_vdev_array *vdev_array;
struct acrn_vpci *vpci = &vm->vpci; const struct acrn_vpci *vpci = &vm->vpci;
struct pci_vdev *vdev; struct pci_vdev *vdev;
int32_t i; int32_t i;
@ -73,7 +73,7 @@ static int32_t partition_mode_vpci_init(struct acrn_vm *vm)
return 0; return 0;
} }
static void partition_mode_vpci_deinit(struct acrn_vm *vm) static void partition_mode_vpci_deinit(const struct acrn_vm *vm)
{ {
struct vpci_vdev_array *vdev_array; struct vpci_vdev_array *vdev_array;
struct pci_vdev *vdev; struct pci_vdev *vdev;

View File

@ -102,7 +102,7 @@ static void sharing_mode_cfgwrite(__unused struct acrn_vpci *vpci, union pci_bdf
} }
} }
static struct pci_vdev *alloc_pci_vdev(struct acrn_vm *vm, union pci_bdf bdf) static struct pci_vdev *alloc_pci_vdev(const struct acrn_vm *vm, union pci_bdf bdf)
{ {
struct pci_vdev *vdev; struct pci_vdev *vdev;
@ -121,9 +121,9 @@ static struct pci_vdev *alloc_pci_vdev(struct acrn_vm *vm, union pci_bdf bdf)
return vdev; return vdev;
} }
static void enumerate_pci_dev(uint16_t pbdf, void *cb_data) static void enumerate_pci_dev(uint16_t pbdf, const void *cb_data)
{ {
struct acrn_vm *vm = (struct acrn_vm *)cb_data; const struct acrn_vm *vm = (const struct acrn_vm *)cb_data;
struct pci_vdev *vdev; struct pci_vdev *vdev;
vdev = alloc_pci_vdev(vm, (union pci_bdf)pbdf); vdev = alloc_pci_vdev(vm, (union pci_bdf)pbdf);
@ -132,7 +132,7 @@ static void enumerate_pci_dev(uint16_t pbdf, void *cb_data)
} }
} }
static int32_t sharing_mode_vpci_init(struct acrn_vm *vm) static int32_t sharing_mode_vpci_init(const struct acrn_vm *vm)
{ {
struct pci_vdev *vdev; struct pci_vdev *vdev;
uint32_t i, j; uint32_t i, j;
@ -150,7 +150,7 @@ static int32_t sharing_mode_vpci_init(struct acrn_vm *vm)
(void)memset((void *)sharing_mode_vdev_array, 0U, sizeof(sharing_mode_vdev_array)); (void)memset((void *)sharing_mode_vdev_array, 0U, sizeof(sharing_mode_vdev_array));
/* build up vdev array for vm0 */ /* build up vdev array for vm0 */
pci_scan_bus(enumerate_pci_dev, (void *)vm); pci_scan_bus(enumerate_pci_dev, vm);
for (i = 0U; i < num_pci_vdev; i++) { for (i = 0U; i < num_pci_vdev; i++) {
vdev = &sharing_mode_vdev_array[i]; vdev = &sharing_mode_vdev_array[i];
@ -166,7 +166,7 @@ static int32_t sharing_mode_vpci_init(struct acrn_vm *vm)
return ret; return ret;
} }
static void sharing_mode_vpci_deinit(__unused struct acrn_vm *vm) static void sharing_mode_vpci_deinit(__unused const struct acrn_vm *vm)
{ {
struct pci_vdev *vdev; struct pci_vdev *vdev;
uint32_t i, j; uint32_t i, j;
@ -229,7 +229,10 @@ void vpci_reset_ptdev_intr_info(const struct acrn_vm *target_vm, uint16_t vbdf,
/* Return this PCI device to SOS */ /* Return this PCI device to SOS */
if (vdev->vpci->vm == target_vm) { if (vdev->vpci->vm == target_vm) {
vm = get_vm_from_vmid(0U); vm = get_vm_from_vmid(0U);
vdev->vpci = &vm->vpci;
if (vm != NULL) {
vdev->vpci = &vm->vpci;
}
} }
} }
} }

View File

@ -137,9 +137,9 @@ void vpci_init(struct acrn_vm *vm)
} }
} }
void vpci_cleanup(struct acrn_vm *vm) void vpci_cleanup(const struct acrn_vm *vm)
{ {
struct acrn_vpci *vpci = &vm->vpci; const struct acrn_vpci *vpci = &vm->vpci;
if ((vpci->ops != NULL) && (vpci->ops->deinit != NULL)) { if ((vpci->ops != NULL) && (vpci->ops->deinit != NULL)) {
vpci->ops->deinit(vm); vpci->ops->deinit(vm);

View File

@ -120,7 +120,7 @@ void enable_disable_pci_intx(union pci_bdf bdf, bool enable)
#define BUS_SCAN_SKIP 0U #define BUS_SCAN_SKIP 0U
#define BUS_SCAN_PENDING 1U #define BUS_SCAN_PENDING 1U
#define BUS_SCAN_COMPLETE 2U #define BUS_SCAN_COMPLETE 2U
void pci_scan_bus(pci_enumeration_cb cb_func, void *cb_data) void pci_scan_bus(pci_enumeration_cb cb_func, const void *cb_data)
{ {
union pci_bdf pbdf; union pci_bdf pbdf;
uint8_t hdr_type, secondary_bus, dev, func; uint8_t hdr_type, secondary_bus, dev, func;

View File

@ -138,7 +138,7 @@ enum pci_bar_type {
PCIBAR_MEM64, PCIBAR_MEM64,
}; };
typedef void (*pci_enumeration_cb)(uint16_t pbdf, void *data); typedef void (*pci_enumeration_cb)(uint16_t pbdf, const void *data);
static inline uint32_t pci_bar_offset(uint32_t idx) static inline uint32_t pci_bar_offset(uint32_t idx)
{ {
@ -178,6 +178,6 @@ uint32_t pci_pdev_read_cfg(union pci_bdf bdf, uint32_t offset, uint32_t bytes);
void pci_pdev_write_cfg(union pci_bdf bdf, uint32_t offset, uint32_t bytes, uint32_t val); void pci_pdev_write_cfg(union pci_bdf bdf, uint32_t offset, uint32_t bytes, uint32_t val);
void enable_disable_pci_intx(union pci_bdf bdf, bool enable); void enable_disable_pci_intx(union pci_bdf bdf, bool enable);
void pci_scan_bus(pci_enumeration_cb cb, void *cb_data); void pci_scan_bus(pci_enumeration_cb cb, const void *cb_data);
#endif /* PCI_H_ */ #endif /* PCI_H_ */

View File

@ -101,7 +101,7 @@ struct pci_vdev {
const struct pci_vdev_ops *ops; const struct pci_vdev_ops *ops;
#endif #endif
struct acrn_vpci *vpci; const struct acrn_vpci *vpci;
/* The bus/device/function triple of the virtual PCI device. */ /* The bus/device/function triple of the virtual PCI device. */
union pci_bdf vbdf; union pci_bdf vbdf;
@ -125,8 +125,8 @@ struct pci_addr_info {
}; };
struct vpci_ops { struct vpci_ops {
int32_t (*init)(struct acrn_vm *vm); int32_t (*init)(const struct acrn_vm *vm);
void (*deinit)(struct acrn_vm *vm); void (*deinit)(const struct acrn_vm *vm);
void (*cfgread)(struct acrn_vpci *vpci, union pci_bdf vbdf, uint32_t offset, void (*cfgread)(struct acrn_vpci *vpci, union pci_bdf vbdf, uint32_t offset,
uint32_t bytes, uint32_t *val); uint32_t bytes, uint32_t *val);
void (*cfgwrite)(struct acrn_vpci *vpci, union pci_bdf vbdf, uint32_t offset, void (*cfgwrite)(struct acrn_vpci *vpci, union pci_bdf vbdf, uint32_t offset,
@ -146,7 +146,7 @@ extern const struct pci_vdev_ops pci_ops_vdev_pt;
#endif #endif
void vpci_init(struct acrn_vm *vm); void vpci_init(struct acrn_vm *vm);
void vpci_cleanup(struct acrn_vm *vm); void vpci_cleanup(const struct acrn_vm *vm);
void vpci_set_ptdev_intr_info(const struct acrn_vm *target_vm, uint16_t vbdf, uint16_t pbdf); void vpci_set_ptdev_intr_info(const struct acrn_vm *target_vm, uint16_t vbdf, uint16_t pbdf);
void vpci_reset_ptdev_intr_info(const struct acrn_vm *target_vm, uint16_t vbdf, uint16_t pbdf); void vpci_reset_ptdev_intr_info(const struct acrn_vm *target_vm, uint16_t vbdf, uint16_t pbdf);