• Parav Pandit's avatar
    devlink: Introduce controller number · 3a2d9588
    Parav Pandit authored
    A devlink port may be for a controller consist of PCI device.
    A devlink instance holds ports of two types of controllers.
    (1) controller discovered on same system where eswitch resides
    This is the case where PCI PF/VF of a controller and devlink eswitch
    instance both are located on a single system.
    (2) controller located on external host system.
    This is the case where a controller is located in one system and its
    devlink eswitch ports are located in a different system.
    
    When a devlink eswitch instance serves the devlink ports of both
    controllers together, PCI PF/VF numbers may overlap.
    Due to this a unique phys_port_name cannot be constructed.
    
    For example in below such system controller-0 and controller-1, each has
    PCI PF pf0 whose eswitch ports can be present in controller-0.
    These results in phys_port_name as "pf0" for both.
    Similar problem exists for VFs and upcoming Sub functions.
    
    An example view of two controller systems:
    
                 ---------------------------------------------------------
                 |                                                       |
                 |           --------- ---------         ------- ------- |
    -----------  |           | vf(s) | | sf(s) |         |vf(s)| |sf(s)| |
    | server  |  | -------   ----/---- ---/----- ------- ---/--- ---/--- |
    | pci rc  |=== | pf0 |______/________/       | pf1 |___/_______/     |
    | connect |  | -------                       -------                 |
    -----------  |     | controller_num=1 (no eswitch)                   |
                 ------|--------------------------------------------------
                 (internal wire)
                       |
                 ---------------------------------------------------------
                 | devlink eswitch ports and reps                        |
                 | ----------------------------------------------------- |
                 | |ctrl-0 | ctrl-0 | ctrl-0 | ctrl-0 | ctrl-0 |ctrl-0 | |
                 | |pf0    | pf0vfN | pf0sfN | pf1    | pf1vfN |pf1sfN | |
                 | ----------------------------------------------------- |
                 | |ctrl-1 | ctrl-1 | ctrl-1 | ctrl-1 | ctrl-1 |ctrl-1 | |
                 | |pf1    | pf1vfN | pf1sfN | pf1    | pf1vfN |pf0sfN | |
                 | ----------------------------------------------------- |
                 |                                                       |
                 |                                                       |
                 |           --------- ---------         ------- ------- |
                 |           | vf(s) | | sf(s) |         |vf(s)| |sf(s)| |
                 | -------   ----/---- ---/----- ------- ---/--- ---/--- |
                 | | pf0 |______/________/       | pf1 |___/_______/     |
                 | -------                       -------                 |
                 |                                                       |
                 |  local controller_num=0 (eswitch)                     |
                 ---------------------------------------------------------
    
    An example devlink port for external controller with controller
    number = 1 for a VF 1 of PF 0:
    
    $ devlink port show pci/0000:06:00.0/2
    pci/0000:06:00.0/2: type eth netdev ens2f0pf0vf1 flavour pcivf controller 1 pfnum 0 vfnum 1 external true splittable false
      function:
        hw_addr 00:00:00:00:00:00
    
    $ devlink port show pci/0000:06:00.0/2 -jp
    {
        "port": {
            "pci/0000:06:00.0/2": {
                "type": "eth",
                "netdev": "ens2f0pf0vf1",
                "flavour": "pcivf",
                "controller": 1,
                "pfnum": 0,
                "vfnum": 1,
                "external": true,
                "splittable": false,
                "function": {
                    "hw_addr": "00:00:00:00:00:00"
                }
            }
        }
    }
    Signed-off-by: default avatarParav Pandit <parav@nvidia.com>
    Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3a2d9588
devlink.c 246 KB