Commit Graph

88 Commits

Author SHA1 Message Date
Ivan Vecera bd0b809773 netdevsim: add NAPI support
JIRA: https://issues.redhat.com/browse/RHEL-57764

commit 3762ec05a9fbda16aaaa2568df679ab8ad13f38d
Author: David Wei <dw@davidwei.uk>
Date:   Tue May 7 09:32:27 2024 -0700

    netdevsim: add NAPI support

    Add NAPI support to netdevim, similar to veth.

    * Add a nsim_rq rx queue structure to hold a NAPI instance and a skb
      queue.
    * During xmit, store the skb in the peer skb queue and schedule NAPI.
    * During napi_poll(), drain the skb queue and pass up the stack.
    * Add assoc between rxq and NAPI instance using netif_queue_set_napi().

    Signed-off-by: David Wei <dw@davidwei.uk>
    Link: https://lore.kernel.org/r/20240507163228.2066817-2-dw@davidwei.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
2024-10-07 15:18:28 +02:00
Ivan Vecera 6d0149fbed net: netdevsim: add some fake page pool use
JIRA: https://issues.redhat.com/browse/RHEL-57764

commit 1580cbcbfe770b0a7fb76735c1a601483335c1c2
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Fri Apr 12 07:14:31 2024 -0700

    net: netdevsim: add some fake page pool use

    Add very basic page pool use so that we can exercise
    the netlink uAPI in a selftest.

    Page pool gets created on open, destroyed on close.
    But we control allocating of a single page thru debugfs.
    This page may survive past the page pool itself so that
    we can test orphaned page pools.

    Link: https://lore.kernel.org/r/20240412141436.828666-2-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
2024-10-07 11:26:37 +02:00
Petr Oros 3f7a63081f netdevsim: forward skbs from one connected port to another
JIRA: https://issues.redhat.com/browse/RHEL-38987

Upstream commit(s):
commit 9eb95228a74163e26d338913a5d61e571ea45307
Author: David Wei <dw@davidwei.uk>
Date:   Wed Feb 28 15:22:50 2024 -0800

    netdevsim: forward skbs from one connected port to another

    Forward skbs sent from one netdevsim port to its connected netdevsim
    port using dev_forward_skb, in a spirit similar to veth.

    Add a tx_dropped variable to struct netdevsim, tracking the number of
    skbs that could not be forwarded using dev_forward_skb().

    The xmit() function accessing the peer ptr is protected by an RCU read
    critical section. The rcu_read_lock() is functionally redundant as since
    v5.0 all softirqs are implicitly RCU read critical sections; but it is
    useful for human readers.

    If another CPU is concurrently in nsim_destroy(), then it will first set
    the peer ptr to NULL. This does not affect any existing readers that
    dereferenced a non-NULL peer. Then, in unregister_netdevice(), there is
    a synchronize_rcu() before the netdev is actually unregistered and
    freed. This ensures that any readers i.e. xmit() that got a non-NULL
    peer will complete before the netdev is freed.

    Any readers after the RCU_INIT_POINTER() but before synchronize_rcu()
    will dereference NULL, making it safe.

    The codepath to nsim_destroy() and nsim_create() takes both the newly
    added nsim_dev_list_lock and rtnl_lock. This makes it safe with
    concurrent calls to linking two netdevsims together.

    Signed-off-by: David Wei <dw@davidwei.uk>
    Reviewed-by: Maciek Machnikowski <maciek@machnikowski.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Petr Oros <poros@redhat.com>
2024-05-28 13:35:19 +02:00
Petr Oros ee1ffb10b7 netdevsim: allow two netdevsim ports to be connected
JIRA: https://issues.redhat.com/browse/RHEL-38987

Upstream commit(s):
commit f532957d76de89b8ee2545cb6ad5265e1701d0ba
Author: David Wei <dw@davidwei.uk>
Date:   Wed Feb 28 15:22:49 2024 -0800

    netdevsim: allow two netdevsim ports to be connected

    Add two netdevsim bus attribute to sysfs:
    /sys/bus/netdevsim/link_device
    /sys/bus/netdevsim/unlink_device

    Writing "A M B N" to link_device will link netdevsim M in netnsid A with
    netdevsim N in netnsid B.

    Writing "A M" to unlink_device will unlink netdevsim M in netnsid A from
    its peer, if any.

    rtnl_lock is taken to ensure nothing changes during the linking.

    Signed-off-by: David Wei <dw@davidwei.uk>
    Reviewed-by: Maciek Machnikowski <maciek@machnikowski.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Petr Oros <poros@redhat.com>
2024-05-28 13:35:19 +02:00
Ivan Vecera 8f46a36b17 net: netdevsim: use mock PHC driver
JIRA: https://issues.redhat.com/browse/RHEL-36218

commit b63e78fca889e07931ec8f259701718a24e5052e
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Mon Aug 7 22:33:20 2023 +0300

    net: netdevsim: use mock PHC driver

    I'd like to make netdevsim offload tc-taprio, but currently, this Qdisc
    emits a ETHTOOL_GET_TS_INFO call to the driver to make sure that it has
    a PTP clock, so that it is reasonably capable of offloading the schedule.

    By using the mock PHC driver, that becomes possible.

    Hardware timestamping is not necessary, and netdevsim does not support
    packet I/O anyway.

    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://lore.kernel.org/r/20230807193324.4128292-8-vladimir.oltean@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
2024-05-14 13:13:16 +02:00
Sabrina Dubroca af8abe5cc4 netdevsim: add dummy macsec offload
JIRA: https://issues.redhat.com/browse/RHEL-24616

