struct devlink *devlink = info->user_ptr[0];
        u32 count;
 
-       if (!info->attrs[DEVLINK_ATTR_PORT_SPLIT_COUNT])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_PORT_SPLIT_COUNT))
                return -EINVAL;
        if (!devlink->ops->port_split)
                return -EOPNOTSUPP;
        if (!devlink->ops->port_del)
                return -EOPNOTSUPP;
 
-       if (!info->attrs[DEVLINK_ATTR_PORT_INDEX]) {
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_PORT_INDEX)) {
                NL_SET_ERR_MSG_MOD(extack, "Port index is not specified");
                return -EINVAL;
        }
        if (err)
                return err;
 
-       if (!info->attrs[DEVLINK_ATTR_SB_POOL_SIZE])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_SB_POOL_SIZE))
                return -EINVAL;
 
        size = nla_get_u32(info->attrs[DEVLINK_ATTR_SB_POOL_SIZE]);
        if (err)
                return err;
 
-       if (!info->attrs[DEVLINK_ATTR_SB_THRESHOLD])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_SB_THRESHOLD))
                return -EINVAL;
 
        threshold = nla_get_u32(info->attrs[DEVLINK_ATTR_SB_THRESHOLD]);
        if (err)
                return err;
 
-       if (!info->attrs[DEVLINK_ATTR_SB_THRESHOLD])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_SB_THRESHOLD))
                return -EINVAL;
 
        threshold = nla_get_u32(info->attrs[DEVLINK_ATTR_SB_THRESHOLD]);
        struct devlink_dpipe_table *table;
        const char *table_name;
 
-       if (!info->attrs[DEVLINK_ATTR_DPIPE_TABLE_NAME])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_DPIPE_TABLE_NAME))
                return -EINVAL;
 
        table_name = nla_data(info->attrs[DEVLINK_ATTR_DPIPE_TABLE_NAME]);
        const char *table_name;
        bool counters_enable;
 
-       if (!info->attrs[DEVLINK_ATTR_DPIPE_TABLE_NAME] ||
-           !info->attrs[DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_DPIPE_TABLE_NAME) ||
+           GENL_REQ_ATTR_CHECK(info,
+                               DEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED))
                return -EINVAL;
 
        table_name = nla_data(info->attrs[DEVLINK_ATTR_DPIPE_TABLE_NAME]);
        u64 size;
        int err;
 
-       if (!info->attrs[DEVLINK_ATTR_RESOURCE_ID] ||
-           !info->attrs[DEVLINK_ATTR_RESOURCE_SIZE])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_RESOURCE_ID) ||
+           GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_RESOURCE_SIZE))
                return -EINVAL;
        resource_id = nla_get_u64(info->attrs[DEVLINK_ATTR_RESOURCE_ID]);
 
        if (!devlink->ops->flash_update)
                return -EOPNOTSUPP;
 
-       if (!info->attrs[DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME))
                return -EINVAL;
 
        ret = devlink_flash_component_get(devlink,
        if (!devlink->ops->selftest_run || !devlink->ops->selftest_check)
                return -EOPNOTSUPP;
 
-       if (!info->attrs[DEVLINK_ATTR_SELFTESTS]) {
-               NL_SET_ERR_MSG_MOD(info->extack, "selftest required");
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_SELFTESTS))
                return -EINVAL;
-       }
 
        attrs = info->attrs[DEVLINK_ATTR_SELFTESTS];
 
 devlink_param_type_get_from_info(struct genl_info *info,
                                 enum devlink_param_type *param_type)
 {
-       if (!info->attrs[DEVLINK_ATTR_PARAM_TYPE])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_PARAM_TYPE))
                return -EINVAL;
 
        switch (nla_get_u8(info->attrs[DEVLINK_ATTR_PARAM_TYPE])) {
 {
        char *param_name;
 
-       if (!info->attrs[DEVLINK_ATTR_PARAM_NAME])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_PARAM_NAME))
                return NULL;
 
        param_name = nla_data(info->attrs[DEVLINK_ATTR_PARAM_NAME]);
                        return err;
        }
 
-       if (!info->attrs[DEVLINK_ATTR_PARAM_VALUE_CMODE])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_PARAM_VALUE_CMODE))
                return -EINVAL;
        cmode = nla_get_u8(info->attrs[DEVLINK_ATTR_PARAM_VALUE_CMODE]);
        if (!devlink_param_cmode_is_supported(param, cmode))
        unsigned int index;
        int err;
 
-       if (!info->attrs[DEVLINK_ATTR_REGION_NAME])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_REGION_NAME))
                return -EINVAL;
 
        if (info->attrs[DEVLINK_ATTR_PORT_INDEX]) {
        unsigned int index;
        u32 snapshot_id;
 
-       if (!info->attrs[DEVLINK_ATTR_REGION_NAME] ||
-           !info->attrs[DEVLINK_ATTR_REGION_SNAPSHOT_ID])
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_REGION_NAME) ||
+           GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_REGION_SNAPSHOT_ID))
                return -EINVAL;
 
        region_name = nla_data(info->attrs[DEVLINK_ATTR_REGION_NAME]);
        u8 *data;
        int err;
 
-       if (!info->attrs[DEVLINK_ATTR_REGION_NAME]) {
+       if (GENL_REQ_ATTR_CHECK(info, DEVLINK_ATTR_REGION_NAME)) {
                NL_SET_ERR_MSG_MOD(info->extack, "No region name provided");
                return -EINVAL;
        }