summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/qemu
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2015-09-14 10:20:53 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-09-14 20:46:40 +0100
commitea562de57590c966cd5a75fda8defecd397e6436 (patch)
treecc1bfbbced5244130a102cdd63c72584b1d6e408 /meta/recipes-devtools/qemu
parent1d0b9228364e7970ec05ec2b9692c56f4835ac22 (diff)
downloadpoky-ea562de57590c966cd5a75fda8defecd397e6436.tar.gz
qemu: Update to upstream patches
(From OE-Core rev: f0189829498e30231d826c9f55aad73e622d076e) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/qemu')
-rw-r--r--meta/recipes-devtools/qemu/qemu/smc91c111_fix1.patch85
-rw-r--r--meta/recipes-devtools/qemu/qemu/smc91c111_fix2.patch46
-rw-r--r--meta/recipes-devtools/qemu/qemu/smc91c111_fix3.patch33
-rw-r--r--meta/recipes-devtools/qemu/qemu_2.4.0.bb4
4 files changed, 167 insertions, 1 deletions
diff --git a/meta/recipes-devtools/qemu/qemu/smc91c111_fix1.patch b/meta/recipes-devtools/qemu/qemu/smc91c111_fix1.patch
new file mode 100644
index 0000000000..bd1223a446
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/smc91c111_fix1.patch
@@ -0,0 +1,85 @@
1From: Peter Crosthwaite <crosthwaitepeter@gmail.com>
2Subject: [RFT PATCH v1 1/3] net: smc91c111: guard flush_queued_packets() on
3 can_rx()
4Date: Thu, 10 Sep 2015 21:23:43 -0700
5
6Check that the core can once again receive packets before asking the
7net layer to do a flush. This will make it more convenient to flush
8packets when adding new conditions to can_receive.
9
10Add missing if braces while moving the can_receive() core code.
11
12Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
13
14Upstream-Status: Submitted
15
16---
17
18 hw/net/smc91c111.c | 30 ++++++++++++++++++++++--------
19 1 file changed, 22 insertions(+), 8 deletions(-)
20
21Index: qemu-2.4.0/hw/net/smc91c111.c
22===================================================================
23--- qemu-2.4.0.orig/hw/net/smc91c111.c
24+++ qemu-2.4.0/hw/net/smc91c111.c
25@@ -124,6 +124,24 @@ static void smc91c111_update(smc91c111_s
26 qemu_set_irq(s->irq, level);
27 }
28
29+static int smc91c111_can_receive(smc91c111_state *s)
30+{
31+ if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST)) {
32+ return 1;
33+ }
34+ if (s->allocated == (1 << NUM_PACKETS) - 1) {
35+ return 0;
36+ }
37+ return 1;
38+}
39+
40+static inline void smc91c111_flush_queued_packets(smc91c111_state *s)
41+{
42+ if (smc91c111_can_receive(s)) {
43+ qemu_flush_queued_packets(qemu_get_queue(s->nic));
44+ }
45+}
46+
47 /* Try to allocate a packet. Returns 0x80 on failure. */
48 static int smc91c111_allocate_packet(smc91c111_state *s)
49 {
50@@ -185,7 +203,7 @@ static void smc91c111_release_packet(smc
51 s->allocated &= ~(1 << packet);
52 if (s->tx_alloc == 0x80)
53 smc91c111_tx_alloc(s);
54- qemu_flush_queued_packets(qemu_get_queue(s->nic));
55+ smc91c111_flush_queued_packets(s);
56 }
57
58 /* Flush the TX FIFO. */
59@@ -636,15 +654,11 @@ static uint32_t smc91c111_readl(void *op
60 return val;
61 }
62
63-static int smc91c111_can_receive(NetClientState *nc)
64+static int smc91c111_can_receive_nc(NetClientState *nc)
65 {
66 smc91c111_state *s = qemu_get_nic_opaque(nc);
67
68- if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST))
69- return 1;
70- if (s->allocated == (1 << NUM_PACKETS) - 1)
71- return 0;
72- return 1;
73+ return smc91c111_can_receive(s);
74 }
75
76 static ssize_t smc91c111_receive(NetClientState *nc, const uint8_t *buf, size_t size)
77@@ -739,7 +753,7 @@ static const MemoryRegionOps smc91c111_m
78 static NetClientInfo net_smc91c111_info = {
79 .type = NET_CLIENT_OPTIONS_KIND_NIC,
80 .size = sizeof(NICState),
81- .can_receive = smc91c111_can_receive,
82+ .can_receive = smc91c111_can_receive_nc,
83 .receive = smc91c111_receive,
84 };
85
diff --git a/meta/recipes-devtools/qemu/qemu/smc91c111_fix2.patch b/meta/recipes-devtools/qemu/qemu/smc91c111_fix2.patch
new file mode 100644
index 0000000000..018aed5f80
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/smc91c111_fix2.patch
@@ -0,0 +1,46 @@
1From: Peter Crosthwaite <crosthwaitepeter@gmail.com>
2X-Google-Original-From: Peter Crosthwaite <crosthwaite.peter@gmail.com>
3To: qemu-devel@nongnu.org
4Cc: peter.maydell@linaro.org, richard.purdie@linuxfoundation.org
5Subject: [RFT PATCH v1 2/3] net: smc91c111: gate can_receive() on rx FIFO
6 having a slot
7Date: Thu, 10 Sep 2015 21:23:57 -0700
8
9Return false from can_receive() when the FIFO doesn't have a free RX
10slot. This fixes a bug in the current code where the allocated buffer
11is freed before the fifo pop, triggering a premature flush of queued RX
12packets. It also will handle a corner case, where the guest manually
13frees the allocated buffer before popping the rx FIFO (hence it is not
14enough to just delay the flush_queued_packets()).
15
16Reported-by: Richard Purdie <richard.purdie@linuxfoundation.org>
17Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
18
19Upstream-Status: Submitted
20---
21
22 hw/net/smc91c111.c | 4 +++-
23 1 file changed, 3 insertions(+), 1 deletion(-)
24
25Index: qemu-2.4.0/hw/net/smc91c111.c
26===================================================================
27--- qemu-2.4.0.orig/hw/net/smc91c111.c
28+++ qemu-2.4.0/hw/net/smc91c111.c
29@@ -129,7 +129,8 @@ static int smc91c111_can_receive(smc91c1
30 if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST)) {
31 return 1;
32 }
33- if (s->allocated == (1 << NUM_PACKETS) - 1) {
34+ if (s->allocated == (1 << NUM_PACKETS) - 1 ||
35+ s->rx_fifo_len == NUM_PACKETS) {
36 return 0;
37 }
38 return 1;
39@@ -182,6 +183,7 @@ static void smc91c111_pop_rx_fifo(smc91c
40 } else {
41 s->int_level &= ~INT_RCV;
42 }
43+ smc91c111_flush_queued_packets(s);
44 smc91c111_update(s);
45 }
46
diff --git a/meta/recipes-devtools/qemu/qemu/smc91c111_fix3.patch b/meta/recipes-devtools/qemu/qemu/smc91c111_fix3.patch
new file mode 100644
index 0000000000..9e865f7f09
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu/smc91c111_fix3.patch
@@ -0,0 +1,33 @@
1From: Peter Crosthwaite <crosthwaitepeter@gmail.com>
2To: qemu-devel@nongnu.org
3Cc: peter.maydell@linaro.org, richard.purdie@linuxfoundation.org
4Subject: [RFT PATCH v1 3/3] net: smc91c111: flush packets on RCR register
5 changes
6Date: Thu, 10 Sep 2015 21:24:12 -0700
7
8The SOFT_RST or RXEN in the control register can be used as a condition
9to unblock the net layer via can_receive(). So check for possible
10flushes on RCR changes. This will drop all pending packets on soft
11reset or disable which is the functional intent of the can_receive()
12logic.
13
14Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
15
16Upstream-Status: Submitted
17---
18
19 hw/net/smc91c111.c | 1 +
20 1 file changed, 1 insertion(+)
21
22Index: qemu-2.4.0/hw/net/smc91c111.c
23===================================================================
24--- qemu-2.4.0.orig/hw/net/smc91c111.c
25+++ qemu-2.4.0/hw/net/smc91c111.c
26@@ -331,6 +331,7 @@ static void smc91c111_writeb(void *opaqu
27 if (s->rcr & RCR_SOFT_RST) {
28 smc91c111_reset(DEVICE(s));
29 }
30+ smc91c111_flush_queued_packets(s);
31 return;
32 case 10: case 11: /* RPCR */
33 /* Ignored */
diff --git a/meta/recipes-devtools/qemu/qemu_2.4.0.bb b/meta/recipes-devtools/qemu/qemu_2.4.0.bb
index d545b60f64..59b1788007 100644
--- a/meta/recipes-devtools/qemu/qemu_2.4.0.bb
+++ b/meta/recipes-devtools/qemu/qemu_2.4.0.bb
@@ -6,7 +6,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
6SRC_URI += "file://configure-fix-Darwin-target-detection.patch \ 6SRC_URI += "file://configure-fix-Darwin-target-detection.patch \
7 file://qemu-enlarge-env-entry-size.patch \ 7 file://qemu-enlarge-env-entry-size.patch \
8 file://Qemu-Arm-versatilepb-Add-memory-size-checking.patch \ 8 file://Qemu-Arm-versatilepb-Add-memory-size-checking.patch \
9 file://smc91c111_fix.patch \ 9 file://smc91c111_fix1.patch \
10 file://smc91c111_fix2.patch \
11 file://smc91c111_fix3.patch \
10 " 12 "
11SRC_URI_prepend = "http://wiki.qemu-project.org/download/${BP}.tar.bz2" 13SRC_URI_prepend = "http://wiki.qemu-project.org/download/${BP}.tar.bz2"
12SRC_URI[md5sum] = "186ee8194140a484a455f8e3c74589f4" 14SRC_URI[md5sum] = "186ee8194140a484a455f8e3c74589f4"