commit 02b34d03a24b18970925cf57434be28ba4a29d3a
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Thu Jul 13 15:20:23 2023 +0200

    netdevsim: add dummy macsec offload

    When the kernel is compiled with MACsec support, add the
    NETIF_F_HW_MACSEC feature to netdevsim devices and implement
    macsec_ops.

    To allow easy testing of failure from the device, support is limited
    to 3 SecY's per netdevsim device, and 1 RXSC per SecY.

    v2:
     - nsim_macsec_add_secy, return -ENOSPC if secy_count isn't full but
       we can't find an empty slot (Simon Horman)
     - add sci_to_cpu to make sparse happy (Simon Horman)
     - remove set but not used secy variable (kernel test robot and
       Simon Horman)

    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Sabrina Dubroca <sdubroca@redhat.com>
2024-02-07 10:06:55 +01:00
Petr Oros 57497ee6eb netdevsim: convert driver to use unlocked devlink API during init/fini
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2131117

Upstream commit(s):
commit 012ec02ae4410207f796a9b280a60b80b6cc790a
Author: Jiri Pirko <jiri@nvidia.com>
Date:   Sat Jul 16 13:02:40 2022 +0200

    netdevsim: convert driver to use unlocked devlink API during init/fini

    Prepare for devlink reload being called with devlink->lock held and
    convert the netdevsim driver to use unlocked devlink API during init and
    fini flows. Take devl_lock() in reload_down() and reload_up() ops in the
    meantime before reload cmd is converted to take the lock itself.

    Signed-off-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Petr Oros <poros@redhat.com>
2023-01-18 14:54:00 +01:00
Ivan Vecera 6a03fa2a91 netdevsim: Introduce support for L3 offload xstats
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2140149

commit 1a6d7ae7d63c4572676f4cc94aa35a73dc14a757
Author: Petr Machata <petrm@nvidia.com>
Date:   Mon Mar 14 15:01:15 2022 +0100

    netdevsim: Introduce support for L3 offload xstats

    Add support for testing of HW stats support that was added recently, namely
    the L3 stats support. L3 stats are provided for devices for which the L3
    stats have been turned on, and that were enabled for netdevsim through a
    debugfs toggle:

        # echo $ifindex > /sys/kernel/debug/netdevsim/$DEV/hwstats/l3/enable_ifindex

    For fully enabled netdevices, netdevsim counts 10pps of ingress traffic and
    20pps of egress traffic. Similarly, L3 stats can be disabled for a given
    device, and netdevsim ceases pretending there is any HW traffic going on:

        # echo $ifindex > /sys/kernel/debug/netdevsim/$DEV/hwstats/l3/disable_ifindex

    Besides this, there is a third toggle to mark a device for future failure:

        # echo $ifindex > /sys/kernel/debug/netdevsim/$DEV/hwstats/l3/fail_next_enable

    A future request to enable L3 stats on such netdevice will be bounced by
    netdevsim:

        # ip -j l sh dev d | jq '.[].ifindex'
        66
        # echo 66 > /sys/kernel/debug/netdevsim/netdevsim10/hwstats/l3/enable_ifindex
        # echo 66 > /sys/kernel/debug/netdevsim/netdevsim10/hwstats/l3/fail_next_enable
        # ip stats set dev d l3_stats on
        Error: netdevsim: Stats enablement set to fail.

    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Acked-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
2022-11-04 17:25:41 +01:00
Petr Oros 6742a09c44 netdevsim: replace vfs_lock with devlink instance lock
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2101713

Upstream commit(s):
commit aff3a925094633a5b77058b9a715efbb12fc2698
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Fri Mar 18 12:23:43 2022 -0700

    netdevsim: replace vfs_lock with devlink instance lock

    Similarly to the previous commit, use the devlink instance
    lock and let it replace the vfs_lock.

    nsim_esw_legacy_enable() was locked by both port lock and
    vfs lock so one set of lock/unlocks goes away.

    netdevsim's .eswitch_mode_set callback is now ready for
    the callback to take the instance lock.

    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Petr Oros <poros@redhat.com>
2022-08-22 22:05:25 +02:00
Petr Oros 6d57a616e0 netdevsim: replace port_list_lock with devlink instance lock
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2101713

Upstream commit(s):
commit 76eea6c2e663f7e9fbc258c82811ad9e657e085f
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Fri Mar 18 12:23:42 2022 -0700

    netdevsim: replace port_list_lock with devlink instance lock

    Take advantage of the devlink instance lock for protecting
    the port list. This will simplify locking even more once
    all devlink callbacks hold the instance lock.

    We need to add locking in nsim_dev_port_add_all() which used
    to assume higher layer protection when accessing the list.

    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Petr Oros <poros@redhat.com>
2022-08-22 22:05:25 +02:00
Petr Oros 7a47f72854 netdevsim: rename 'driver' entry points
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2112332

