diff options
| -rw-r--r-- | drivers/net/wimax/i2400m/rx.c | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/drivers/net/wimax/i2400m/rx.c b/drivers/net/wimax/i2400m/rx.c index 71b697f3a68d..66f968a24d49 100644 --- a/drivers/net/wimax/i2400m/rx.c +++ b/drivers/net/wimax/i2400m/rx.c | |||
| @@ -743,12 +743,12 @@ unsigned __i2400m_roq_update_ws(struct i2400m *i2400m, struct i2400m_roq *roq, | |||
| 743 | unsigned new_nws, nsn_itr; | 743 | unsigned new_nws, nsn_itr; |
| 744 | 744 | ||
| 745 | new_nws = __i2400m_roq_nsn(roq, sn); | 745 | new_nws = __i2400m_roq_nsn(roq, sn); |
| 746 | if (unlikely(new_nws >= 1024) && d_test(1)) { | 746 | /* |
| 747 | dev_err(dev, "SW BUG? __update_ws new_nws %u (sn %u ws %u)\n", | 747 | * For type 2(update_window_start) rx messages, there is no |
| 748 | new_nws, sn, roq->ws); | 748 | * need to check if the normalized sequence number is greater 1023. |
| 749 | WARN_ON(1); | 749 | * Simply insert and deliver all packets to the host up to the |
| 750 | i2400m_roq_log_dump(i2400m, roq); | 750 | * window start. |
| 751 | } | 751 | */ |
| 752 | skb_queue_walk_safe(&roq->queue, skb_itr, tmp_itr) { | 752 | skb_queue_walk_safe(&roq->queue, skb_itr, tmp_itr) { |
| 753 | roq_data_itr = (struct i2400m_roq_data *) &skb_itr->cb; | 753 | roq_data_itr = (struct i2400m_roq_data *) &skb_itr->cb; |
| 754 | nsn_itr = __i2400m_roq_nsn(roq, roq_data_itr->sn); | 754 | nsn_itr = __i2400m_roq_nsn(roq, roq_data_itr->sn); |
| @@ -890,26 +890,27 @@ void i2400m_roq_queue_update_ws(struct i2400m *i2400m, struct i2400m_roq *roq, | |||
| 890 | i2400m, roq, skb, sn); | 890 | i2400m, roq, skb, sn); |
| 891 | len = skb_queue_len(&roq->queue); | 891 | len = skb_queue_len(&roq->queue); |
| 892 | nsn = __i2400m_roq_nsn(roq, sn); | 892 | nsn = __i2400m_roq_nsn(roq, sn); |
| 893 | /* | ||
| 894 | * For type 3(queue_update_window_start) rx messages, there is no | ||
| 895 | * need to check if the normalized sequence number is greater 1023. | ||
| 896 | * Simply insert and deliver all packets to the host up to the | ||
| 897 | * window start. | ||
| 898 | */ | ||
| 893 | old_ws = roq->ws; | 899 | old_ws = roq->ws; |
| 894 | if (unlikely(nsn >= 1024)) { | 900 | /* If the queue is empty, don't bother as we'd queue |
| 895 | dev_err(dev, "SW BUG? queue_update_ws nsn %u (sn %u ws %u)\n", | 901 | * it and immediately unqueue it -- just deliver it. |
| 896 | nsn, sn, roq->ws); | 902 | */ |
| 897 | i2400m_roq_log_dump(i2400m, roq); | 903 | if (len == 0) { |
| 898 | i2400m_reset(i2400m, I2400M_RT_WARM); | 904 | struct i2400m_roq_data *roq_data; |
| 899 | } else { | 905 | roq_data = (struct i2400m_roq_data *) &skb->cb; |
| 900 | /* if the queue is empty, don't bother as we'd queue | 906 | i2400m_net_erx(i2400m, skb, roq_data->cs); |
| 901 | * it and inmediately unqueue it -- just deliver it */ | 907 | } else |
| 902 | if (len == 0) { | 908 | __i2400m_roq_queue(i2400m, roq, skb, sn, nsn); |
| 903 | struct i2400m_roq_data *roq_data; | 909 | |
| 904 | roq_data = (struct i2400m_roq_data *) &skb->cb; | 910 | __i2400m_roq_update_ws(i2400m, roq, sn + 1); |
| 905 | i2400m_net_erx(i2400m, skb, roq_data->cs); | 911 | i2400m_roq_log_add(i2400m, roq, I2400M_RO_TYPE_PACKET_WS, |
| 906 | } | 912 | old_ws, len, sn, nsn, roq->ws); |
| 907 | else | 913 | |
| 908 | __i2400m_roq_queue(i2400m, roq, skb, sn, nsn); | ||
| 909 | __i2400m_roq_update_ws(i2400m, roq, sn + 1); | ||
| 910 | i2400m_roq_log_add(i2400m, roq, I2400M_RO_TYPE_PACKET_WS, | ||
| 911 | old_ws, len, sn, nsn, roq->ws); | ||
| 912 | } | ||
| 913 | d_fnend(2, dev, "(i2400m %p roq %p skb %p sn %u) = void\n", | 914 | d_fnend(2, dev, "(i2400m %p roq %p skb %p sn %u) = void\n", |
| 914 | i2400m, roq, skb, sn); | 915 | i2400m, roq, skb, sn); |
| 915 | return; | 916 | return; |
