Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1f9eda7e2b67898fb8e79b3aa3880211b51235e6
Commit:     1f9eda7e2b67898fb8e79b3aa3880211b51235e6
Parent:     43fb45cb79e9441a79ece206cf741774500dd627
Author:     Allan Stephens <[EMAIL PROTECTED]>
AuthorDate: Tue Apr 24 14:51:55 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Apr 25 22:29:49 2007 -0700

    [TIPC]: Enhancements to msg_set_bits() routine
    
    This patch makes two enhancements to msg_set_bits():
    
    1) It now ignores any bits of the new field value that are not
       covered by the mask being used.  (Previously, if the new value
       exceeded the size of the mask the extra bits could corrupt
       other fields in the message header word being updated.)
    
    2) The code has been optimized to minimize the number of run-time
       endianness conversion operations by leveraging the fact that the
       mask (and, in some cases, the value as well) is constant and the
       necessary conversion can be performed by the compiler.
    
    Signed-off-by: Allan Stephens <[EMAIL PROTECTED]>
    Signed-off-by: Jon Paul Maloy <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/tipc/msg.h |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/net/tipc/msg.h b/net/tipc/msg.h
index aec7ce7..35d5ba1 100644
--- a/net/tipc/msg.h
+++ b/net/tipc/msg.h
@@ -1,8 +1,8 @@
 /*
  * net/tipc/msg.h: Include file for TIPC message header routines
  *
- * Copyright (c) 2000-2006, Ericsson AB
- * Copyright (c) 2005, Wind River Systems
+ * Copyright (c) 2000-2007, Ericsson AB
+ * Copyright (c) 2005-2007, Wind River Systems
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -71,8 +71,11 @@ static inline void msg_set_word(struct tipc_msg *m, u32 w, 
u32 val)
 static inline void msg_set_bits(struct tipc_msg *m, u32 w,
                                u32 pos, u32 mask, u32 val)
 {
-       u32 word = msg_word(m,w) & ~(mask << pos);
-       msg_set_word(m, w, (word |= (val << pos)));
+       val = (val & mask) << pos;
+       val = htonl(val);
+       mask = htonl(mask << pos);
+       m->hdr[w] &= ~mask;
+       m->hdr[w] |= val;
 }
 
 /*
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to