Conflicts:
- adjusted context conflict due to missing fc7a6209d57106 ("bus: Make
  remove callback return void")

Upstream commit(s):
commit a66f64b808150b5923dfad117d84ced3da2e6dfe
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Sat Oct 30 16:15:05 2021 -0700

    netdevsim: rename 'driver' entry points

    Rename functions serving as driver entry points
    from nsim_dev_... to nsim_drv_... this makes the
    API boundary between bus and dev clearer.

    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Petr Oros <poros@redhat.com>
2022-07-29 13:22:58 +02:00
Petr Oros f11df89110 netdevsim: move max vf config to dev
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2112332

Upstream commit(s):
commit a3353ec3255437f59537f9478ea5cd7107ba1ebf
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Sat Oct 30 16:15:04 2021 -0700

    netdevsim: move max vf config to dev

    max_vfs is a strange little beast because the file
    hangs off of nsim's debugfs, but it configures a field
    in the bus device. Move it to dev.c, let's look at it
    as if the device driver was imposing VF limit based
    on FW info (like pci_sriov_set_totalvfs()).

    Again, when moving refactor the function not to hold
    the vfs lock pointlessly while parsing the input.
    Wrap the access from the read side in READ_ONCE()
    to appease concurrency checkers. Do not check if
    return value from snprintf() is negative...

    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Petr Oros <poros@redhat.com>
2022-07-29 13:22:58 +02:00
Petr Oros fb632bc872 netdevsim: move details of vf config to dev
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2112332

Upstream commit(s):
commit 1c401078bcf34e91e183b61b2d926972fc03b548
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Sat Oct 30 16:15:03 2021 -0700

    netdevsim: move details of vf config to dev

    Since "eswitch" configuration was added bus.c contains
    a lot of device details which really belong to dev.c.

    Restructure the code while moving it.

    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Petr Oros <poros@redhat.com>
2022-07-29 13:22:58 +02:00
Petr Oros d0fd866953 netdevsim: move vfconfig to nsim_dev
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2112332

Conflicts:
- adjusted context conflict due to already applied 4c897cfc46a554
  ("devlink: Simplify devlink resources unregister call")

Upstream commit(s):
commit 5e388f3dc38c72da2880549e68374c3b6ba7c589
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Sat Oct 30 16:15:02 2021 -0700

    netdevsim: move vfconfig to nsim_dev

    When netdevsim got split into the faux bus vfconfig ended
    up in the bus device (think pci_dev) which is strange because
    it contains very networky not to say netdevy information.
    Move it to nsim_dev, which is the driver "priv" structure
    for the device.

    To make sure we don't race with probe/remove take
    the device lock (much like PCI).

    While at it remove the NULL-checking of vfconfigs.
    It appears to be pointless.

    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Petr Oros <poros@redhat.com>
2022-07-29 13:22:58 +02:00
Petr Oros 298fc428fb netdevsim: remove max_vfs dentry
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2112332

Upstream commit(s):
commit ba064e4cf923326989a59da1e889f45282abb6b8
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Thu Oct 28 14:17:53 2021 -0700

    netdevsim: remove max_vfs dentry

    Commit d395381909 ("netdevsim: Add max_vfs to bus_dev")
    added this file and saved the dentry for no apparent reason.

    Link: https://lore.kernel.org/r/20211028211753.22612-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Petr Oros <poros@redhat.com>
2022-07-29 13:22:57 +02:00
Ivan Vecera 51084dcc85 netdevsim: add ability to change channel count
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2090410

commit 2e367522ce6bc302f2613a0334c9930dafccf2e7
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Mon Sep 13 15:53:31 2021 -0700

    netdevsim: add ability to change channel count

    For testing visibility of mq/mqprio default children.

    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
2022-06-06 16:29:55 +02:00
Jiri Benc 05f1e863a0 netdevsim: Add multi-queue support
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2071618

commit d4861fc6be581561d6964700110a4dede54da6a6
Author: Peilin Ye <peilin.ye@bytedance.com>
Date:   Thu Jul 15 18:52:45 2021 -0700

    netdevsim: Add multi-queue support

    Currently netdevsim only supports a single queue per port, which is
    insufficient for testing multi-queue TC schedulers e.g. sch_mq.  Extend
    the current sysfs interface so that users can create ports with multiple
    queues:

    $ echo "[ID] [PORT_COUNT] [NUM_QUEUES]" > /sys/bus/netdevsim/new_device

    As an example, echoing "2 4 8" creates 4 ports, with 8 queues per port.
    Note, this is compatible with the current interface, with default number
    of queues set to 1.  For example, echoing "2 4" creates 4 ports with 1
    queue per port; echoing "2" simply creates 1 port with 1 queue.

    Reviewed-by: Cong Wang <cong.wang@bytedance.com>
    Signed-off-by: Peilin Ye <peilin.ye@bytedance.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Jiri Benc <jbenc@redhat.com>
2022-05-12 17:29:45 +02:00
Petr Oros 4a267e20ea netdevsim: Protect both reload_down and reload_up paths
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2032260

Upstream commit(s):
commit 5c0418ed16109759c7aec86b72f9bf56a0358526
Author: Leon Romanovsky <leon@kernel.org>
Date:   Thu Aug 5 17:34:28 2021 +0300

    netdevsim: Protect both reload_down and reload_up paths

    Don't progress with adding and deleting ports as long as devlink
    reload is running.

    Fixes: 23809a726c0d ("netdevsim: Forbid devlink reload when adding or deleting ports")
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Petr Oros <poros@redhat.com>
2022-01-15 09:31:37 +01:00
Oleksandr Mazur 275b51c27c drivers: net: netdevsim: fix devlink_trap selftests failing
devlink_trap tests for the netdevsim fail due to misspelled
debugfs file name. Change this name, as well as name of callback
function, to match the naming as in the devlink itself - 'trap_drop_counter'.

Test-results:
selftests: drivers/net/netdevsim: devlink_trap.sh
TEST: Initialization                                                [ OK ]
TEST: Trap action                                                   [ OK ]
TEST: Trap metadata                                                 [ OK ]
TEST: Non-existing trap                                             [ OK ]
TEST: Non-existing trap action                                      [ OK ]
TEST: Trap statistics                                               [ OK ]
TEST: Trap group action                                             [ OK ]
TEST: Non-existing trap group                                       [ OK ]
TEST: Trap group statistics                                         [ OK ]
TEST: Trap policer                                                  [ OK ]
TEST: Trap policer binding                                          [ OK ]
TEST: Port delete                                                   [ OK ]
TEST: Device delete                                                 [ OK ]

Fixes: a7b3527a43 ("drivers: net: netdevsim: add devlink trap_drop_counter_get implementation")
Signed-off-by: Oleksandr Mazur <oleksandr.mazur@plvision.eu>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Tested-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-06-18 11:28:27 -07:00
Oleksandr Mazur a7b3527a43 drivers: net: netdevsim: add devlink trap_drop_counter_get implementation
Whenever query statistics is issued for trap with DROP action,
devlink subsystem would also fill-in statistics 'dropped' field.
In case if device driver did't register callback for hard drop
statistics querying, 'dropped' field will be omitted and not filled.
Add trap_drop_counter_get callback implementation to the netdevsim.
Add new test cases for netdevsim, to test both the callback
functionality, as well as drop statistics alteration check.

Signed-off-by: Oleksandr Mazur <oleksandr.mazur@plvision.eu>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-06-14 13:04:25 -07:00
Dmytro Linkin f3d101b485 netdevsim: Allow setting parent node of rate objects
Implement new devlink ops that allow setting rate node as a parent for
devlink port (leaf) or another devlink node through devlink API.
Expose parent names to netdevsim debugfs in read only mode.

Co-developed-by: Vlad Buslov <vladbu@nvidia.com>
Signed-off-by: Vlad Buslov <vladbu@nvidia.com>
Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-06-02 14:08:37 -07:00
Dmytro Linkin 885226f568 netdevsim: Implement support for devlink rate nodes
Implement new devlink ops that allow creation, deletion and setting of
shared/max tx rate of devlink rate nodes through devlink API.
Expose rate node and it's tx rates to netdevsim debugfs.

Co-developed-by: Vlad Buslov <vladbu@nvidia.com>
Signed-off-by: Vlad Buslov <vladbu@nvidia.com>
Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-06-02 14:08:37 -07:00
Dmytro Linkin 160dc373ee netdevsim: Implement legacy/switchdev mode for VFs
Implement callbacks to set/get eswitch mode value. Add helpers to check
current mode.

Instantiate VFs' net devices and devlink ports on switchdev enabling and
remove them on legacy enabling. Changing number of VFs while in
switchdev mode triggers VFs creation/deletion.

Also disable NDO API callback to set VF rate, since it's legacy API.
Switchdev API to set VF rate will be implemented in one of the next
patches.

Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-06-02 14:08:36 -07:00
Dmytro Linkin 814b9ce65e netdevsim: Implement port types and indexing
Define type of ports, which netdevsim driver currently operates with as
PF. Define new port type - VF, which will be implemented in following
patches. Add helper functions to distinguish them. Add helper function
to get VF index from port index.

Add port indexing logic where PFs' indexes starts from 0, VFs' - from
NSIM_DEV_VF_PORT_INDEX_BASE.
All ports uses same index pool, which means that PF port may be created
with index from VFs' indexes range.
Maximum number of VFs, which the driver can allocate, is limited by
UINT_MAX - BASE.

Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-06-02 14:08:36 -07:00
Dmytro Linkin 32ac15d8fd netdevsim: Disable VFs on nsim_dev_reload_destroy() call
Move VFs disabling from device release() to nsim_dev_reload_destroy() to
make VFs disabling and ports removal simultaneous.
This is a requirement for VFs ports implemented in next patches.

Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-06-02 14:08:36 -07:00
Dmytro Linkin d395381909 netdevsim: Add max_vfs to bus_dev
Currently there is no limit to the number of VFs netdevsim can enable.
In a real systems this value exist and used by the driver.
Fore example, some features might need to consider this value when
allocating memory.

Expose max_vfs variable to debugfs as configurable resource. If are VFs
configured (num_vfs != 0) then changing of max_vfs not allowed.

Co-developed-by: Yuval Avnery <yuvalav@nvidia.com>
Signed-off-by: Yuval Avnery <yuvalav@nvidia.com>
Signed-off-by: Dmytro Linkin <dlinkin@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-06-02 14:08:36 -07:00
Jakub Kicinski 0d7f76dc11 netdevsim: add FEC settings support
Add support for ethtool FEC and some ethtool error injection.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-03-31 14:15:23 -07:00
Ido Schimmel a8700c3dd0 netdevsim: Add dummy psample implementation
Allow netdevsim to report "sampled" packets to the psample module by
periodically generating packets from a work queue. The behavior can be
enabled / disabled (default) and the various meta data attributes can be
controlled via debugfs knobs.

This implementation enables both testing of the psample module with all
the optional attributes as well as development of user space
applications on top of psample such as hsflowd and a Wireshark dissector
for psample generic netlink packets.

Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2021-03-14 15:00:43 -07:00
Jakub Kicinski 46d5e62dd3 Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
xdp_return_frame_bulk() needs to pass a xdp_buff
to __xdp_return().

strlcpy got converted to strscpy but here it makes no
functional difference, so just keep the right code.

Conflicts:
	net/netfilter/nf_tables_api.c

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-12-11 22:29:38 -08:00
Toke Høiland-Jørgensen e4ff5aa469 netdevsim: Add debugfs toggle to reject BPF programs in verifier
This adds a new debugfs toggle ('bpf_bind_verifier_accept') that can be
used to make netdevsim reject BPF programs from being accepted by the
verifier. If this toggle (which defaults to true) is set to false,
nsim_bpf_verify_insn() will return EOPNOTSUPP on the last
instruction (after outputting the 'Hello from netdevsim' verifier message).

This makes it possible to check the verification callback in the driver
from test_offload.py in selftests, since the verifier now clears the
verifier log on a successful load, hiding the message from the driver.

Fixes: 6f8a57ccf8 ("bpf: Make verifier log more relevant by default")
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Link: https://lore.kernel.org/bpf/160752225964.110217.12584017165318065332.stgit@toke.dk
2020-12-09 16:27:42 +01:00
Antonio Cardace a7fc6db099 netdevsim: support ethtool ring and coalesce settings
Add ethtool ring and coalesce settings support for testing.

Signed-off-by: Antonio Cardace <acardace@redhat.com>
Reviewed-by: Michal Kubecek <mkubecek@suse.cz>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-11-20 12:51:54 -08:00
Antonio Cardace 77f9591b21 netdevsim: move ethtool pause params in separate struct
This will help the refactoring in the next commit
when coalesce and ring settings are added.

Signed-off-by: Antonio Cardace <acardace@redhat.com>
Reviewed-by: Michal Kubecek <mkubecek@suse.cz>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-11-20 12:51:54 -08:00
Ido Schimmel 35266255d6 netdevsim: Add devlink resource for nexthops
The Spectrum ASIC has a dedicated table where nexthops (i.e., adjacency
entries) are populated. The size of this table can be controlled via
devlink-resource.

Add such a resource to netdevsim so that its occupancy will reflect the
number of nexthop objects currently programmed to the device.

By limiting the size of the resource, error paths could be exercised and
tested.

Example output:

# devlink resource show netdevsim/netdevsim10
netdevsim/netdevsim10:
  name IPv4 size unlimited unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none
    resources:
      name fib size unlimited occ 4 unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none
      name fib-rules size unlimited occ 3 unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none
  name IPv6 size unlimited unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none
    resources:
      name fib size unlimited occ 1 unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none
      name fib-rules size unlimited occ 2 unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none
  name nexthops size unlimited occ 0 unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none

Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-11-06 11:28:50 -08:00
Jakub Kicinski dda751731e netdevsim: support the static IANA VXLAN port flag
Allow setting UDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-09-28 12:50:12 -07:00
Jakub Kicinski dc9c07537c netdevsim: shared UDP tunnel port table support
Add the ability to simulate a device with a shared UDP tunnel port
table.

Try to reject the configurations and actions which are not supported
by the core, so we don't get syzcaller etc. warning reports.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-09-28 12:50:12 -07:00
Jacob Keller cbb58368fb netdevsim: add support for flash_update overwrite mask
The devlink interface recently gained support for a new "overwrite mask"
parameter that allows specifying how various sub-sections of a flash
component are modified when updating.

Add support for this to netdevsim, to enable easily testing the
interface. Make the allowed overwrite mask values controllable via
a debugfs parameter. This enables testing a flow where the driver
rejects an unsupportable overwrite mask.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-09-25 17:20:57 -07:00
Jakub Kicinski ff1f7c17fb netdevsim: add pause frame stats
Add minimal ethtool interface for testing ethtool pause stats.

v2: add missing static on nsim_ethtool_ops

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Saeed Mahameed <saeedm@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-09-15 13:26:28 -07:00
Andrii Nakryiko e8407fdeb9 bpf, xdp: Remove XDP_QUERY_PROG and XDP_QUERY_PROG_HW XDP commands
Now that BPF program/link management is centralized in generic net_device
code, kernel code never queries program id from drivers, so
XDP_QUERY_PROG/XDP_QUERY_PROG_HW commands are unnecessary.

This patch removes all the implementations of those commands in kernel, along
the xdp_attachment_query().

This patch was compile-tested on allyesconfig.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200722064603.3350758-10-andriin@fb.com
2020-07-25 20:37:02 -07:00
Jakub Kicinski 424be63ad8 netdevsim: add UDP tunnel port offload support
Add UDP tunnel port handlers to our fake driver so we can test
the core infra.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-07-10 13:54:00 -07:00
Ido Schimmel 0dc8249a2e netdevsim: Add support for setting of packet trap group parameters
Add a dummy callback to set trap group parameters. Return an error when
the 'fail_trap_group_set' debugfs file is set in order to exercise error
paths and verify that error is propagated to user space when should.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-03-30 17:54:58 -07:00
Ido Schimmel ad188458d0 netdevsim: Add devlink-trap policer support
Register three dummy packet trap policers with devlink and implement
callbacks to change their parameters and read their counters.

This will be used later on in the series to test the devlink-trap
policer infrastructure.

v2:
* Remove check about burst size being a power of 2 and instead add a
  debugfs knob to fail the operation
* Provide max/min rate/burst size when registering policers and remove
  the validity checks from nsim_dev_devlink_trap_policer_set()

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-03-30 17:54:58 -07:00
Jiri Pirko d3cbb907ae netdevsim: add ACL trap reporting cookie as a metadata
Add new trap ACL which reports flow action cookie in a metadata. Allow
used to setup the cookie using debugfs file.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2020-02-25 11:05:55 -08:00
Taehee Yoo 8526ad9646 netdevsim: fix panic in nsim_dev_take_snapshot_write()
nsim_dev_take_snapshot_write() uses nsim_dev and nsim_dev->dummy_region.
So, during this function, these data shouldn't be removed.
But there is no protecting stuff in this function.

There are two similar cases.
1. reload case
reload could be called during nsim_dev_take_snapshot_write().
When reload is being executed, nsim_dev_reload_down() is called and it
calls nsim_dev_reload_destroy(). nsim_dev_reload_destroy() calls
devlink_region_destroy() to destroy nsim_dev->dummy_region.
So, during nsim_dev_take_snapshot_write(), nsim_dev->dummy_region()
would be removed.
At this point, snapshot_write() would access freed pointer.
In order to fix this case, take_snapshot file will be removed before
devlink_region_destroy().
The take_snapshot file will be re-created by ->reload_up().

2. del_device_store case
del_device_store() also could call nsim_dev_reload_destroy()
during nsim_dev_take_snapshot_write(). If so, panic would occur.
This problem is actually the same problem with the first case.
So, this problem will be fixed by the first case's solution.

Test commands:
    modprobe netdevsim
    while :
    do
        echo 1 > /sys/bus/netdevsim/new_device &
        echo 1 > /sys/bus/netdevsim/del_device &
	devlink dev reload netdevsim/netdevsim1 &
	echo 1 > /sys/kernel/debug/netdevsim/netdevsim1/take_snapshot &
    done

Splat looks like:
[   45.564513][  T975] general protection fault, probably for non-canonical address 0xdffffc000000003a: 0000 [#1] SMP DEI
[   45.566131][  T975] KASAN: null-ptr-deref in range [0x00000000000001d0-0x00000000000001d7]
[   45.566135][  T975] CPU: 1 PID: 975 Comm: bash Not tainted 5.5.0+ #322
[   45.569020][  T975] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[   45.569026][  T975] RIP: 0010:__mutex_lock+0x10a/0x14b0
[   45.570518][  T975] Code: 08 84 d2 0f 85 7f 12 00 00 44 8b 0d 10 23 65 02 45 85 c9 75 29 49 8d 7f 68 48 b8 00 00 00 0f
[   45.570522][  T975] RSP: 0018:ffff888046ccfbf0 EFLAGS: 00010206
[   45.572305][  T975] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000
[   45.572308][  T975] RDX: 000000000000003a RSI: ffffffffac926440 RDI: 00000000000001d0
[   45.576843][  T975] RBP: ffff888046ccfd70 R08: ffffffffab610645 R09: 0000000000000000
[   45.576847][  T975] R10: ffff888046ccfd90 R11: ffffed100d6360ad R12: 0000000000000000
[   45.578471][  T975] R13: dffffc0000000000 R14: ffffffffae1976c0 R15: 0000000000000168
[   45.578475][  T975] FS:  00007f614d6e7740(0000) GS:ffff88806c400000(0000) knlGS:0000000000000000
[   45.581492][  T975] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   45.582942][  T975] CR2: 00005618677d1cf0 CR3: 000000005fb9c002 CR4: 00000000000606e0
[   45.584543][  T975] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   45.586633][  T975] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   45.589889][  T975] Call Trace:
[   45.591445][  T975]  ? devlink_region_snapshot_create+0x55/0x4a0
[   45.601250][  T975]  ? mutex_lock_io_nested+0x1380/0x1380
[   45.602817][  T975]  ? mutex_lock_io_nested+0x1380/0x1380
[   45.603875][  T975]  ? mark_held_locks+0xa5/0xe0
[   45.604769][  T975]  ? _raw_spin_unlock_irqrestore+0x2d/0x50
[   45.606147][  T975]  ? __mutex_unlock_slowpath+0xd0/0x670
[   45.607723][  T975]  ? crng_backtrack_protect+0x80/0x80
[   45.613530][  T975]  ? wait_for_completion+0x390/0x390
[   45.615152][  T975]  ? devlink_region_snapshot_create+0x55/0x4a0
[   45.616834][  T975]  devlink_region_snapshot_create+0x55/0x4a0
[ ... ]

