static void dlpar_free_one_cc_node(struct device_node *dn) { struct property *prop; while (dn->properties) { prop = dn->properties; dn->properties = prop->next; dlpar_free_cc_property(prop); } kfree(dn->full_name); kfree(dn); }
static struct property *dlpar_parse_cc_property(struct cc_workarea *ccwa) { struct property *prop; char *name; char *value; prop = kzalloc(sizeof(*prop), GFP_KERNEL); if (!prop) return NULL; name = (char *)ccwa + ccwa->name_offset; prop->name = kstrdup(name, GFP_KERNEL); prop->length = ccwa->prop_length; value = (char *)ccwa + ccwa->prop_offset; prop->value = kmemdup(value, prop->length, GFP_KERNEL); if (!prop->value) { dlpar_free_cc_property(prop); return NULL; } return prop; }