greybus: manifest: check for duplicate CPort descriptors when parsing
Now that connection creation has been separated from interface initialisation, we should explicitly check for duplicate CPort descriptors when parsing the manifest. Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
98fdf5a037
commit
d6fba3dbb0
@ -230,8 +230,7 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle)
|
|||||||
{
|
{
|
||||||
struct gb_interface *intf = bundle->intf;
|
struct gb_interface *intf = bundle->intf;
|
||||||
struct greybus_descriptor_cport *desc_cport;
|
struct greybus_descriptor_cport *desc_cport;
|
||||||
struct manifest_desc *desc;
|
struct manifest_desc *desc, *next, *tmp;
|
||||||
struct manifest_desc *next;
|
|
||||||
LIST_HEAD(list);
|
LIST_HEAD(list);
|
||||||
u8 bundle_id = bundle->id;
|
u8 bundle_id = bundle->id;
|
||||||
u16 cport_id;
|
u16 cport_id;
|
||||||
@ -251,7 +250,19 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle)
|
|||||||
if (cport_id > CPORT_ID_MAX)
|
if (cport_id > CPORT_ID_MAX)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
/* Found one, move it to our temporary list. */
|
/*
|
||||||
|
* Found one, move it to our temporary list after checking for
|
||||||
|
* duplicates.
|
||||||
|
*/
|
||||||
|
list_for_each_entry(tmp, &list, links) {
|
||||||
|
desc_cport = tmp->data;
|
||||||
|
if (cport_id == desc_cport->id) {
|
||||||
|
dev_err(&bundle->dev,
|
||||||
|
"duplicate CPort %u found\n",
|
||||||
|
cport_id);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
list_move(&desc->links, &list);
|
list_move(&desc->links, &list);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user