Lines Matching defs:uattr

140 static bool uverbs_is_attr_cleared(const struct ib_uverbs_attr *uattr,
143 if (uattr->len > sizeof_field(struct ib_uverbs_attr, data))
144 return ib_is_buffer_cleared(u64_to_user_ptr(uattr->data) + len,
145 uattr->len - len);
147 return !memchr_inv((const void *)&uattr->data + len,
148 0, uattr->len - len);
169 struct ib_uverbs_attr *uattr,
180 if (uattr->attr_data.reserved)
183 if (uattr->len % sizeof(u32))
186 array_len = uattr->len / sizeof(u32);
205 if (uattr->len > sizeof(uattr->data)) {
206 ret = copy_from_user(idr_vals, u64_to_user_ptr(uattr->data),
207 uattr->len);
211 memcpy(idr_vals, &uattr->data, uattr->len);
245 struct ib_uverbs_attr *uattr, u32 attr_bkey)
256 if (uattr->attr_data.enum_data.elem_id >= spec->u.enum_def.num_elems)
259 if (uattr->attr_data.enum_data.reserved)
262 val_spec = &spec->u2.enum_def.ids[uattr->attr_data.enum_data.elem_id];
268 e->ptr_attr.enum_id = uattr->attr_data.enum_data.elem_id;
276 if (uattr->len > val_spec->u.ptr.len &&
278 !uverbs_is_attr_cleared(uattr, val_spec->u.ptr.len))
283 if (uattr->len < val_spec->u.ptr.min_len ||
285 uattr->len > val_spec->u.ptr.len))
289 uattr->attr_data.reserved)
292 e->ptr_attr.uattr_idx = uattr - pbundle->uattrs;
293 e->ptr_attr.len = uattr->len;
298 p = uverbs_alloc(bundle, uattr->len);
304 if (copy_from_user(p, u64_to_user_ptr(uattr->data),
305 uattr->len))
308 e->ptr_attr.data = uattr->data;
314 if (uattr->attr_data.reserved)
317 if (uattr->len != 0)
324 * The type of uattr->data is u64 for UVERBS_ATTR_TYPE_IDR and
331 uattr->data_s64, bundle);
337 unsigned int uattr_idx = uattr - pbundle->uattrs;
348 if (uattr->attr_data.reserved || uattr->len != 0 ||
349 uattr->data_s64 < INT_MIN || uattr->data_s64 > INT_MAX)
352 e->ptr_attr.data = uattr->data_s64;
357 &e->objs_arr_attr, uattr,
395 struct ib_uverbs_attr *uattr)
397 u32 attr_key = uapi_key_attr(uattr->attr_id);
409 if (uattr->flags & UVERBS_ATTR_F_MANDATORY)
419 ret = uverbs_process_attr(pbundle, attr, uattr, attr_bkey);