On Tue, Sep 27, 2022 at 01:53:29PM +0800, Li Zhijian wrote: > @@ -4321,6 +4330,8 @@ int ib_dealloc_xrcd_user(struct ib_xrcd *xrcd, struct ib_udata *udata); > static inline int ib_check_mr_access(struct ib_device *ib_dev, > unsigned int flags) > { > + u64 device_cap = ib_dev->attrs.device_cap_flags; > + > /* > * Local write permission is required if remote write or > * remote atomic permission is also requested. > @@ -4335,6 +4346,13 @@ static inline int ib_check_mr_access(struct ib_device *ib_dev, > if (flags & IB_ACCESS_ON_DEMAND && > !(ib_dev->attrs.kernel_cap_flags & IBK_ON_DEMAND_PAGING)) > return -EINVAL; > + > + if ((flags & IB_ACCESS_FLUSH_GLOBAL && > + !(device_cap & IB_DEVICE_FLUSH_GLOBAL)) || > + (flags & IB_ACCESS_FLUSH_PERSISTENT && > + !(device_cap & IB_DEVICE_FLUSH_PERSISTENT))) > + return -EINVAL; This should be -EOPNOTSUPP as the above is changed to in for-next Jason