staging: et131x: Simplify code in nic_rx_pkts() for multicast_pkts_rcvd
In nic_rx_pkts(), we check that a multicast packet received (when using a multicast list) is one that was requested - despite setting the list up with the hardware. We shouldn't expect to get a mc packet we didn't ask for, so remove these extra checks. This also means that the surrounding code can be tiedied up a little. Tested somewhat with omping, with no adverse effects seen. Also remove this item from the TODO list. Signed-off-by: Mark Einon <mark.einon@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
668caa674c
commit
8019f2e2aa
2 changed files with 2 additions and 53 deletions
|
@ -9,7 +9,6 @@ driver as they did not build properly at the time.
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- Look at reducing the number of spinlocks
|
- Look at reducing the number of spinlocks
|
||||||
- Simplify code in nic_rx_pkts(), when determining multicast_pkts_rcvd
|
|
||||||
- Reduce the number of split lines by careful consideration of variable names etc.
|
- Reduce the number of split lines by careful consideration of variable names etc.
|
||||||
|
|
||||||
Please send patches to:
|
Please send patches to:
|
||||||
|
|
|
@ -2372,8 +2372,6 @@ static struct rfd *nic_rx_pkts(struct et131x_adapter *adapter)
|
||||||
struct rx_status_block *status;
|
struct rx_status_block *status;
|
||||||
struct pkt_stat_desc *psr;
|
struct pkt_stat_desc *psr;
|
||||||
struct rfd *rfd;
|
struct rfd *rfd;
|
||||||
u32 i;
|
|
||||||
u8 *buf;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct list_head *element;
|
struct list_head *element;
|
||||||
u8 ring_index;
|
u8 ring_index;
|
||||||
|
@ -2453,60 +2451,12 @@ static struct rfd *nic_rx_pkts(struct et131x_adapter *adapter)
|
||||||
*/
|
*/
|
||||||
if (len < (NIC_MIN_PACKET_SIZE + 4)) {
|
if (len < (NIC_MIN_PACKET_SIZE + 4)) {
|
||||||
adapter->stats.rx_other_errs++;
|
adapter->stats.rx_other_errs++;
|
||||||
len = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len == 0) {
|
|
||||||
rfd->len = 0;
|
rfd->len = 0;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determine if this is a multicast packet coming in */
|
if ((word0 & ALCATEL_MULTICAST_PKT) && !(word0 & ALCATEL_BROADCAST_PKT))
|
||||||
if ((word0 & ALCATEL_MULTICAST_PKT) &&
|
adapter->stats.multicast_pkts_rcvd++;
|
||||||
!(word0 & ALCATEL_BROADCAST_PKT)) {
|
|
||||||
/* Promiscuous mode and Multicast mode are not mutually
|
|
||||||
* exclusive as was first thought. I guess Promiscuous is just
|
|
||||||
* considered a super-set of the other filters. Generally filter
|
|
||||||
* is 0x2b when in promiscuous mode.
|
|
||||||
*/
|
|
||||||
if ((adapter->packet_filter & ET131X_PACKET_TYPE_MULTICAST)
|
|
||||||
&& !(adapter->packet_filter & ET131X_PACKET_TYPE_PROMISCUOUS)
|
|
||||||
&& !(adapter->packet_filter &
|
|
||||||
ET131X_PACKET_TYPE_ALL_MULTICAST)) {
|
|
||||||
buf = fbr->virt[buff_index];
|
|
||||||
|
|
||||||
/* Loop through our list to see if the destination
|
|
||||||
* address of this packet matches one in our list.
|
|
||||||
*/
|
|
||||||
for (i = 0; i < adapter->multicast_addr_count; i++) {
|
|
||||||
if (buf[0] == adapter->multicast_list[i][0]
|
|
||||||
&& buf[1] == adapter->multicast_list[i][1]
|
|
||||||
&& buf[2] == adapter->multicast_list[i][2]
|
|
||||||
&& buf[3] == adapter->multicast_list[i][3]
|
|
||||||
&& buf[4] == adapter->multicast_list[i][4]
|
|
||||||
&& buf[5] == adapter->multicast_list[i][5]) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If our index is equal to the number of Multicast
|
|
||||||
* address we have, then this means we did not find this
|
|
||||||
* packet's matching address in our list. Set the len to
|
|
||||||
* zero, so we free our RFD when we return from this
|
|
||||||
* function.
|
|
||||||
*/
|
|
||||||
if (i == adapter->multicast_addr_count)
|
|
||||||
len = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len > 0)
|
|
||||||
adapter->stats.multicast_pkts_rcvd++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!len) {
|
|
||||||
rfd->len = 0;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
rfd->len = len;
|
rfd->len = len;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue