Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 78212
b: refs/heads/master
c: 82d8a86
h: refs/heads/master
v: v3
  • Loading branch information
Pavel Emelyanov authored and David S. Miller committed Jan 28, 2008
1 parent bc4e67f commit 63235e3
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 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: 8d8ad9d7c4bfe79bc91b7fc419ecfb9dcdfe6a51
refs/heads/master: 82d8a867ffaed7fe58e789103b32c0fc6b79dafd
23 changes: 14 additions & 9 deletions trunk/net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,11 @@
* 86DD IPv6
*/

#define PTYPE_HASH_SIZE (16)
#define PTYPE_HASH_MASK (PTYPE_HASH_SIZE - 1)

static DEFINE_SPINLOCK(ptype_lock);
static struct list_head ptype_base[16] __read_mostly; /* 16 way hashed list */
static struct list_head ptype_base[PTYPE_HASH_SIZE] __read_mostly;
static struct list_head ptype_all __read_mostly; /* Taps */

#ifdef CONFIG_NET_DMA
Expand Down Expand Up @@ -362,7 +365,7 @@ void dev_add_pack(struct packet_type *pt)
if (pt->type == htons(ETH_P_ALL))
list_add_rcu(&pt->list, &ptype_all);
else {
hash = ntohs(pt->type) & 15;
hash = ntohs(pt->type) & PTYPE_HASH_MASK;
list_add_rcu(&pt->list, &ptype_base[hash]);
}
spin_unlock_bh(&ptype_lock);
Expand Down Expand Up @@ -391,7 +394,7 @@ void __dev_remove_pack(struct packet_type *pt)
if (pt->type == htons(ETH_P_ALL))
head = &ptype_all;
else
head = &ptype_base[ntohs(pt->type) & 15];
head = &ptype_base[ntohs(pt->type) & PTYPE_HASH_MASK];

list_for_each_entry(pt1, head, list) {
if (pt == pt1) {
Expand Down Expand Up @@ -1420,7 +1423,8 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features)
}

rcu_read_lock();
list_for_each_entry_rcu(ptype, &ptype_base[ntohs(type) & 15], list) {
list_for_each_entry_rcu(ptype,
&ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
if (ptype->type == type && !ptype->dev && ptype->gso_segment) {
if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) {
err = ptype->gso_send_check(skb);
Expand Down Expand Up @@ -2077,7 +2081,8 @@ int netif_receive_skb(struct sk_buff *skb)
goto out;

type = skb->protocol;
list_for_each_entry_rcu(ptype, &ptype_base[ntohs(type)&15], list) {
list_for_each_entry_rcu(ptype,
&ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
if (ptype->type == type &&
(!ptype->dev || ptype->dev == skb->dev)) {
if (pt_prev)
Expand Down Expand Up @@ -2525,7 +2530,7 @@ static void *ptype_get_idx(loff_t pos)
++i;
}

for (t = 0; t < 16; t++) {
for (t = 0; t < PTYPE_HASH_SIZE; t++) {
list_for_each_entry_rcu(pt, &ptype_base[t], list) {
if (i == pos)
return pt;
Expand Down Expand Up @@ -2559,10 +2564,10 @@ static void *ptype_seq_next(struct seq_file *seq, void *v, loff_t *pos)
hash = 0;
nxt = ptype_base[0].next;
} else
hash = ntohs(pt->type) & 15;
hash = ntohs(pt->type) & PTYPE_HASH_MASK;

while (nxt == &ptype_base[hash]) {
if (++hash >= 16)
if (++hash >= PTYPE_HASH_SIZE)
return NULL;
nxt = ptype_base[hash].next;
}
Expand Down Expand Up @@ -4398,7 +4403,7 @@ static int __init net_dev_init(void)
goto out;

INIT_LIST_HEAD(&ptype_all);
for (i = 0; i < 16; i++)
for (i = 0; i < PTYPE_HASH_SIZE; i++)
INIT_LIST_HEAD(&ptype_base[i]);

if (register_pernet_subsys(&netdev_net_ops))
Expand Down

0 comments on commit 63235e3

Please sign in to comment.