Fixes: 4418f862d6 ("netdevsim: implement support for devlink region and snapshots")
Signed-off-by: Taehee Yoo <ap420073@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-02-03 15:32:20 -08:00
Taehee Yoo 6ab63366e1 netdevsim: disable devlink reload when resources are being used
devlink reload destroys resources and allocates resources again.
So, when devices and ports resources are being used, devlink reload
function should not be executed. In order to avoid this race, a new
lock is added and new_port() and del_port() call devlink_reload_disable()
and devlink_reload_enable().

Thread0                      Thread1
{new/del}_port()             {new/del}_port()
devlink_reload_disable()
                             devlink_reload_disable()
devlink_reload_enable()
                             //here
                             devlink_reload_enable()

Before Thread1's devlink_reload_enable(), the devlink is already allowed
to execute reload because Thread0 allows it. devlink reload disable/enable
variable type is bool. So the above case would exist.
So, disable/enable should be executed atomically.
In order to do that, a new lock is used.

Test commands:
    modprobe netdevsim
    echo 1 > /sys/bus/netdevsim/new_device
    while :
    do
        echo 1 > /sys/devices/netdevsim1/new_port &
        echo 1 > /sys/devices/netdevsim1/del_port &
        devlink dev reload netdevsim/netdevsim1 &
    done

