forked from Minki/linux
vDPA/ifcvf: verify mandatory feature bits for vDPA
vDPA requres VIRTIO_F_ACCESS_PLATFORM as a must, this commit examines this when set features. Signed-off-by: Zhu Lingshan <lingshan.zhu@intel.com> Acked-by: Jason Wang <jasowang@redhat.com> Link: https://lore.kernel.org/r/20210317094933.16417-7-lingshan.zhu@intel.com Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
69d00d9858
commit
1d895a6808
@ -224,6 +224,18 @@ u64 ifcvf_get_features(struct ifcvf_hw *hw)
|
||||
return hw->hw_features;
|
||||
}
|
||||
|
||||
int ifcvf_verify_min_features(struct ifcvf_hw *hw, u64 features)
|
||||
{
|
||||
struct ifcvf_adapter *ifcvf = vf_to_adapter(hw);
|
||||
|
||||
if (!(features & BIT_ULL(VIRTIO_F_ACCESS_PLATFORM)) && features) {
|
||||
IFCVF_ERR(ifcvf->pdev, "VIRTIO_F_ACCESS_PLATFORM is not negotiated\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ifcvf_read_net_config(struct ifcvf_hw *hw, u64 offset,
|
||||
void *dst, int length)
|
||||
{
|
||||
|
@ -123,6 +123,7 @@ void io_write64_twopart(u64 val, u32 *lo, u32 *hi);
|
||||
void ifcvf_reset(struct ifcvf_hw *hw);
|
||||
u64 ifcvf_get_features(struct ifcvf_hw *hw);
|
||||
u64 ifcvf_get_hw_features(struct ifcvf_hw *hw);
|
||||
int ifcvf_verify_min_features(struct ifcvf_hw *hw, u64 features);
|
||||
u16 ifcvf_get_vq_state(struct ifcvf_hw *hw, u16 qid);
|
||||
int ifcvf_set_vq_state(struct ifcvf_hw *hw, u16 qid, u16 num);
|
||||
struct ifcvf_adapter *vf_to_adapter(struct ifcvf_hw *hw);
|
||||
|
@ -179,6 +179,11 @@ static u64 ifcvf_vdpa_get_features(struct vdpa_device *vdpa_dev)
|
||||
static int ifcvf_vdpa_set_features(struct vdpa_device *vdpa_dev, u64 features)
|
||||
{
|
||||
struct ifcvf_hw *vf = vdpa_to_vf(vdpa_dev);
|
||||
int ret;
|
||||
|
||||
ret = ifcvf_verify_min_features(vf, features);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
vf->req_features = features;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user