util: resource: Add preprocessing before updating attributes 83/270883/2
authorDongwoo Lee <dwoo08.lee@samsung.com>
Thu, 10 Feb 2022 12:00:11 +0000 (21:00 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Fri, 11 Feb 2022 00:57:30 +0000 (00:57 +0000)
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 <dwoo08.lee@samsung.com>
include/util/resource.h
src/util/resource.c

index f6a18f94d6d85a9b2114ca081a604ec0b96c039e..ac0fe6b52e12ae81508a07360eb690de432ffb3f 100644 (file)
@@ -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);
index 25def15079061e008a255b07ec4c6784cf1afa11..4910742ffa8e340e4477fae52ff7890109740a9f 100644 (file)
@@ -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;