Splat looks like:
[   23.342145][  T932] DEBUG_LOCKS_WARN_ON(mutex_is_locked(lock))
[   23.342159][  T932] WARNING: CPU: 0 PID: 932 at kernel/locking/mutex-debug.c:103 mutex_destroy+0xc7/0xf0
[   23.344182][  T932] Modules linked in: netdevsim openvswitch nsh nf_conncount nf_nat nf_conntrack nf_defrag_ipv6 nf_dx
[   23.346485][  T932] CPU: 0 PID: 932 Comm: devlink Not tainted 5.5.0+ #322
[   23.347696][  T932] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[   23.348893][  T932] RIP: 0010:mutex_destroy+0xc7/0xf0
[   23.349505][  T932] Code: e0 07 83 c0 03 38 d0 7c 04 84 d2 75 2e 8b 05 00 ac b0 02 85 c0 75 8b 48 c7 c6 00 5e 07 96 40
[   23.351887][  T932] RSP: 0018:ffff88806208f810 EFLAGS: 00010286
[   23.353963][  T932] RAX: dffffc0000000008 RBX: ffff888067f6f2c0 RCX: ffffffff942c4bd4
[   23.355222][  T932] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff96dac5b4
[   23.356169][  T932] RBP: ffff888067f6f000 R08: fffffbfff2d235a5 R09: fffffbfff2d235a5
[   23.357160][  T932] R10: 0000000000000001 R11: fffffbfff2d235a4 R12: ffff888067f6f208
[   23.358288][  T932] R13: ffff88806208fa70 R14: ffff888067f6f000 R15: ffff888069ce3800
[   23.359307][  T932] FS:  00007fe2a3876740(0000) GS:ffff88806c000000(0000) knlGS:0000000000000000
[   23.360473][  T932] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   23.361319][  T932] CR2: 00005561357aa000 CR3: 000000005227a006 CR4: 00000000000606f0
[   23.362323][  T932] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   23.363417][  T932] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   23.364414][  T932] Call Trace:
[   23.364828][  T932]  nsim_dev_reload_destroy+0x77/0xb0 [netdevsim]
[   23.365655][  T932]  nsim_dev_reload_down+0x84/0xb0 [netdevsim]
[   23.366433][  T932]  devlink_reload+0xb1/0x350
[   23.367010][  T932]  genl_rcv_msg+0x580/0xe90

