• J
    openvswitch: Allocate memory for ovs internal device stats. · 1241365f
    James Morse 提交于
    "openvswitch: Remove vport stats" removed the per-vport statistics, in
    order to use the netdev's statistics fields.
    "openvswitch: Fix ovs_vport_get_stats()" fixed the export of these stats
    to user-space, by using the provided netdev_ops to collate them - but ovs
    internal devices still use an unallocated dev->tstats field to count
    packets, which are no longer exported by this api.
    
    Allocate the dev->tstats field for ovs internal devices, and wire up
    ndo_get_stats64 with the original implementation of
    ovs_vport_get_stats().
    
    On its own, "openvswitch: Fix ovs_vport_get_stats()" fixes the OOPs,
    unmasking a full-on panic on arm64:
    
    =============%<==============
    [<ffffffbffc00ce4c>] internal_dev_recv+0xa8/0x170 [openvswitch]
    [<ffffffbffc0008b4>] do_output.isra.31+0x60/0x19c [openvswitch]
    [<ffffffbffc000bf8>] do_execute_actions+0x208/0x11c0 [openvswitch]
    [<ffffffbffc001c78>] ovs_execute_actions+0xc8/0x238 [openvswitch]
    [<ffffffbffc003dfc>] ovs_packet_cmd_execute+0x21c/0x288 [openvswitch]
    [<ffffffc0005e8c5c>] genl_family_rcv_msg+0x1b0/0x310
    [<ffffffc0005e8e60>] genl_rcv_msg+0xa4/0xe4
    [<ffffffc0005e7ddc>] netlink_rcv_skb+0xb0/0xdc
    [<ffffffc0005e8a94>] genl_rcv+0x38/0x50
    [<ffffffc0005e76c0>] netlink_unicast+0x164/0x210
    [<ffffffc0005e7b70>] netlink_sendmsg+0x304/0x368
    [<ffffffc0005a21c0>] sock_sendmsg+0x30/0x4c
    [SNIP]
    Kernel panic - not syncing: Fatal exception in interrupt
    =============%<==============
    
    Fixes: 8c876639 ("openvswitch: Remove vport stats.")
    Signed-off-by: NJames Morse <james.morse@arm.com>
    Acked-by: NPravin B Shelar <pshelar@nicira.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    1241365f
vport-internal_dev.c 7.6 KB