[PATCH] firewire: fw-ohci: untangle a mixed unsigned/signedexpression

From: Stefan Richter
Date: Mon Mar 10 2008 - 21:17:41 EST


My old C textbook says that the result of casting an unsigned to signed
is undefined if the former's value can't be represented in the latter's
type. Maybe that book is too old...?

Anyway, this change makes it more explicit what is going on, i.e. that
p.ack is meant to become negative on some occasions. (p.ack is an int.)
fw-ohci.s does actually not change due to 1st and 2nd hunk of this patch
(with gcc 4.1.2 i686 -O2).

The 3rd hunk makes an expression more readable.

Signed-off-by: Stefan Richter <stefanr@xxxxxxxxxxxxxxxxx>
---

applies after patch "firewire: debug AT, AR, and selfID-complete events"

drivers/firewire/fw-ohci.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)

Index: linux/drivers/firewire/fw-ohci.c
===================================================================
--- linux.orig/drivers/firewire/fw-ohci.c
+++ linux/drivers/firewire/fw-ohci.c
@@ -421,6 +421,7 @@ static __le32 *handle_ar_packet(struct a
struct fw_ohci *ohci = ctx->ohci;
struct fw_packet p;
u32 status, length, tcode;
+ int evt;

p.header[0] = cond_le32_to_cpu(buffer[0]);
p.header[1] = cond_le32_to_cpu(buffer[1]);
@@ -464,13 +465,14 @@ static __le32 *handle_ar_packet(struct a
length = (p.header_length + p.payload_length + 3) / 4;
status = cond_le32_to_cpu(buffer[length]);

- p.ack = ((status >> 16) & 0x1f) - 16;
+ evt = (status >> 16) & 0x1f;
+ p.ack = evt - 16;
p.speed = (status >> 21) & 0x7;
p.timestamp = status & 0xffff;
p.generation = ohci->request_generation;

if (unlikely(param_debug & OHCI_PARAM_DEBUG_AT_AR))
- debug_ar_at_event('R', p.speed, p.header, status >> 16 & 0x1f);
+ debug_ar_at_event('R', p.speed, p.header, evt);

/*
* The OHCI bus reset handler synthesizes a phy packet with
@@ -482,7 +484,7 @@ static __le32 *handle_ar_packet(struct a
* request.
*/

- if (p.ack + 16 == 0x09)
+ if (evt == OHCI1394_evt_bus_reset)
ohci->request_generation = (p.header[2] >> 16) & 0xff;
else if (ctx == &ohci->ar_request_ctx)
fw_core_handle_request(&ohci->card, &p);

--
Stefan Richter
-=====-==--- --== -=-==
http://arcgraph.de/sr/


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/