[ ...]

[   23.531729][ T1305] kernel BUG at lib/list_debug.c:53!
[   23.532523][ T1305] invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN PTI
[   23.533467][ T1305] CPU: 2 PID: 1305 Comm: bash Tainted: G        W         5.5.0+ #322
[   23.534962][ T1305] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[   23.536503][ T1305] RIP: 0010:__list_del_entry_valid+0xe6/0x150
[   23.538346][ T1305] Code: 89 ea 48 c7 c7 00 73 1e 96 e8 df f7 4c ff 0f 0b 48 c7 c7 60 73 1e 96 e8 d1 f7 4c ff 0f 0b 44
[   23.541068][ T1305] RSP: 0018:ffff888047c27b58 EFLAGS: 00010282
[   23.542001][ T1305] RAX: 0000000000000054 RBX: ffff888067f6f318 RCX: 0000000000000000
[   23.543051][ T1305] RDX: 0000000000000054 RSI: 0000000000000008 RDI: ffffed1008f84f61
[   23.544072][ T1305] RBP: ffff88804aa0fca0 R08: ffffed100d940539 R09: ffffed100d940539
[   23.545085][ T1305] R10: 0000000000000001 R11: ffffed100d940538 R12: ffff888047c27cb0
[   23.546422][ T1305] R13: ffff88806208b840 R14: ffffffff981976c0 R15: ffff888067f6f2c0
[   23.547406][ T1305] FS:  00007f76c0431740(0000) GS:ffff88806c800000(0000) knlGS:0000000000000000
[   23.548527][ T1305] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   23.549389][ T1305] CR2: 00007f5048f1a2f8 CR3: 000000004b310006 CR4: 00000000000606e0
[   23.550636][ T1305] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   23.551578][ T1305] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   23.552597][ T1305] Call Trace:
[   23.553004][ T1305]  mutex_remove_waiter+0x101/0x520
[   23.553646][ T1305]  __mutex_lock+0xac7/0x14b0
[   23.554218][ T1305]  ? nsim_dev_port_del+0x4e/0x140 [netdevsim]
[   23.554908][ T1305]  ? mutex_lock_io_nested+0x1380/0x1380
[   23.555570][ T1305]  ? _parse_integer+0xf0/0xf0
[   23.556043][ T1305]  ? kstrtouint+0x86/0x110
[   23.556504][ T1305]  ? nsim_dev_port_del+0x4e/0x140 [netdevsim]
[   23.557133][ T1305]  nsim_dev_port_del+0x4e/0x140 [netdevsim]
[   23.558024][ T1305]  del_port_store+0xcc/0xf0 [netdevsim]
[ ... ]

