Commit e6bff466 authored by Dmitry Torokhov's avatar Dmitry Torokhov Committed by Rafael J. Wysocki
Browse files

software node: replace is_array with is_inline



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: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
[ rjw: Subject & changelog, struct property_entry kerneldoc ]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 67b8ed29
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -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;
	}

+6 −5
Original line number Diff line number Diff line
@@ -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 *