cadence_gem: Correct the multi-queue can rx logic
Correct the buffer descriptor busy logic to work correctly when using multiple queues. Signed-off-by: Alistair Francis <alistair.francis@xilinx.com> Message-id: 8a7e8059984e27d46a276a66299d035a0afd280f.1491947224.git.alistair.francis@xilinx.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
75b7760212
commit
dacc0566ac
@ -481,14 +481,17 @@ static int gem_can_receive(NetClientState *nc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < s->num_priority_queues; i++) {
|
for (i = 0; i < s->num_priority_queues; i++) {
|
||||||
if (rx_desc_get_ownership(s->rx_desc[i]) == 1) {
|
if (rx_desc_get_ownership(s->rx_desc[i]) != 1) {
|
||||||
if (s->can_rx_state != 2) {
|
break;
|
||||||
s->can_rx_state = 2;
|
|
||||||
DB_PRINT("can't receive - busy buffer descriptor (q%d) 0x%x\n",
|
|
||||||
i, s->rx_desc_addr[i]);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if (i == s->num_priority_queues) {
|
||||||
|
if (s->can_rx_state != 2) {
|
||||||
|
s->can_rx_state = 2;
|
||||||
|
DB_PRINT("can't receive - all the buffer descriptors are busy\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s->can_rx_state != 0) {
|
if (s->can_rx_state != 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user