Fixes: 75ba029f3c ("netdevsim: implement proper devlink reload")
Signed-off-by: Taehee Yoo <ap420073@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-02-03 15:32:20 -08:00
Taehee Yoo f5cd21605e netdevsim: fix using uninitialized resources
When module is being initialized, __init() calls bus_register() and
driver_register().
These functions internally create various resources and sysfs files.
The sysfs files are used for basic operations(add/del device).
/sys/bus/netdevsim/new_device
/sys/bus/netdevsim/del_device

These sysfs files use netdevsim resources, they are mostly allocated
and initialized in ->probe() function, which is nsim_dev_probe().
But, sysfs files could be executed before ->probe() is finished.
So, accessing uninitialized data would occur.

Another problem is very similar.
/sys/bus/netdevsim/new_device internally creates sysfs files.
/sys/devices/netdevsim<id>/new_port
/sys/devices/netdevsim<id>/del_port

These sysfs files also use netdevsim resources, they are mostly allocated
and initialized in creating device routine, which is nsim_bus_dev_new().
But they also could be executed before nsim_bus_dev_new() is finished.
So, accessing uninitialized data would occur.

To fix these problems, this patch adds flags, which means whether the
operation is finished or not.
The flag variable 'nsim_bus_enable' means whether netdevsim bus was
initialized or not.
This is protected by nsim_bus_dev_list_lock.
The flag variable 'nsim_bus_dev->init' means whether nsim_bus_dev was
initialized or not.
This could be used in {new/del}_port_store() with no lock.

