Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 197167
b: refs/heads/master
c: ea4ceb1
h: refs/heads/master
i:
  197165: 7bb263b
  197163: edcc2f0
  197159: 9ac5451
  197151: c122162
v: v3
  • Loading branch information
Linus Lüssing authored and Greg Kroah-Hartman committed May 11, 2010
1 parent 3e593ce commit a108c38
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f6497e38fda6970819daacb67725d67474079381
refs/heads/master: ea4ceb18b525fd7016c10995c0f1313a729c7e2b
18 changes: 17 additions & 1 deletion trunk/drivers/staging/batman-adv/vis.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,22 @@
#include "hard-interface.h"
#include "hash.h"

/* Returns the smallest signed integer in two's complement with the sizeof x */
#define smallest_signed_int(x) (1u << (7u + 8u * (sizeof(x) - 1u)))

/* Checks if a sequence number x is a predecessor/successor of y.
they handle overflows/underflows and can correctly check for a
predecessor/successor unless the variable sequence number has grown by
more then 2**(bitwidth(x)-1)-1.
This means that for a uint8_t with the maximum value 255, it would think:
* when adding nothing - it is neither a predecessor nor a successor
* before adding more than 127 to the starting value - it is a predecessor,
* when adding 128 - it is neither a predecessor nor a successor,
* after adding more than 127 to the starting value - it is a successor */
#define seq_before(x, y) ({typeof(x) _dummy = (x - y); \
_dummy > smallest_signed_int(_dummy); })
#define seq_after(x, y) seq_before(y, x)

struct hashtable_t *vis_hash;
DEFINE_SPINLOCK(vis_hash_lock);
static DEFINE_SPINLOCK(recv_list_lock);
Expand Down Expand Up @@ -212,7 +228,7 @@ static struct vis_info *add_packet(struct vis_packet *vis_packet,
old_info = hash_find(vis_hash, &search_elem);

if (old_info != NULL) {
if (vis_packet->seqno - old_info->packet.seqno <= 0) {
if (!seq_after(vis_packet->seqno, old_info->packet.seqno)) {
if (old_info->packet.seqno == vis_packet->seqno) {
recv_list_add(&old_info->recv_list,
vis_packet->sender_orig);
Expand Down

0 comments on commit a108c38

Please sign in to comment.