Commit 6869eb56 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

greybus: Revert "protocol: dedup protocol find code"



This reverts commit 241b5fefc54eae95239b0f7dc4e2b0db49457729 as it's
wrong, we want to insert into the correct place in the list.

Reported-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent c1a0a8fc
Loading
Loading
Loading
Loading
+25 −10
Original line number Diff line number Diff line
@@ -20,13 +20,6 @@ static struct gb_protocol *_gb_protocol_find(u8 id, u8 major, u8 minor)
{
	struct gb_protocol *protocol;

	/*
	 * The protocols list is sorted first by protocol id (low to
	 * high), then by major version (high to low), and finally
	 * by minor version (high to low).  Searching only by
	 * protocol id will produce the newest implemented version
	 * of the protocol.
	 */
	list_for_each_entry(protocol, &gb_protocols, links) {
		if (protocol->id < id)
			continue;
@@ -57,12 +50,34 @@ int __gb_protocol_register(struct gb_protocol *protocol, struct module *module)

	protocol->owner = module;

	/*
	 * The protocols list is sorted first by protocol id (low to
	 * high), then by major version (high to low), and finally
	 * by minor version (high to low).  Searching only by
	 * protocol id will produce the newest implemented version
	 * of the protocol.
	 */
	spin_lock_irq(&gb_protocols_lock);

	/* check if the protocol already wos registered */
	existing = _gb_protocol_find(id, major, minor);
	if (existing) {
	list_for_each_entry(existing, &gb_protocols, links) {
		if (existing->id < id)
			continue;
		if (existing->id > id)
			break;

		if (existing->major > major)
			continue;
		if (existing->major < major)
			break;

		if (existing->minor > minor)
			continue;
		if (existing->minor < minor)
			break;

		/* A matching protocol has already been registered */
		spin_unlock_irq(&gb_protocols_lock);

		return -EEXIST;
	}