Test commands:
    #SHELL1
    modprobe netdevsim
    while :
    do
        echo "1 1" > /sys/bus/netdevsim/new_device
        echo "1 1" > /sys/bus/netdevsim/del_device
    done

    #SHELL2
    while :
    do
        echo 1 > /sys/devices/netdevsim1/new_port
        echo 1 > /sys/devices/netdevsim1/del_port
    done

Splat looks like:
[   47.508954][ T1008] general protection fault, probably for non-canonical address 0xdffffc0000000021: 0000 I
[   47.510793][ T1008] KASAN: null-ptr-deref in range [0x0000000000000108-0x000000000000010f]
[   47.511963][ T1008] CPU: 2 PID: 1008 Comm: bash Not tainted 5.5.0+ #322
[   47.512823][ T1008] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[   47.514041][ T1008] RIP: 0010:__mutex_lock+0x10a/0x14b0
[   47.514699][ T1008] Code: 08 84 d2 0f 85 7f 12 00 00 44 8b 0d 10 23 65 02 45 85 c9 75 29 49 8d 7f 68 48 b8 00 00 00 0f
[   47.517163][ T1008] RSP: 0018:ffff888059b4fbb0 EFLAGS: 00010206
[   47.517802][ T1008] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000
[   47.518941][ T1008] RDX: 0000000000000021 RSI: ffffffff85926440 RDI: 0000000000000108
[   47.519732][ T1008] RBP: ffff888059b4fd30 R08: ffffffffc073fad0 R09: 0000000000000000
[   47.520729][ T1008] R10: ffff888059b4fd50 R11: ffff88804bb38040 R12: 0000000000000000
[   47.521702][ T1008] R13: dffffc0000000000 R14: ffffffff871976c0 R15: 00000000000000a0
[   47.522760][ T1008] FS:  00007fd4be05a740(0000) GS:ffff88806c800000(0000) knlGS:0000000000000000
[   47.523877][ T1008] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   47.524627][ T1008] CR2: 0000561c82b69cf0 CR3: 0000000065dd6004 CR4: 00000000000606e0
[   47.527662][ T1008] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   47.528604][ T1008] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   47.529531][ T1008] Call Trace:
[   47.529874][ T1008]  ? nsim_dev_port_add+0x50/0x150 [netdevsim]
[   47.530470][ T1008]  ? mutex_lock_io_nested+0x1380/0x1380
[   47.531018][ T1008]  ? _kstrtoull+0x76/0x160
[   47.531449][ T1008]  ? _parse_integer+0xf0/0xf0
[   47.531874][ T1008]  ? kernfs_fop_write+0x1cf/0x410
[   47.532330][ T1008]  ? sysfs_file_ops+0x160/0x160
[   47.532773][ T1008]  ? kstrtouint+0x86/0x110
[   47.533168][ T1008]  ? nsim_dev_port_add+0x50/0x150 [netdevsim]
[   47.533721][ T1008]  nsim_dev_port_add+0x50/0x150 [netdevsim]
[   47.534336][ T1008]  ? sysfs_file_ops+0x160/0x160
[   47.534858][ T1008]  new_port_store+0x99/0xb0 [netdevsim]
[   47.535439][ T1008]  ? del_port_store+0xb0/0xb0 [netdevsim]
[   47.536035][ T1008]  ? sysfs_file_ops+0x112/0x160
[   47.536544][ T1008]  ? sysfs_kf_write+0x3b/0x180
[   47.537029][ T1008]  kernfs_fop_write+0x276/0x410
[   47.537548][ T1008]  ? __sb_start_write+0x215/0x2e0
[   47.538110][ T1008]  vfs_write+0x197/0x4a0
[ ... ]

Fixes: f9d9db47d3 ("netdevsim: add bus attributes to add new and delete devices")
Fixes: 794b2c05ca ("netdevsim: extend device attrs to support port addition and deletion")
Signed-off-by: Taehee Yoo <ap420073@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-02-03 15:32:20 -08:00
Jiri Pirko 82c93a87bf netdevsim: implement couple of testing devlink health reporters
Implement "empty" and "dummy" reporters. The first one is really simple
and does nothing. The other one has debugfs files to trigger breakage
and it is able to do recovery. The ops also implement dummy fmsg
content.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-10-11 21:02:30 -07:00
Jiri Pirko 155ddfc5e5 netdevsim: add couple of debugfs bools to debug devlink reload
Add flag to disallow reload and another one that causes reload to
always fail.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-10-06 18:28:42 +02:00
Jiri Pirko 7b60027bbc netdevsim: create devlink and netdev instances in namespace
When user does create new netdevsim instance using sysfs bus file,
create the devlink instance and related netdev instance in the namespace
of the caller.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-10-05 16:34:15 -07:00
Jiri Pirko 90d299138d netdevsim: register port netdevices into net of device
Register newly created port netdevice into net namespace
that the parent device belongs to.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-10-04 11:10:56 -07:00
Jiri Pirko 75ba029f3c netdevsim: implement proper devlink reload
During devlink reload, all driver objects should be reinstantiated with
the exception of devlink instance and devlink resources and params.
Move existing devlink_resource_size_get() calls into fib_create() just
before fib notifier is registered. Also, make sure that extack is
propagated down to fib_notifier_register() call.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-10-04 11:10:56 -07:00