Add layer to support Jailhouse hypervisor
[AGL/meta-agl-devel.git] / meta-agl-jailhouse / recipes-kernel / linux / linux / 0020-ivshmem-net-Add-ethtool-register-dump.patch
1 From 98f68e69e2e950b44e7324bbcc94700705193443 Mon Sep 17 00:00:00 2001
2 From: Jan Kiszka <jan.kiszka@siemens.com>
3 Date: Sun, 1 Jan 2017 15:46:26 +0100
4 Subject: [PATCH 20/32] ivshmem-net: Add ethtool register dump
5
6 Helps debugging inconsistent states.
7
8 Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
9 ---
10  drivers/net/ivshmem-net.c | 31 +++++++++++++++++++++++++++++++
11  1 file changed, 31 insertions(+)
12
13 diff --git a/drivers/net/ivshmem-net.c b/drivers/net/ivshmem-net.c
14 index 09484d652add..c52727ef40c1 100644
15 --- a/drivers/net/ivshmem-net.c
16 +++ b/drivers/net/ivshmem-net.c
17 @@ -748,10 +748,41 @@ static void ivshm_net_get_ethtool_stats(struct net_device *ndev,
18         memset(&in->stats, 0, sizeof(in->stats));
19  }
20  
21 +#define IVSHM_NET_REGS_LEN     (3 * sizeof(u32) + 6 * sizeof(u16))
22 +
23 +static int ivshm_net_get_regs_len(struct net_device *ndev)
24 +{
25 +       return IVSHM_NET_REGS_LEN;
26 +}
27 +
28 +static void ivshm_net_get_regs(struct net_device *ndev,
29 +                              struct ethtool_regs *regs, void *p)
30 +{
31 +       struct ivshm_net *in = netdev_priv(ndev);
32 +       u32 *reg32 = p;
33 +       u16 *reg16;
34 +
35 +       *reg32++ = in->lstate;
36 +       *reg32++ = in->rstate;
37 +       *reg32++ = in->qlen;
38 +
39 +       reg16 = (u16 *)reg32;
40 +
41 +       *reg16++ = in->tx.vr.avail ? in->tx.vr.avail->idx : 0;
42 +       *reg16++ = in->tx.vr.used ? in->tx.vr.used->idx : 0;
43 +       *reg16++ = in->tx.vr.avail ? vring_avail_event(&in->tx.vr) : 0;
44 +
45 +       *reg16++ = in->rx.vr.avail ? in->rx.vr.avail->idx : 0;
46 +       *reg16++ = in->rx.vr.used ? in->rx.vr.used->idx : 0;
47 +       *reg16++ = in->rx.vr.avail ? vring_avail_event(&in->rx.vr) : 0;
48 +}
49 +
50  static const struct ethtool_ops ivshm_net_ethtool_ops = {
51         .get_sset_count         = ivshm_net_get_sset_count,
52         .get_strings            = ivshm_net_get_strings,
53         .get_ethtool_stats      = ivshm_net_get_ethtool_stats,
54 +       .get_regs_len           = ivshm_net_get_regs_len,
55 +       .get_regs               = ivshm_net_get_regs,
56  };
57  
58  static int ivshm_net_probe(struct pci_dev *pdev,
59 -- 
60 2.11.0
61