From: Dongwoo Lee Date: Thu, 10 Feb 2022 12:00:11 +0000 (+0900) Subject: util: resource: Add preprocessing before updating attributes X-Git-Tag: submit/tizen/20220302.025412~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a98c15a73ad1df30d4c89f8198cb384c588728a3;p=platform%2Fcore%2Fsystem%2Fpass.git util: resource: Add preprocessing before updating attributes There are resource information to be shared between attributes, so as to support these resources this introduces prepare_update(), the new driver operation called before update_resource_attrs() automatically. In order to prevent updating each resource individually, removes get_resource_attr_*_sync() functions and prohibits calling update_resource_attr() soley. Change-Id: Id3c0b19c6b4a78a6c7a018d8ead7d95f2cd8f4f1 Signed-off-by: Dongwoo Lee --- diff --git a/include/util/resource.h b/include/util/resource.h index f6a18f9..ac0fe6b 100644 --- a/include/util/resource.h +++ b/include/util/resource.h @@ -68,6 +68,11 @@ struct resource_attribute { struct resource_driver_ops { int (*init)(struct resource *res); void (*exit)(struct resource *res); + /* + * If prepare_update is specified, it will be called + * at every update_resource_attrs(). + */ + int (*prepare_update)(struct resource *res); }; /* resource driver flags */ @@ -132,24 +137,17 @@ struct resource *create_resource(int resource_type, int resource_index, void *us void delete_resource(struct resource *resource); /* Handle resource attribute */ -int update_resource_attr(struct resource *resource, u_int64_t attr_id); int update_resource_attrs(struct resource *resource); const struct resource_attribute *get_resource_attr(struct resource *resource, u_int64_t attr_id); struct resource_attribute_value * get_resource_attr_value(struct resource *resource, u_int64_t attr_id); int get_resource_attr_integer(struct resource *resource, u_int64_t attr_id, int *data); -int get_resource_attr_integer_sync(struct resource *resource, u_int64_t attr_id, int *data); int get_resource_attr_double(struct resource *resource, u_int64_t attr_id, double *data); -int get_resource_attr_double_sync(struct resource *resource, u_int64_t attr_id, double *data); int get_resource_attr_string(struct resource *resource, u_int64_t attr_id, char **data); -int get_resource_attr_string_sync(struct resource *resource, u_int64_t attr_id, char **data); -int get_resource_attr_ptr(struct resource *resource, u_int64_t attr_id, void **data); -int get_resource_attr_ptr_sync(struct resource *resource, u_int64_t attr_id, void **data); int get_resource_attr_array(struct resource *resource, u_int64_t attr_id, struct array_value **data); -int get_resource_attr_array_sync(struct resource *resource, u_int64_t attr_id, - struct array_value **data); +int get_resource_attr_ptr(struct resource *resource, u_int64_t attr_id, void **data); void set_resource_attr_interest(struct resource *resource, u_int64_t interest_mask); void unset_resource_attr_interest(struct resource *resource, u_int64_t interest_mask); diff --git a/src/util/resource.c b/src/util/resource.c index 25def15..4910742 100644 --- a/src/util/resource.c +++ b/src/util/resource.c @@ -212,7 +212,7 @@ struct resource *create_resource(int resource_type, int resource_index, return resource; } -int update_resource_attr(struct resource *resource, u_int64_t attr_id) +static int update_resource_attr(struct resource *resource, u_int64_t attr_id) { int attr_index = RESOURCE_ATTR_INDEX(attr_id); const struct resource_attribute *attr = NULL; @@ -242,6 +242,12 @@ int update_resource_attrs(struct resource *resource) if (!resource || !resource->type) return -EINVAL; + if (resource->driver && resource->driver->ops.prepare_update) { + ret = resource->driver->ops.prepare_update(resource); + if (ret < 0) + return ret; + } + for (i = 0; i < resource->num_attrs; i++) { if (!(resource->attrs[i].id & resource->attr_interest)) continue; @@ -305,17 +311,6 @@ int get_resource_attr_integer(struct resource *resource, u_int64_t attr_id, int return 0; } -int get_resource_attr_integer_sync(struct resource *resource, u_int64_t attr_id, int *data) -{ - int ret; - - ret = update_resource_attr(resource, attr_id); - if (ret < 0) - return ret; - - return get_resource_attr_integer(resource, attr_id, data); -} - int get_resource_attr_double(struct resource *resource, u_int64_t attr_id, double *data) { struct resource_attribute_value *attr_value = NULL; @@ -332,17 +327,6 @@ int get_resource_attr_double(struct resource *resource, u_int64_t attr_id, doubl return 0; } -int get_resource_attr_double_sync(struct resource *resource, u_int64_t attr_id, double *data) -{ - int ret; - - ret = update_resource_attr(resource, attr_id); - if (ret < 0) - return ret; - - return get_resource_attr_double(resource, attr_id, data); -} - int get_resource_attr_string(struct resource *resource, u_int64_t attr_id, char **data) { struct resource_attribute_value *attr_value = NULL; @@ -376,17 +360,6 @@ int put_resource_attr_string(struct resource *resource, u_int64_t attr_id) return 0; } -int get_resource_attr_string_sync(struct resource *resource, u_int64_t attr_id, char **data) -{ - int ret; - - ret = update_resource_attr(resource, attr_id); - if (ret < 0) - return ret; - - return get_resource_attr_string(resource, attr_id, data); -} - int get_resource_attr_array(struct resource *resource, u_int64_t attr_id, struct array_value **data) { struct resource_attribute_value *attr_value = NULL; @@ -420,18 +393,6 @@ int put_resource_attr_array(struct resource *resource, u_int64_t attr_id) return 0; } -int get_resource_attr_array_sync(struct resource *resource, u_int64_t attr_id, - struct array_value **data) -{ - int ret; - - ret = update_resource_attr(resource, attr_id); - if (ret < 0) - return ret; - - return get_resource_attr_array(resource, attr_id, data); -} - int get_resource_attr_ptr(struct resource *resource, u_int64_t attr_id, void **data) { struct resource_attribute_value *attr_value = NULL; @@ -465,17 +426,6 @@ int put_resource_attr_ptr(struct resource *resource, u_int64_t attr_id) return 0; } -int get_resource_attr_ptr_sync(struct resource *resource, u_int64_t attr_id, void **data) -{ - int ret; - - ret = update_resource_attr(resource, attr_id); - if (ret < 0) - return ret; - - return get_resource_attr_ptr(resource, attr_id, data); -} - void set_resource_attr_interest(struct resource *resource, u_int64_t interest_mask) { resource->attr_interest |= interest_mask;