mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-21 06:59:28 +07:00
greybus: control: Warn if non-control cport/bundles have control protocol/classes
It is possible that (by mistake) the manifest contains non-control cports with their protocol set as control-protocol or non-control bundle with their class set as control-class. Catch such cases, WARN for them and finally ignore them. Also WARN if the control cport doesn't have its protocol as control-protocol and control bundle doesn't have its class as control-class. Reviewed-by: Alex Elder <elder@linaro.org> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
f18327e8eb
commit
730a2f6d10
@ -225,13 +225,21 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle)
|
||||
if (cport_id > CPORT_ID_MAX)
|
||||
goto cleanup;
|
||||
|
||||
/* Don't recreate connection for control cport */
|
||||
if (cport_id == GB_CONTROL_CPORT_ID)
|
||||
goto release_descriptor;
|
||||
|
||||
/* Found one. Set up its function structure */
|
||||
protocol_id = desc_cport->protocol_id;
|
||||
|
||||
/* Don't recreate connection for control cport */
|
||||
if (cport_id == GB_CONTROL_CPORT_ID) {
|
||||
/* This should have protocol set to control protocol*/
|
||||
WARN_ON(protocol_id != GREYBUS_PROTOCOL_CONTROL);
|
||||
|
||||
goto release_descriptor;
|
||||
}
|
||||
|
||||
/* Nothing else should have its protocol as control protocol */
|
||||
if (WARN_ON(protocol_id == GREYBUS_PROTOCOL_CONTROL))
|
||||
goto release_descriptor;
|
||||
|
||||
if (!gb_connection_create(bundle, cport_id, protocol_id))
|
||||
goto cleanup;
|
||||
|
||||
@ -277,10 +285,17 @@ static u32 gb_manifest_parse_bundles(struct gb_interface *intf)
|
||||
|
||||
/* Don't recreate bundle for control cport */
|
||||
if (desc_bundle->id == GB_CONTROL_BUNDLE_ID) {
|
||||
/* This should have class set to control class */
|
||||
WARN_ON(desc_bundle->class != GREYBUS_CLASS_CONTROL);
|
||||
|
||||
bundle = intf->control->connection->bundle;
|
||||
goto parse_cports;
|
||||
}
|
||||
|
||||
/* Nothing else should have its class set to control class */
|
||||
if (WARN_ON(desc_bundle->class == GREYBUS_CLASS_CONTROL))
|
||||
goto release_descriptor;
|
||||
|
||||
bundle = gb_bundle_create(intf, desc_bundle->id,
|
||||
desc_bundle->class);
|
||||
if (!bundle)
|
||||
@ -291,6 +306,7 @@ static u32 gb_manifest_parse_bundles(struct gb_interface *intf)
|
||||
if (!gb_manifest_parse_cports(bundle))
|
||||
goto cleanup;
|
||||
|
||||
release_descriptor:
|
||||
count++;
|
||||
|
||||
/* Done with this bundle descriptor */
|
||||
|
Loading…
Reference in New Issue
Block a user