diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-09-14 10:20:53 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-09-14 20:46:40 +0100 |
commit | ea562de57590c966cd5a75fda8defecd397e6436 (patch) | |
tree | cc1bfbbced5244130a102cdd63c72584b1d6e408 /meta/recipes-devtools/qemu | |
parent | 1d0b9228364e7970ec05ec2b9692c56f4835ac22 (diff) | |
download | poky-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.patch | 85 | ||||
-rw-r--r-- | meta/recipes-devtools/qemu/qemu/smc91c111_fix2.patch | 46 | ||||
-rw-r--r-- | meta/recipes-devtools/qemu/qemu/smc91c111_fix3.patch | 33 | ||||
-rw-r--r-- | meta/recipes-devtools/qemu/qemu_2.4.0.bb | 4 |
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 @@ | |||
1 | From: Peter Crosthwaite <crosthwaitepeter@gmail.com> | ||
2 | Subject: [RFT PATCH v1 1/3] net: smc91c111: guard flush_queued_packets() on | ||
3 | can_rx() | ||
4 | Date: Thu, 10 Sep 2015 21:23:43 -0700 | ||
5 | |||
6 | Check that the core can once again receive packets before asking the | ||
7 | net layer to do a flush. This will make it more convenient to flush | ||
8 | packets when adding new conditions to can_receive. | ||
9 | |||
10 | Add missing if braces while moving the can_receive() core code. | ||
11 | |||
12 | Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com> | ||
13 | |||
14 | Upstream-Status: Submitted | ||
15 | |||
16 | --- | ||
17 | |||
18 | hw/net/smc91c111.c | 30 ++++++++++++++++++++++-------- | ||
19 | 1 file changed, 22 insertions(+), 8 deletions(-) | ||
20 | |||
21 | Index: 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 @@ | |||
1 | From: Peter Crosthwaite <crosthwaitepeter@gmail.com> | ||
2 | X-Google-Original-From: Peter Crosthwaite <crosthwaite.peter@gmail.com> | ||
3 | To: qemu-devel@nongnu.org | ||
4 | Cc: peter.maydell@linaro.org, richard.purdie@linuxfoundation.org | ||
5 | Subject: [RFT PATCH v1 2/3] net: smc91c111: gate can_receive() on rx FIFO | ||
6 | having a slot | ||
7 | Date: Thu, 10 Sep 2015 21:23:57 -0700 | ||
8 | |||
9 | Return false from can_receive() when the FIFO doesn't have a free RX | ||
10 | slot. This fixes a bug in the current code where the allocated buffer | ||
11 | is freed before the fifo pop, triggering a premature flush of queued RX | ||
12 | packets. It also will handle a corner case, where the guest manually | ||
13 | frees the allocated buffer before popping the rx FIFO (hence it is not | ||
14 | enough to just delay the flush_queued_packets()). | ||
15 | |||
16 | Reported-by: Richard Purdie <richard.purdie@linuxfoundation.org> | ||
17 | Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com> | ||
18 | |||
19 | Upstream-Status: Submitted | ||
20 | --- | ||
21 | |||
22 | hw/net/smc91c111.c | 4 +++- | ||
23 | 1 file changed, 3 insertions(+), 1 deletion(-) | ||
24 | |||
25 | Index: 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 @@ | |||
1 | From: Peter Crosthwaite <crosthwaitepeter@gmail.com> | ||
2 | To: qemu-devel@nongnu.org | ||
3 | Cc: peter.maydell@linaro.org, richard.purdie@linuxfoundation.org | ||
4 | Subject: [RFT PATCH v1 3/3] net: smc91c111: flush packets on RCR register | ||
5 | changes | ||
6 | Date: Thu, 10 Sep 2015 21:24:12 -0700 | ||
7 | |||
8 | The SOFT_RST or RXEN in the control register can be used as a condition | ||
9 | to unblock the net layer via can_receive(). So check for possible | ||
10 | flushes on RCR changes. This will drop all pending packets on soft | ||
11 | reset or disable which is the functional intent of the can_receive() | ||
12 | logic. | ||
13 | |||
14 | Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com> | ||
15 | |||
16 | Upstream-Status: Submitted | ||
17 | --- | ||
18 | |||
19 | hw/net/smc91c111.c | 1 + | ||
20 | 1 file changed, 1 insertion(+) | ||
21 | |||
22 | Index: 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 \ | |||
6 | SRC_URI += "file://configure-fix-Darwin-target-detection.patch \ | 6 | SRC_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 | " |
11 | SRC_URI_prepend = "http://wiki.qemu-project.org/download/${BP}.tar.bz2" | 13 | SRC_URI_prepend = "http://wiki.qemu-project.org/download/${BP}.tar.bz2" |
12 | SRC_URI[md5sum] = "186ee8194140a484a455f8e3c74589f4" | 14 | SRC_URI[md5sum] = "186ee8194140a484a455f8e3c74589f4" |