1.. SPDX-License-Identifier: GPL-2.0 2 3================ 4Devlink Resource 5================ 6 7``devlink`` provides the ability for drivers to register resources, which 8can allow administrators to see the device restrictions for a given 9resource, as well as how much of the given resource is currently 10in use. Additionally, these resources can optionally have configurable size. 11This could enable the administrator to limit the number of resources that 12are used. 13 14For example, the ``netdevsim`` driver enables ``/IPv4/fib`` and 15``/IPv4/fib-rules`` as resources to limit the number of IPv4 FIB entries and 16rules for a given device. 17 18Resource Ids 19============ 20 21Each resource is represented by an id, and contains information about its 22current size and related sub resources. To access a sub resource, you 23specify the path of the resource. For example ``/IPv4/fib`` is the id for 24the ``fib`` sub-resource under the ``IPv4`` resource. 25 26Generic Resources 27================= 28 29Generic resources are used to describe resources that can be shared by multiple 30device drivers and their description must be added to the following table: 31 32.. list-table:: List of Generic Resources 33 :widths: 10 90 34 35 * - Name 36 - Description 37 * - ``physical_ports`` 38 - A limited capacity of physical ports that the switch ASIC can support 39 40example usage 41------------- 42 43The resources exposed by the driver can be observed, for example: 44 45.. code:: shell 46 47 $devlink resource show pci/0000:03:00.0 48 pci/0000:03:00.0: 49 name kvd size 245760 unit entry 50 resources: 51 name linear size 98304 occ 0 unit entry size_min 0 size_max 147456 size_gran 128 52 name hash_double size 60416 unit entry size_min 32768 size_max 180224 size_gran 128 53 name hash_single size 87040 unit entry size_min 65536 size_max 212992 size_gran 128 54 55Some resource's size can be changed. Examples: 56 57.. code:: shell 58 59 $devlink resource set pci/0000:03:00.0 path /kvd/hash_single size 73088 60 $devlink resource set pci/0000:03:00.0 path /kvd/hash_double size 74368 61 62The changes do not apply immediately, this can be validated by the 'size_new' 63attribute, which represents the pending change in size. For example: 64 65.. code:: shell 66 67 $devlink resource show pci/0000:03:00.0 68 pci/0000:03:00.0: 69 name kvd size 245760 unit entry size_valid false 70 resources: 71 name linear size 98304 size_new 147456 occ 0 unit entry size_min 0 size_max 147456 size_gran 128 72 name hash_double size 60416 unit entry size_min 32768 size_max 180224 size_gran 128 73 name hash_single size 87040 unit entry size_min 65536 size_max 212992 size_gran 128 74 75Note that changes in resource size may require a device reload to properly 76take effect. 77 78Port-level Resources and Full Dump 79================================== 80 81In addition to device-level resources, ``devlink`` also supports port-level 82resources. These resources are associated with a specific devlink port rather 83than the device as a whole. 84 85To list resources for all devlink devices and ports: 86 87.. code:: shell 88 89 $ devlink resource show 90 pci/0000:03:00.0: 91 name max_local_SFs size 128 unit entry dpipe_tables none 92 name max_external_SFs size 128 unit entry dpipe_tables none 93 pci/0000:03:00.0/196608: 94 name max_SFs size 128 unit entry dpipe_tables none 95 pci/0000:03:00.0/196609: 96 name max_SFs size 128 unit entry dpipe_tables none 97 pci/0000:03:00.1: 98 name max_local_SFs size 128 unit entry dpipe_tables none 99 name max_external_SFs size 128 unit entry dpipe_tables none 100 pci/0000:03:00.1/196708: 101 name max_SFs size 128 unit entry dpipe_tables none 102 pci/0000:03:00.1/196709: 103 name max_SFs size 128 unit entry dpipe_tables none 104 105To show resources for a specific port: 106 107.. code:: shell 108 109 $ devlink resource show pci/0000:03:00.0/196608 110 pci/0000:03:00.0/196608: 111 name max_SFs size 128 unit entry dpipe_tables none 112 113Resource Scope Filtering 114======================== 115 116When dumping resources for all devices, ``devlink resource show`` accepts 117an optional ``scope`` parameter to restrict the response to device-level 118resources, port-level resources, or both (the default). 119 120To dump only device-level resources across all devices: 121 122.. code:: shell 123 124 $ devlink resource show scope dev 125 pci/0000:03:00.0: 126 name max_local_SFs size 128 unit entry dpipe_tables none 127 name max_external_SFs size 128 unit entry dpipe_tables none 128 pci/0000:03:00.1: 129 name max_local_SFs size 128 unit entry dpipe_tables none 130 name max_external_SFs size 128 unit entry dpipe_tables none 131 132To dump only port-level resources across all devices: 133 134.. code:: shell 135 136 $ devlink resource show scope port 137 pci/0000:03:00.0/196608: 138 name max_SFs size 128 unit entry dpipe_tables none 139 pci/0000:03:00.0/196609: 140 name max_SFs size 128 unit entry dpipe_tables none 141 pci/0000:03:00.1/196708: 142 name max_SFs size 128 unit entry dpipe_tables none 143 pci/0000:03:00.1/196709: 144 name max_SFs size 128 unit entry dpipe_tables none 145 146Note that port-level resources are read-only. 147