lkml.org 
[lkml]   [2008]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
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@s5r6.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/



\
 
 \ /
  Last update: 2008-03-11 02:19    [W:0.046 / U:0.240 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site