firewire: ohci: optimize find_branch_descriptor()
authorClemens Ladisch <clemens@ladisch.de>
Tue, 12 Apr 2011 05:54:59 +0000 (07:54 +0200)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Tue, 19 Apr 2011 18:00:11 +0000 (20:00 +0200)
When z==2, the condition "key == 2" is superfluous because it cannot
occur without "b == 3", as a descriptor with b!=3 and key==2 would be
an OUTPUT_MORE_IMMEDIATE descriptor which cannot be used alone.

Also remove magic numbers and needless computations on the b field.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/firewire/ohci.c

index 435ed800d03ff6c6462a4a2ba44b9cc8a620f079..ce767a4882fb083d1990a1a6ef797e79cfa75985 100644 (file)
@@ -1006,13 +1006,12 @@ static void ar_context_run(struct ar_context *ctx)
 
 static struct descriptor *find_branch_descriptor(struct descriptor *d, int z)
 {
-       int b, key;
+       __le16 branch;
 
-       b   = (le16_to_cpu(d->control) & DESCRIPTOR_BRANCH_ALWAYS) >> 2;
-       key = (le16_to_cpu(d->control) & DESCRIPTOR_KEY_IMMEDIATE) >> 8;
+       branch = d->control & cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS);
 
        /* figure out which descriptor the branch address goes in */
-       if (z == 2 && (b == 3 || key == 2))
+       if (z == 2 && branch == cpu_to_le16(DESCRIPTOR_BRANCH_ALWAYS))
                return d;
        else
                return d + z - 1;