zdev: add functionality to read site-specific settings

Modify the dev_get_setting_list function to get the site-specific
attributes of the device. The new site_id parameter for this function
must be less than SITE_FALLBACK to read the site-specific attributes.
As SITE_FALLBACK setting is same as persistent setting, we do not need
a separate read function for it.

Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com>
Signed-off-by: Vineeth Vijayan <vneethv@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
Vineeth Vijayan
2022-09-11 22:42:40 +02:00
committed by Jan Höppner
parent 2e89722ef0
commit d66ace8121
5 changed files with 24 additions and 10 deletions

View File

@@ -651,10 +651,16 @@ exit_code_t device_check_settings(struct device *dev, config_t config,
}
struct setting_list *device_get_setting_list(struct device *dev,
config_t config)
config_t config,
int site_id)
{
struct setting_list *settings = NULL;
if (site_id < SITE_FALLBACK) {
settings = dev->site_specific[site_id].settings;
goto out;
}
if (config == config_active)
settings = dev->active.settings;
else if (config == config_persistent)
@@ -662,6 +668,7 @@ struct setting_list *device_get_setting_list(struct device *dev,
else if (config == config_autoconf)
settings = dev->autoconf.settings;
out:
return settings;
}

View File

@@ -154,7 +154,7 @@ static int count_exportable(struct device *dev, config_t config)
struct setting *s;
int count;
list = device_get_setting_list(dev, config);
list = device_get_setting_list(dev, config, SITE_FALLBACK);
if (!list)
return 0;
count = 0;
@@ -462,7 +462,7 @@ static exit_code_t handle_setting(const char *filename, int lineno,
} else if (dev) {
/* We're inside a device section. */
attribs = dev->subtype->dev_attribs;
list = device_get_setting_list(dev, config);
list = device_get_setting_list(dev, config, SITE_FALLBACK);
} else
return EXIT_OK;

View File

@@ -348,7 +348,7 @@ static void _add_setting(const char *filename, struct device *dev,
struct attrib *a;
struct setting_list *list;
list = device_get_setting_list(dev, config);
list = device_get_setting_list(dev, config, SITE_FALLBACK);
a = attrib_find(dev->subtype->dev_attribs, key);
if (!a) {
warnx("%s: Applying unknown device setting %s=%s", filename,

View File

@@ -883,12 +883,13 @@ static char *dev_table_get_modules(struct device *dev)
return str;
}
static char *get_attr(struct device *dev, const char *name, config_t config)
static char *get_attr(struct device *dev, const char *name, config_t config,
int site_id)
{
struct setting_list *list;
struct setting *s;
list = device_get_setting_list(dev, config);
list = device_get_setting_list(dev, config, site_id);
if (!list)
return NULL;
s = setting_list_find(list, name);
@@ -915,12 +916,17 @@ static char *dev_table_get_attr(struct device *dev, const char *attr,
return NULL;
name++;
/* To get the default settings on any configuration, make sure that
* the site_id is specified as SITE_FALLBACK. Any value of site_id
* less than SITE_FALLBACK will endup providing site-specific attribute
* settings.
*/
if (SCOPE_ACTIVE(config))
act = get_attr(dev, name, config_active);
act = get_attr(dev, name, config_active, SITE_FALLBACK);
if (SCOPE_PERSISTENT(config))
pers = get_attr(dev, name, config_persistent);
pers = get_attr(dev, name, config_persistent, SITE_FALLBACK);
if (SCOPE_AUTOCONF(config))
ac = get_attr(dev, name, config_autoconf);
ac = get_attr(dev, name, config_autoconf, SITE_FALLBACK);
str = merge_str(act, pers, ac, config);
free(act);