aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/809-jailhouse-0012-ivshmem-net-fill-in-and-check-used-descriptor-chain-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/layerscape/patches-5.4/809-jailhouse-0012-ivshmem-net-fill-in-and-check-used-descriptor-chain-.patch')
-rw-r--r--target/linux/layerscape/patches-5.4/809-jailhouse-0012-ivshmem-net-fill-in-and-check-used-descriptor-chain-.patch65
1 files changed, 0 insertions, 65 deletions
diff --git a/target/linux/layerscape/patches-5.4/809-jailhouse-0012-ivshmem-net-fill-in-and-check-used-descriptor-chain-.patch b/target/linux/layerscape/patches-5.4/809-jailhouse-0012-ivshmem-net-fill-in-and-check-used-descriptor-chain-.patch
deleted file mode 100644
index cdd9f568eb..0000000000
--- a/target/linux/layerscape/patches-5.4/809-jailhouse-0012-ivshmem-net-fill-in-and-check-used-descriptor-chain-.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From ec72823546e39cd486360f44db16cf47f7e8f59e Mon Sep 17 00:00:00 2001
-From: Henning Schild <henning.schild@siemens.com>
-Date: Mon, 18 Sep 2017 18:02:08 +0200
-Subject: [PATCH] ivshmem-net: fill in and check used descriptor chain len
-
-We are using chains of len==1 make that explicit and expect that from
-the remote.
-
-Signed-off-by: Henning Schild <henning.schild@siemens.com>
-Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
-(cherry picked from commit f958c360044184f58605815d428b83fe4329cafd)
----
- drivers/net/ivshmem-net.c | 14 ++++++++------
- 1 file changed, 8 insertions(+), 6 deletions(-)
-
---- a/drivers/net/ivshmem-net.c
-+++ b/drivers/net/ivshmem-net.c
-@@ -335,10 +335,10 @@ static void ivshm_net_tx_clean(struct ne
- {
- struct ivshm_net *in = netdev_priv(ndev);
- struct ivshm_net_queue *tx = &in->tx;
-+ struct vring_used_elem *used;
- struct vring *vr = &tx->vr;
- struct vring_desc *desc;
- struct vring_desc *fdesc;
-- unsigned int used;
- unsigned int num;
- u16 used_idx;
- u16 last;
-@@ -358,13 +358,14 @@ static void ivshm_net_tx_clean(struct ne
- u32 len;
- u32 tail;
-
-- used = vr->used->ring[last & (vr->num - 1)].id;
-- if (used >= vr->num) {
-- netdev_err(ndev, "invalid tx used %d\n", used);
-+ used = vr->used->ring + (last % vr->num);
-+ if (used->id >= vr->num || used->len != 1) {
-+ netdev_err(ndev, "invalid tx used->id %d ->len %d\n",
-+ used->id, used->len);
- break;
- }
-
-- desc = &vr->desc[used];
-+ desc = &vr->desc[used->id];
-
- data = ivshm_net_desc_data(in, &in->tx, desc, &len);
- if (!data) {
-@@ -383,7 +384,7 @@ static void ivshm_net_tx_clean(struct ne
- else
- desc->next = fhead;
-
-- fhead = used;
-+ fhead = used->id;
- last++;
- num++;
- }
-@@ -433,6 +434,7 @@ static void ivshm_net_rx_finish(struct i
-
- used = rx->last_used_idx++ & (vr->num - 1);
- vr->used->ring[used].id = desc_id;
-+ vr->used->ring[used].len = 1;
-
- virt_store_release(&vr->used->idx, rx->last_used_idx);
- }
teger.Long */
From dd462c6eb2ba6af01ae38644183216c4d5603d90 Mon Sep 17 00:00:00 2001
From: Jan Kiszka <jan.kiszka@siemens.com>
Date: Tue, 3 Jan 2017 08:50:01 +0100
Subject: [PATCH] ivshmem-net: Switch to relative descriptor addresses

Make sure that we do not depend on identity-mapped shared memory
regions.

This also fixes an off-by-one in the range check of ivshm_net_desc_data.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
(cherry picked from commit fe9c9dd6373892591a7d6b165c3c43045eb349c1)
---
 drivers/net/ivshmem-net.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/net/ivshmem-net.c
+++ b/drivers/net/ivshmem-net.c
@@ -123,14 +123,14 @@ static void *ivshm_net_desc_data(struct
 				 struct vring_desc *desc,
 				 u32 *len)
 {
-	u64 addr = READ_ONCE(desc->addr);
+	u64 offs = READ_ONCE(desc->addr);
 	u32 dlen = READ_ONCE(desc->len);
 	void *data;
 
-	if (addr < in->shmaddr || desc->addr > in->shmaddr + in->shmlen)
+	if (offs >= in->shmlen)
 		return NULL;
 
-	data = in->shm + (addr - in->shmaddr);
+	data = in->shm + offs;
 
 	if (data < q->data || data >= q->end)
 		return NULL;
@@ -317,7 +317,7 @@ static int ivshm_net_tx_frame(struct net
 	buf = tx->data + head;
 	skb_copy_and_csum_dev(skb, buf);
 
-	desc->addr = in->shmaddr + (buf - in->shm);
+	desc->addr = buf - in->shm;
 	desc->len = skb->len;
 
 	avail = tx->last_avail_idx++ & (vr->num - 1);