of: Improve prom_update_property() function
prom_update_property() currently fails if the property doesn't actually exist yet which isn't what we want. Change to add-or-update instead of update-only, then we can remove a lot duplicated lines. Suggested-by: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Dong Aisheng <dong.aisheng@linaro.org> Acked-by: Rob Herring <rob.herring@calxeda.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:

committed by
Benjamin Herrenschmidt

szülő
b416c9a10b
commit
475d009429
@@ -432,7 +432,7 @@ static int do_update_property(char *buf, size_t bufsize)
|
||||
unsigned char *value;
|
||||
char *name, *end, *next_prop;
|
||||
int rc, length;
|
||||
struct property *newprop, *oldprop;
|
||||
struct property *newprop;
|
||||
buf = parse_node(buf, bufsize, &np);
|
||||
end = buf + bufsize;
|
||||
|
||||
@@ -443,6 +443,9 @@ static int do_update_property(char *buf, size_t bufsize)
|
||||
if (!next_prop)
|
||||
return -EINVAL;
|
||||
|
||||
if (!strlen(name))
|
||||
return -ENODEV;
|
||||
|
||||
newprop = new_property(name, length, value, NULL);
|
||||
if (!newprop)
|
||||
return -ENOMEM;
|
||||
@@ -450,18 +453,11 @@ static int do_update_property(char *buf, size_t bufsize)
|
||||
if (!strcmp(name, "slb-size") || !strcmp(name, "ibm,slb-size"))
|
||||
slb_set_size(*(int *)value);
|
||||
|
||||
oldprop = of_find_property(np, name,NULL);
|
||||
if (!oldprop) {
|
||||
if (strlen(name))
|
||||
return prom_add_property(np, newprop);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
upd_value.node = np;
|
||||
upd_value.property = newprop;
|
||||
pSeries_reconfig_notify(PSERIES_UPDATE_PROPERTY, &upd_value);
|
||||
|
||||
rc = prom_update_property(np, newprop, oldprop);
|
||||
rc = prom_update_property(np, newprop);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@@ -486,7 +482,7 @@ static int do_update_property(char *buf, size_t bufsize)
|
||||
|
||||
rc = pSeries_reconfig_notify(action, value);
|
||||
if (rc) {
|
||||
prom_update_property(np, oldprop, newprop);
|
||||
prom_update_property(np, newprop);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user