software node: replace is_array with is_inline
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 8 Nov 2019 04:22:20 +0000 (20:22 -0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 3 Dec 2019 10:46:19 +0000 (11:46 +0100)
We do not need a special flag to know if we are dealing with an
array, as we can get that data from ratio between element length and
the data size, but we do need a flag to know whether or not the data
is stored directly inside property_entry.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
[ rjw: Subject & changelog, struct property_entry kerneldoc ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/base/swnode.c
include/linux/property.h

index d8d0dc0ca5acf289c8a712cd2a9d78dc5c6fcf24..18a30fb3cc588c32843321e96cef23d5664dd26a 100644 (file)
@@ -108,10 +108,7 @@ static const void *property_get_pointer(const struct property_entry *prop)
        if (!prop->length)
                return NULL;
 
-       if (prop->is_array)
-               return prop->pointer;
-
-       return &prop->value;
+       return prop->is_inline ? &prop->value : prop->pointer;
 }
 
 static const void *property_entry_find(const struct property_entry *props,
@@ -205,7 +202,7 @@ static void property_entry_free_data(const struct property_entry *p)
        const char * const *src_str;
        size_t i, nval;
 
-       if (p->is_array) {
+       if (!p->is_inline) {
                if (p->type == DEV_PROP_STRING && p->pointer) {
                        src_str = p->pointer;
                        nval = p->length / sizeof(const char *);
@@ -250,7 +247,7 @@ static int property_entry_copy_data(struct property_entry *dst,
        const void *pointer = property_get_pointer(src);
        const void *new;
 
-       if (src->is_array) {
+       if (!src->is_inline) {
                if (!src->length)
                        return -ENODATA;
 
@@ -264,15 +261,16 @@ static int property_entry_copy_data(struct property_entry *dst,
                                return -ENOMEM;
                }
 
-               dst->is_array = true;
                dst->pointer = new;
        } else if (src->type == DEV_PROP_STRING) {
                new = kstrdup(src->value.str, GFP_KERNEL);
                if (!new && src->value.str)
                        return -ENOMEM;
 
+               dst->is_inline = true;
                dst->value.str = new;
        } else {
+               dst->is_inline = true;
                dst->value = src->value;
        }
 
index 48335288c2a96db23f6de5888b31282f315d8ec5..6c1ca870a9a9dbb6494cd454c9ccf9ab33652bb4 100644 (file)
@@ -227,15 +227,15 @@ static inline int fwnode_property_count_u64(const struct fwnode_handle *fwnode,
  * struct property_entry - "Built-in" device property representation.
  * @name: Name of the property.
  * @length: Length of data making up the value.
- * @is_array: True when the property is an array.
+ * @is_inline: True when the property value is stored inline.
  * @type: Type of the data in unions.
- * @pointer: Pointer to the property (an array of items of the given type).
- * @value: Value of the property (when it is a single item of the given type).
+ * @pointer: Pointer to the property when it is not stored inline.
+ * @value: Value of the property when it is stored inline.
  */
 struct property_entry {
        const char *name;
        size_t length;
-       bool is_array;
+       bool is_inline;
        enum dev_prop_type type;
        union {
                const void *pointer;
@@ -262,7 +262,6 @@ struct property_entry {
 (struct property_entry) {                                              \
        .name = _name_,                                                 \
        .length = (_len_) * __PROPERTY_ENTRY_ELEMENT_SIZE(_elem_),      \
-       .is_array = true,                                               \
        .type = DEV_PROP_##_Type_,                                      \
        { .pointer = _val_ },                                           \
 }
@@ -293,6 +292,7 @@ struct property_entry {
 (struct property_entry) {                                              \
        .name = _name_,                                                 \
        .length = __PROPERTY_ENTRY_ELEMENT_SIZE(_elem_),                \
+       .is_inline = true,                                              \
        .type = DEV_PROP_##_Type_,                                      \
        { .value = { ._elem_ = _val_ } },                               \
 }
@@ -311,6 +311,7 @@ struct property_entry {
 #define PROPERTY_ENTRY_BOOL(_name_)            \
 (struct property_entry) {                      \
        .name = _name_,                         \
+       .is_inline = true,                      \
 }
 
 struct property_entry *