[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH for-2.4 06/12] etsec: Flush queue when rx buffer is
From: |
Fam Zheng |
Subject: |
[Qemu-devel] [PATCH for-2.4 06/12] etsec: Flush queue when rx buffer is consumed |
Date: |
Tue, 14 Jul 2015 15:53:35 +0800 |
The BH will be scheduled when etsec->rx_buffer_len is becoming 0, which
is the condition of queuing.
Signed-off-by: Fam Zheng <address@hidden>
---
hw/net/fsl_etsec/etsec.c | 9 +++++++++
hw/net/fsl_etsec/etsec.h | 2 ++
hw/net/fsl_etsec/rings.c | 1 +
3 files changed, 12 insertions(+)
diff --git a/hw/net/fsl_etsec/etsec.c b/hw/net/fsl_etsec/etsec.c
index f5170ae..fcde9b4 100644
--- a/hw/net/fsl_etsec/etsec.c
+++ b/hw/net/fsl_etsec/etsec.c
@@ -366,6 +366,13 @@ static NetClientInfo net_etsec_info = {
.link_status_changed = etsec_set_link_status,
};
+static void etsec_flush_rx_queue(void *opaque)
+{
+ eTSEC *etsec = opaque;
+
+ qemu_flush_queued_packets(qemu_get_queue(etsec->nic));
+}
+
static void etsec_realize(DeviceState *dev, Error **errp)
{
eTSEC *etsec = ETSEC_COMMON(dev);
@@ -378,6 +385,8 @@ static void etsec_realize(DeviceState *dev, Error **errp)
etsec->bh = qemu_bh_new(etsec_timer_hit, etsec);
etsec->ptimer = ptimer_init(etsec->bh);
ptimer_set_freq(etsec->ptimer, 100);
+
+ etsec->flush_bh = qemu_bh_new(etsec_flush_rx_queue, etsec);
}
static void etsec_instance_init(Object *obj)
diff --git a/hw/net/fsl_etsec/etsec.h b/hw/net/fsl_etsec/etsec.h
index fc41773..05bb7f8 100644
--- a/hw/net/fsl_etsec/etsec.h
+++ b/hw/net/fsl_etsec/etsec.h
@@ -144,6 +144,8 @@ typedef struct eTSEC {
QEMUBH *bh;
struct ptimer_state *ptimer;
+ QEMUBH *flush_bh;
+
} eTSEC;
#define TYPE_ETSEC_COMMON "eTSEC"
diff --git a/hw/net/fsl_etsec/rings.c b/hw/net/fsl_etsec/rings.c
index a11280b..7aae93e 100644
--- a/hw/net/fsl_etsec/rings.c
+++ b/hw/net/fsl_etsec/rings.c
@@ -646,6 +646,7 @@ void etsec_walk_rx_ring(eTSEC *etsec, int ring_nbr)
} else {
etsec->rx_buffer_len = 0;
etsec->rx_buffer = NULL;
+ qemu_bh_schedule(etsec->flush_bh);
}
RING_DEBUG("eTSEC End of ring_write: remaining_data:%zu\n",
remaining_data);
--
2.4.3
- [Qemu-devel] [PATCH for-2.4 00/12] hw/net: Fix .can_receive() for NICs, Fam Zheng, 2015/07/14
- [Qemu-devel] [PATCH for-2.4 01/12] xgmac: Drop packets with eth_can_rx is false., Fam Zheng, 2015/07/14
- [Qemu-devel] [PATCH for-2.4 02/12] pcnet: Drop pcnet_can_receive, Fam Zheng, 2015/07/14
- [Qemu-devel] [PATCH for-2.4 03/12] eepro100: Drop nic_can_receive, Fam Zheng, 2015/07/14
- [Qemu-devel] [PATCH for-2.4 04/12] usbnet: Drop usbnet_can_receive, Fam Zheng, 2015/07/14
- [Qemu-devel] [PATCH for-2.4 05/12] etsec: Move etsec_can_receive into etsec_receive, Fam Zheng, 2015/07/14
- [Qemu-devel] [PATCH for-2.4 06/12] etsec: Flush queue when rx buffer is consumed,
Fam Zheng <=
- Re: [Qemu-devel] [PATCH for-2.4 06/12] etsec: Flush queue when rx buffer is consumed, Jason Wang, 2015/07/14
- Re: [Qemu-devel] [PATCH for-2.4 06/12] etsec: Flush queue when rx buffer is consumed, Fam Zheng, 2015/07/14
- Re: [Qemu-devel] [PATCH for-2.4 06/12] etsec: Flush queue when rx buffer is consumed, Jason Wang, 2015/07/15
- Re: [Qemu-devel] [PATCH for-2.4 06/12] etsec: Flush queue when rx buffer is consumed, Fam Zheng, 2015/07/15
- Re: [Qemu-devel] [PATCH for-2.4 06/12] etsec: Flush queue when rx buffer is consumed, Jason Wang, 2015/07/15
- Re: [Qemu-devel] [PATCH for-2.4 06/12] etsec: Flush queue when rx buffer is consumed, Fam Zheng, 2015/07/15
[Qemu-devel] [PATCH for-2.4 07/12] mcf_fec: Drop mcf_fec_can_receive, Fam Zheng, 2015/07/14
[Qemu-devel] [PATCH for-2.4 09/12] mipsnet: Flush queued packets when receiving is enabled, Fam Zheng, 2015/07/14
[Qemu-devel] [PATCH for-2.4 10/12] stellaris_enet: Flush queued packets when read done, Fam Zheng, 2015/07/14
[Qemu-devel] [PATCH for-2.4 11/12] dp8393x: Flush packets when link comes up, Fam Zheng, 2015/07/14