[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <tkrat.3e10d02dc42cb944@s5r6.in-berlin.de>
Date: Tue, 11 Mar 2008 02:16:08 +0100 (CET)
From: Stefan Richter <stefanr@...6.in-berlin.de>
To: linux1394-devel@...ts.sourceforge.net
cc: linux-kernel@...r.kernel.org
Subject: [PATCH] firewire: fw-ohci: untangle a mixed unsigned/signed
expression
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@...6.in-berlin.de>
---
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@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists