event: Remove Support For DLB V1
PATCH v2 1/1 event: Remove Support For DLB V1
Removed source code, rte_config defines, and documentation. Removed from build.
Updated release notes to announce removal.
--- config/rte_config.h | 6 - doc/api/doxy-api-index.md | 1 - doc/api/doxy-api.conf.in | 1 - doc/guides/eventdevs/dlb.rst | 341 - doc/guides/eventdevs/index.rst | 1 - doc/guides/rel_notes/release_21_05.rst | 3 + drivers/event/dlb/dlb.c | 4082 ----------- drivers/event/dlb/dlb_iface.c | 79 - drivers/event/dlb/dlb_iface.h | 82 - drivers/event/dlb/dlb_inline_fns.h | 36 - drivers/event/dlb/dlb_log.h | 25 - drivers/event/dlb/dlb_priv.h | 513 -- drivers/event/dlb/dlb_selftest.c | 1544 ---- drivers/event/dlb/dlb_user.h | 814 --- drivers/event/dlb/dlb_xstats.c | 1212 --- drivers/event/dlb/meson.build | 22 - drivers/event/dlb/pf/base/dlb_hw_types.h | 334 - drivers/event/dlb/pf/base/dlb_osdep.h | 310 - drivers/event/dlb/pf/base/dlb_osdep_bitmap.h | 441 -- drivers/event/dlb/pf/base/dlb_osdep_list.h | 131 - drivers/event/dlb/pf/base/dlb_osdep_types.h | 31 - drivers/event/dlb/pf/base/dlb_regs.h | 2368 ------ drivers/event/dlb/pf/base/dlb_resource.c | 6904 ------------------ drivers/event/dlb/pf/base/dlb_resource.h | 876 --- drivers/event/dlb/pf/dlb_main.c | 552 -- drivers/event/dlb/pf/dlb_main.h | 47 - drivers/event/dlb/pf/dlb_pf.c | 752 -- drivers/event/dlb/rte_pmd_dlb.c | 38 - drivers/event/dlb/rte_pmd_dlb.h | 77 - drivers/event/dlb/version.map | 9 - drivers/event/meson.build | 2 +- 31 files changed, 4 insertions(+), 21630 deletions(-) delete mode 100644 doc/guides/eventdevs/dlb.rst delete mode 100644 drivers/event/dlb/dlb.c delete mode 100644 drivers/event/dlb/dlb_iface.c delete mode 100644 drivers/event/dlb/dlb_iface.h delete mode 100644 drivers/event/dlb/dlb_inline_fns.h delete mode 100644 drivers/event/dlb/dlb_log.h delete mode 100644 drivers/event/dlb/dlb_priv.h delete mode 100644 drivers/event/dlb/dlb_selftest.c delete mode 100644 drivers/event/dlb/dlb_user.h delete mode 100644 drivers/event/dlb/dlb_xstats.c delete mode 100644 drivers/event/dlb/meson.build delete mode 100644 drivers/event/dlb/pf/base/dlb_hw_types.h delete mode 100644 drivers/event/dlb/pf/base/dlb_osdep.h delete mode 100644 drivers/event/dlb/pf/base/dlb_osdep_bitmap.h delete mode 100644 drivers/event/dlb/pf/base/dlb_osdep_list.h delete mode 100644 drivers/event/dlb/pf/base/dlb_osdep_types.h delete mode 100644 drivers/event/dlb/pf/base/dlb_regs.h delete mode 100644 drivers/event/dlb/pf/base/dlb_resource.c delete mode 100644 drivers/event/dlb/pf/base/dlb_resource.h delete mode 100644 drivers/event/dlb/pf/dlb_main.c delete mode 100644 drivers/event/dlb/pf/dlb_main.h delete mode 100644 drivers/event/dlb/pf/dlb_pf.c delete mode 100644 drivers/event/dlb/rte_pmd_dlb.c delete mode 100644 drivers/event/dlb/rte_pmd_dlb.h delete mode 100644 drivers/event/dlb/version.map
config/rte_config.h +0 -6
@@ -138,12 +138,6 @@/* QEDE PMD defines */ #define RTE_LIBRTE_QEDE_FW "" -/* DLB PMD defines */ -#define RTE_LIBRTE_PMD_DLB_POLL_INTERVAL 1000 -#define RTE_LIBRTE_PMD_DLB_UMWAIT_CTL_STATE 0 -#undef RTE_LIBRTE_PMD_DLB_QUELL_STATS -#define RTE_LIBRTE_PMD_DLB_SW_CREDIT_QUANTA 32 -/* DLB2 defines */ #define RTE_LIBRTE_PMD_DLB2_POLL_INTERVAL 1000#define RTE_LIBRTE_PMD_DLB2_UMWAIT_CTL_STATE 0
doc/api/doxy-api-index.md +0 -1
@@ -55,7 +55,6 @@ The public API headers are grouped by topics: [dpaa2_cmdif] (@ref rte_pmd_dpaa2_cmdif.h), [dpaa2_qdma] (@ref rte_pmd_dpaa2_qdma.h), [crypto_scheduler] (@ref rte_cryptodev_scheduler.h), - [dlb] (@ref rte_pmd_dlb.h), [dlb2] (@ref rte_pmd_dlb2.h) - **memory**:
doc/api/doxy-api.conf.in +0 -1
@@ -7,7 +7,6 @@ USE_MDFILE_AS_MAINPAGE = @TOPDIR@/doc/api/doxy-api-index.md INPUT = @TOPDIR@/doc/api/doxy-api-index.md \ @TOPDIR@/drivers/bus/vdev \ @TOPDIR@/drivers/crypto/scheduler \ - @TOPDIR@/drivers/event/dlb \ @TOPDIR@/drivers/event/dlb2 \ @TOPDIR@/drivers/mempool/dpaa2 \ @TOPDIR@/drivers/net/ark \
doc/guides/eventdevs/dlb.rst deleted +0 -341
341 lines not on this page · raw message
doc/guides/eventdevs/index.rst +0 -1
@@ -11,7 +11,6 @@ application through the eventdev API. :maxdepth: 2 :numbered: - dlb dlb2 dpaa dpaa2
doc/guides/rel_notes/release_21_05.rst +3 -0
@@ -68,6 +68,9 @@ Removed Items Also, make sure to start the actual text at the margin. ======================================================= +* Removed support for DLB V1 hardware. This is not a broad market device, + and existing customers already obtain the source code directly from Intel. + API Changes -----------
drivers/event/dlb/dlb.c deleted +0 -4082
2,617 lines not on this page · raw message
drivers/event/dlb/dlb_iface.c deleted +0 -79
79 lines not on this page · raw message
drivers/event/dlb/dlb_iface.h deleted +0 -82
82 lines not on this page · raw message
drivers/event/dlb/dlb_inline_fns.h deleted +0 -36
Lines of this file are not shown. View the raw message.
drivers/event/dlb/dlb_priv.h deleted +0 -513
513 lines not on this page · raw message
drivers/event/dlb/dlb_selftest.c deleted +0 -1544
1,544 lines not on this page · raw message
drivers/event/dlb/dlb_user.h deleted +0 -814
814 lines not on this page · raw message
drivers/event/dlb/dlb_xstats.c deleted +0 -1212
1,212 lines not on this page · raw message
drivers/event/dlb/pf/base/dlb_hw_types.h deleted +0 -334
334 lines not on this page · raw message
drivers/event/dlb/pf/base/dlb_osdep.h deleted +0 -310
310 lines not on this page · raw message
drivers/event/dlb/pf/base/dlb_osdep_bitmap.h deleted +0 -441
441 lines not on this page · raw message
drivers/event/dlb/pf/base/dlb_osdep_list.h deleted +0 -131
131 lines not on this page · raw message
drivers/event/dlb/pf/base/dlb_osdep_types.h deleted +0 -31
Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/base/dlb_regs.h deleted +0 -2368
2,368 lines not on this page · raw message
drivers/event/dlb/pf/base/dlb_resource.c deleted +0 -6904
6,904 lines not on this page · raw message
drivers/event/dlb/pf/base/dlb_resource.h deleted +0 -876
876 lines not on this page · raw message
drivers/event/dlb/pf/dlb_main.c deleted +0 -552
552 lines not on this page · raw message
drivers/event/dlb/pf/dlb_main.h deleted +0 -47
47 lines not on this page · raw message
drivers/event/dlb/pf/dlb_pf.c deleted +0 -752
752 lines not on this page · raw message
drivers/event/dlb/rte_pmd_dlb.c deleted +0 -38
Lines of this file are not shown. View the raw message.
drivers/event/dlb/rte_pmd_dlb.h deleted +0 -77
77 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Signature · 1 line
2.23.0
Part of the diff is not shown here. View the raw message.
Jerin Jacob
AppliedQuoted 5 lines · Timothy McDaniel
Removed source code,
rte_configdefines, and documentation. Removed from build.
Updated release notes to announce removal.Signed-off-by Timothy McDaniel <[email protected]>
Applied to dpdk-next-net-eventdev/for-main after following changes. Thanks
1) Removed stale dlb section in MAINTAINERS file
2) Removed stale dlb reference from app/test/test_eventdev.c
3) Updated git commit message to
event/dlb: remove dlb driver
Remove event/dlb driver from dpdk code base. Updated release note's removal section to reflect the same.
Quoted 22,311 lines
--- config/rte_config.h | 6 - doc/api/doxy-api-index.md | 1 - doc/api/doxy-api.conf.in | 1 - doc/guides/eventdevs/dlb.rst | 341 - doc/guides/eventdevs/index.rst | 1 - doc/guides/rel_notes/release_21_05.rst | 3 + drivers/event/dlb/dlb.c | 4082 ----------- drivers/event/dlb/dlb_iface.c | 79 - drivers/event/dlb/dlb_iface.h | 82 - drivers/event/dlb/dlb_inline_fns.h | 36 - drivers/event/dlb/dlb_log.h | 25 - drivers/event/dlb/dlb_priv.h | 513 -- drivers/event/dlb/dlb_selftest.c | 1544 ---- drivers/event/dlb/dlb_user.h | 814 --- drivers/event/dlb/dlb_xstats.c | 1212 --- drivers/event/dlb/meson.build | 22 - drivers/event/dlb/pf/base/dlb_hw_types.h | 334 - drivers/event/dlb/pf/base/dlb_osdep.h | 310 - drivers/event/dlb/pf/base/dlb_osdep_bitmap.h | 441 -- drivers/event/dlb/pf/base/dlb_osdep_list.h | 131 - drivers/event/dlb/pf/base/dlb_osdep_types.h | 31 - drivers/event/dlb/pf/base/dlb_regs.h | 2368 ------ drivers/event/dlb/pf/base/dlb_resource.c | 6904 ------------------ drivers/event/dlb/pf/base/dlb_resource.h | 876 --- drivers/event/dlb/pf/dlb_main.c | 552 -- drivers/event/dlb/pf/dlb_main.h | 47 - drivers/event/dlb/pf/dlb_pf.c | 752 -- drivers/event/dlb/rte_pmd_dlb.c | 38 - drivers/event/dlb/rte_pmd_dlb.h | 77 - drivers/event/dlb/version.map | 9 - drivers/event/meson.build | 2 +- 31 files changed, 4 insertions(+), 21630 deletions(-) delete mode 100644 doc/guides/eventdevs/dlb.rst delete mode 100644 drivers/event/dlb/dlb.c delete mode 100644 drivers/event/dlb/dlb_iface.c delete mode 100644 drivers/event/dlb/dlb_iface.h delete mode 100644 drivers/event/dlb/dlb_inline_fns.h delete mode 100644 drivers/event/dlb/dlb_log.h delete mode 100644 drivers/event/dlb/dlb_priv.h delete mode 100644 drivers/event/dlb/dlb_selftest.c delete mode 100644 drivers/event/dlb/dlb_user.h delete mode 100644 drivers/event/dlb/dlb_xstats.c delete mode 100644 drivers/event/dlb/meson.build delete mode 100644 drivers/event/dlb/pf/base/dlb_hw_types.h delete mode 100644 drivers/event/dlb/pf/base/dlb_osdep.h delete mode 100644 drivers/event/dlb/pf/base/dlb_osdep_bitmap.h delete mode 100644 drivers/event/dlb/pf/base/dlb_osdep_list.h delete mode 100644 drivers/event/dlb/pf/base/dlb_osdep_types.h delete mode 100644 drivers/event/dlb/pf/base/dlb_regs.h delete mode 100644 drivers/event/dlb/pf/base/dlb_resource.c delete mode 100644 drivers/event/dlb/pf/base/dlb_resource.h delete mode 100644 drivers/event/dlb/pf/dlb_main.c delete mode 100644 drivers/event/dlb/pf/dlb_main.h delete mode 100644 drivers/event/dlb/pf/dlb_pf.c delete mode 100644 drivers/event/dlb/rte_pmd_dlb.c delete mode 100644 drivers/event/dlb/rte_pmd_dlb.h delete mode 100644 drivers/event/dlb/version.mapconfig/rte_config.h +0
-6@@ -138,12 +138,6 @@/* QEDE PMD defines */ #define RTE_LIBRTE_QEDE_FW "" -/* DLB PMD defines */ -#define RTE_LIBRTE_PMD_DLB_POLL_INTERVAL 1000 -#define RTE_LIBRTE_PMD_DLB_UMWAIT_CTL_STATE 0 -#undef RTE_LIBRTE_PMD_DLB_QUELL_STATS -#define RTE_LIBRTE_PMD_DLB_SW_CREDIT_QUANTA 32 -/* DLB2 defines */ #define RTE_LIBRTE_PMD_DLB2_POLL_INTERVAL 1000#define RTE_LIBRTE_PMD_DLB2_UMWAIT_CTL_STATE 0doc/api/doxy-api-index.md +0
-1@@ -55,7 +55,6 @@ The public API headers are grouped by topics: [dpaa2_cmdif] (@ref rte_pmd_dpaa2_cmdif.h), [dpaa2_qdma] (@ref rte_pmd_dpaa2_qdma.h), [crypto_scheduler] (@ref rte_cryptodev_scheduler.h), - [dlb] (@ref rte_pmd_dlb.h), [dlb2] (@ref rte_pmd_dlb2.h) - **memory**:doc/api/doxy-api.conf.in +0
-0@@ -7,7 +7,6 @@ USE_MDFILE_AS_MAINPAGE =
@TOPDIR@/doc/api/doxy-api-index.mdINPUT = @TOPDIR@/doc/api/doxy-api-index.md \ @TOPDIR@/drivers/bus/vdev \ @TOPDIR@/drivers/crypto/scheduler \doc/api/doxy-api.conf.in +0
-1- @TOPDIR@/drivers/event/dlb \ @TOPDIR@/drivers/event/dlb2 \ @TOPDIR@/drivers/mempool/dpaa2 \ @TOPDIR@/drivers/net/ark \doc/guides/eventdevs/dlb.rst deleted +0
-12@@ -1,341 +0,0 @@ -.. SPDX-License-Identifier: BSD-3-Clause - Copyright(c) 2020 Intel Corporation. - -Driver for the Intel® Dynamic Load Balancer (DLB) -================================================= - -The DPDK dlb poll mode driver supports the Intel® Dynamic Load Balancer. - -Prerequisites -------------- - -Follow the DPDK :ref:`Getting Started Guide for Linux <linux_gsg>` tosetup
doc/guides/eventdevs/dlb.rst deleted +0
-7-the basic DPDK environment. - -Configuration -------------- - -The DLB PF PMD is a user-space PMD that uses VFIO to gain direct -device access. To use this operation mode, the PCIe PF device must bebound
doc/guides/eventdevs/dlb.rst deleted +0
-7-to a DPDK-compatible VFIO driver, such as vfio-pci. - -Eventdev API Notes ------------------- - -The DLB provides the functions of a DPDK event device; specifically, it -supports atomic, ordered, and parallel scheduling events from queues toports.
-However, the DLB hardware is not a perfect match to the eventdev API. Some DLBdoc/guides/eventdevs/dlb.rst deleted +0
-2-features are abstracted by the PMD (e.g. directed ports), some are only -accessible as vdev command-line parameters, and certain eventdev featuresare
-not supported (e.g. the event flow ID is not maintained during scheduling).doc/guides/eventdevs/dlb.rst deleted +0
-3- -In general the dlb PMD is designed for ease-of-use and does not require a -detailed understanding of the hardware, but these details are importantwhen
doc/guides/eventdevs/dlb.rst deleted +0
-10-writing high-performance code. This section describes the places where the -eventdev API and DLB misalign. - -Scheduling Domain Configuration -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are 32 scheduling domainis the DLB. -When one is configured, it allocates load-balanced and -directed queues, ports, credits, and other hardware resources. Some -resource allocations are user-controlled -- the number of queues, forexample
--- and others, like credit pools (one directed and one load-balanced pool perdoc/guides/eventdevs/dlb.rst deleted +0
-3-scheduling domain), are not. - -The DLB is a closed system eventdev, and as such the ``nb_events_limit``device
doc/guides/eventdevs/dlb.rst deleted +0
-8-setup argument and the per-port ``new_event_threshold`` argument apply as -defined in the eventdev header file. The limit is applied to all enqueues, -regardless of whether it will consume a directed or load-balanced credit. - -Reconfiguration -~~~~~~~~~~~~~~~ - -The Eventdev API allows one to reconfigure a device, its ports, and itsqueues
doc/guides/eventdevs/dlb.rst deleted +0
-2-by first stopping the device, calling the configuration function(s), then -restarting the device. The DLB does not support configuring an individualqueue
-or port without first reconfiguring the entire device, however, so there are
-certain reconfiguration sequences that are valid in the eventdev API but notdoc/guides/eventdevs/dlb.rst deleted +0
-9-supported by the PMD. - -Specifically, the PMD supports the following configuration sequence: -1. Configure and start the device -2. Stop the device -3. (Optional) Reconfigure the device -4. (Optional) If step 3 is run: - - a. Setup queue(s). The reconfigured queue(s) lose their previous portlinks.
doc/guides/eventdevs/dlb.rst deleted +0
-4- b. The reconfigured port(s) lose their previous queue links. - -5. (Optional, only if steps 4a and 4b are run) Link port(s) to queue(s) -6. Restart the device. If the device is reconfigured in step 3 but one ormore
doc/guides/eventdevs/dlb.rst deleted +0
-10- of its ports or queues are not, the PMD will apply their previous - configuration (including port->queue links) at this time. - -The PMD does not support the following configuration sequences: -1. Configure and start the device -2. Stop the device -3. Setup queue or setup port -4. Start the device - -This sequence is not supported because the event device must bereconfigured
doc/guides/eventdevs/dlb.rst deleted +0
-6-before its ports or queues can be. - -Load-Balanced Queues -~~~~~~~~~~~~~~~~~~~~ - -A load-balanced queue can support atomic and ordered scheduling, or atomicand
-unordered scheduling, but not atomic and unordered and ordered scheduling. Adoc/guides/eventdevs/dlb.rst deleted +0
-5-queue's scheduling types are controlled by the event queue configuration. - -If the user sets the ``RTE_EVENT_QUEUE_CFG_ALL_TYPES`` flag, the -``nb_atomic_order_sequences`` determines the supported scheduling types. -With non-zero ``nb_atomic_order_sequences``, the queue is configured foratomic
-and ordered scheduling. In this case, ``RTE_SCHED_TYPE_PARALLEL`` scheduling is
-supported by scheduling those events as ordered events. Note that when the
-event is dequeued, itssched_typewill be ``RTE_SCHED_TYPE_ORDERED``. Else if
-``nb_atomic_order_sequences`` is zero, the queue is configured for atomic and
-unordered scheduling. In this case, ``RTE_SCHED_TYPE_ORDERED`` is unsupported.doc/guides/eventdevs/dlb.rst deleted +0
-5- -If the ``RTE_EVENT_QUEUE_CFG_ALL_TYPES`` flag is not set, schedule_type -dictates the queue's scheduling type. - -The ``nb_atomic_order_sequences`` queue configuration field sets theordered
-queue's reorder buffer size. DLB has 4 groups of ordered queues, where eachdoc/guides/eventdevs/dlb.rst deleted +0
-2-group is configured to contain either 1 queue with 1024 reorder entries, 2 -queues with 512 reorder entries, and so on down to 32 queues with 32entries.
doc/guides/eventdevs/dlb.rst deleted +0
-2- -When a load-balanced queue is created, the PMD will configure a newsequence
-number group on-demand ifnum_sequence_numbersdoes not match a pre-existing
-group with available reorder buffer entries. If all sequence number groups are
-in use, no new group will be created and queue configuration will fail. (Notedoc/guides/eventdevs/dlb.rst deleted +0
-4-that when the PMD is used with a virtual DLB device, it cannot change the -sequence number configuration.) - -The queue's ``nb_atomic_flows`` parameter is ignored by the DLB PMD,because
-the DLB does not limit the number of flows a queue can track. In the DLB, alldoc/guides/eventdevs/dlb.rst deleted +0
-6-load-balanced queues can use the full 16-bit flow ID range. - -Load-balanced and Directed Ports -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -DLB ports come in two flavors: load-balanced and directed. The eventdevAPI
-does not have the same concept, but it has a similar one: ports and queues thatdoc/guides/eventdevs/dlb.rst deleted +0
-4-are singly-linked (i.e. linked to a single queue or port, respectively). - -The ``rte_event_dev_info_get()`` function reports the number of available -event ports and queues (among other things). For the DLB PMD,
max_event_ports
-andmax_event_queuesreport the number of available load-balanced ports anddoc/guides/eventdevs/dlb.rst deleted +0
-4-queues, and max_single_link_event_port_queue_pairs reports the number of -available directed ports and queues. - -When a scheduling domain is created in ``rte_event_dev_configure()``, theuser
-specifies ``nb_event_ports`` and ``nb_single_link_event_port_queues``, which
-control the total number of ports (load-balanced and directed) and the number
-of directed ports. Hence, the number of requested load-balanced ports is -``nb_event_ports - nb_single_link_event_ports``. The ``nb_event_queues`` field
-specifies the total number of queues (load-balanced and directed). The numberdoc/guides/eventdevs/dlb.rst deleted +0
-4-of directed queues comes from ``nb_single_link_event_port_queues``, since -directed ports and queues come in pairs. - -When a port is setup, the ``RTE_EVENT_PORT_CFG_SINGLE_LINK`` flagdetermines
doc/guides/eventdevs/dlb.rst deleted +0
-6-whether it should be configured as a directed (the flag is set) or a -load-balanced (the flag is unset) port. Similarly, the -``RTE_EVENT_QUEUE_CFG_SINGLE_LINK`` queue configuration flag controls -whether it is a directed or load-balanced queue. - -Load-balanced ports can only be linked to load-balanced queues, anddirected
-ports can only be linked to directed queues. Furthermore, directed ports candoc/guides/eventdevs/dlb.rst deleted +0
-4-only be linked to a single directed queue (and vice versa), and that link -cannot change after the eventdev is started. - -The eventdev API does not have a directed scheduling type. To supportdirected
-traffic, the dlb PMD detects when an event is being sent to a directed queue
-and overrides its scheduling type. Note that the originally selected scheduling
-type (atomic, ordered, or parallel) is not preserved, and an event'ssched_type
-will be set to ``RTE_SCHED_TYPE_ATOMIC`` when it is dequeued from a directeddoc/guides/eventdevs/dlb.rst deleted +0
-6-port. - -Flow ID -~~~~~~~ - -The flow ID field is not preserved in the event when it is scheduled inthe
doc/guides/eventdevs/dlb.rst deleted +0
-2-DLB, because the DLB hardware control word format does not have sufficient -space to preserve every event field. As a result, the flow ID specifiedwith
doc/guides/eventdevs/dlb.rst deleted +0
-6-the enqueued event will not be in the dequeued event. If this field is -required, the application should pass it through an out-of-band path (for -example in the mbuf's udata64 field, if the event points to an mbuf) or -reconstruct the flow ID after receiving the event. - -Also, the DLB hardware control word supports a 16-bit flow ID. Sincestruct
-rte_event'sflow_idfield is 20 bits, the DLB PMD drops the most significantdoc/guides/eventdevs/dlb.rst deleted +0
-6-four bits from the event's flow ID. - -Hardware Credits -~~~~~~~~~~~~~~~~ - -DLB uses a hardware credit scheme to prevent software from overflowinghardware
-event storage, with each unit of storage represented by a credit. A port spends
-a credit to enqueue an event, and hardware refills the ports with credits as the
-events are scheduled to ports. Refills come from credit pools, and each port isdoc/guides/eventdevs/dlb.rst deleted +0
-2-a member of a load-balanced credit pool and a directed credit pool. The -load-balanced credits are used to enqueue to load-balanced queues, anddirected
doc/guides/eventdevs/dlb.rst deleted +0
-3-credits are used for directed queues. - -A DLB eventdev contains one load-balanced and one directed credit pool.These
doc/guides/eventdevs/dlb.rst deleted +0
-4-pools' sizes are controlled by the nb_events_limit field in struct -rte_event_dev_config. The load-balanced pool is sized to contain -nb_events_limit credits, and the directed pool is sized to contain -nb_events_limit/4 credits. The directed pool size can be overridden withthe
doc/guides/eventdevs/dlb.rst deleted +0
-8-num_dir_credits vdev argument, like so: - - .. code-block:: console - - --vdev=dlb1_event,num_dir_credits=<value> - -This can be used if the default allocation is too low or too high for the -specific application needs. The PMD also supports a vdev arg that limitsthe
doc/guides/eventdevs/dlb.rst deleted +0
-7-max_num_events reported by rte_event_dev_info_get(): - - .. code-block:: console - - --vdev=dlb1_event,max_num_events=<value> - -By default, max_num_events is reported as the total availableload-balanced
-credits. If multiple DLB-based applications are being used, it may be desirable
-to control how many load-balanced credits each application uses, particularlydoc/guides/eventdevs/dlb.rst deleted +0
-5-when application(s) are written to configure nb_events_limit equal to the -reported max_num_events. - -Each port is a member of both credit pools. A port's credit allocation is -defined by its low watermark, high watermark, and refill quanta. Thesethree
doc/guides/eventdevs/dlb.rst deleted +0
-4-parameters are calculated by the dlb PMD like so: - -- The load-balanced high watermark is set to the port's enqueue_depth. - The directed high watermark is set to the minimum of the enqueue_depthand
doc/guides/eventdevs/dlb.rst deleted +0
-5- the directed pool size divided by the total number of ports. -- The refill quanta is set to half the high watermark. -- The low watermark is set to the minimum of 16 and the refill quanta. - -When the eventdev is started, each port is pre-allocated a highwatermark's
-worth of credits. For example, if an eventdev contains four ports with enqueue
-depths of 32 and a load-balanced credit pool size of 4096, each port will startdoc/guides/eventdevs/dlb.rst deleted +0
-2-with 32 load-balanced credits, and there will be 3968 credits available to -replenish the ports. Thus, a single port is not capable of enqueueing up tothe
-nb_events_limit (without any events being dequeued), since the other ports are
-retaining their initial credit allocation; in short, all ports must enqueue indoc/guides/eventdevs/dlb.rst deleted +0
-4-order to reach the limit. - -If a port attempts to enqueue and has no credits available, the enqueue -operation will fail and the application must retry the enqueue. Creditsare
doc/guides/eventdevs/dlb.rst deleted +0
-10-replenished asynchronously by the DLB hardware. - -Software Credits -~~~~~~~~~~~~~~~~ - -The DLB is a "closed system" event dev, and the DLB PMD layers a software -credit scheme on top of the hardware credit scheme in order to comply with -the per-port backpressure described in the eventdev API. - -The DLB's hardware scheme is local to a queue/pipeline stage: a port spendsa
-credit when it enqueues to a queue, and credits are later replenished after thedoc/guides/eventdevs/dlb.rst deleted +0
-5-events are dequeued and released. - -In the software credit scheme, a credit is consumed when a new (.op = -RTE_EVENT_OP_NEW) event is injected into the system, and the credit is -replenished when the event is released from the system (either explicitlywith
doc/guides/eventdevs/dlb.rst deleted +0
-3-RTE_EVENT_OP_RELEASE or implicitly in dequeue_burst()). - -In this model, an event is "in the system" from its first enqueue intoeventdev
-until it is last dequeued. If the event goes through multiple event queues, it
-is still considered "in the system" while a worker thread is processing it.doc/guides/eventdevs/dlb.rst deleted +0
-2- -A port will fail to enqueue if the number of events in the system exceedsits
-``new_event_threshold`` (specified at port setup time). A port will also faildoc/guides/eventdevs/dlb.rst deleted +0
-2-to enqueue if it lacks enough hardware credits to enqueue; load-balanced -credits are used to enqueue to a load-balanced queue, and directed creditsare
doc/guides/eventdevs/dlb.rst deleted +0
-10-used to enqueue to a directed queue. - -The out-of-credit situations are typically transient, and an eventdev -application using the DLB ought to retry its enqueues if they fail. -If enqueue fails, DLB PMD sets rte_errno as follows: - -- -ENOSPC: Credit exhaustion (either hardware or software) -- -EINVAL: Invalid argument, such as port ID, queue ID, or sched_type. - -Depending on the pipeline the application has constructed, it's possibleto
-enter a credit deadlock scenario wherein the worker thread lacks the credit
-to enqueue an event, and it must dequeue an event before it can recover thedoc/guides/eventdevs/dlb.rst deleted +0
-2-credit. If the worker thread retries its enqueue indefinitely, it will not -make forward progress. Such deadlock is possible if the application hasevent
-"loops", in which an event in dequeued from queue A and later enqueued back todoc/guides/eventdevs/dlb.rst deleted +0
-3-queue A. - -Due to this, workers should stop retrying after a time, release the eventsit
-is attempting to enqueue, and dequeue more events. It is important that the
-worker release the events and don't simply set them aside to retry the enqueue
-again later, because the port has limited history list size (by default, twicedoc/guides/eventdevs/dlb.rst deleted +0
-7-the port's dequeue_depth). - -Priority -~~~~~~~~ - -The DLB supports event priority and per-port queue service priority, as -described in the eventdev header file. The DLB does not support 'global'event
doc/guides/eventdevs/dlb.rst deleted +0
-4-queue priority established at queue creation time. - -DLB supports 8 event and queue service priority levels. For both priority -types, the PMD uses the upper three bits of the priority field to determinethe
-DLB priority, discarding the 5 least significant bits. The 5 least significantdoc/guides/eventdevs/dlb.rst deleted +0
-6-event priority bits are not preserved when an event is enqueued. - -Atomic Inflights Allocation -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In the last stage prior to scheduling an atomic event to a CQ, DLB holdsthe
doc/guides/eventdevs/dlb.rst deleted +0
-6-inflight event in a temporary buffer that is divided among load-balanced -queues. If a queue's atomic buffer storage fills up, this can result in -head-of-line-blocking. For example: - -- An LDB queue allocated N atomic buffer entries -- All N entries are filled with events from flow X, which is pinned to CQ0.
doc/guides/eventdevs/dlb.rst deleted +0
-2- -Until CQ 0 releases 1+ events, no other atomic flows for that LDB queue canbe
-scheduled. The likelihood of this case depends on the eventdev configuration,doc/guides/eventdevs/dlb.rst deleted +0
-4-traffic behavior, event processing latency, potential for a worker to be -interrupted or otherwise delayed, etc. - -By default, the PMD allocates 16 buffer entries for each load-balancedqueue,
-which provides an even division across all 128 queues but potentially wastesdoc/guides/eventdevs/dlb.rst deleted +0
-4-buffer space (e.g. if not all queues are used, or aren't used for atomic -scheduling). - -The PMD provides a dev arg to override the default per-queue allocation.To
-increase a vdev's per-queue atomic-inflight allocation to (for example) 64:doc/guides/eventdevs/dlb.rst deleted +0
-9- - .. code-block:: console - - --vdev=dlb1_event,atm_inflights=64 - -Deferred Scheduling -~~~~~~~~~~~~~~~~~~~ - -The DLB PMD's default behavior for managing a CQ is to "pop" the CQ onceper
-dequeued event before returning fromrte_event_dequeue_burst(). This frees the
-corresponding entries in the CQ, which enables the DLB to schedule more eventsdoc/guides/eventdevs/dlb.rst deleted +0
-3-to it. - -To support applications seeking finer-grained scheduling control -- forexample
doc/guides/eventdevs/dlb.rst deleted +0
-2-deferring scheduling to get the best possible priority scheduling and -load-balancing -- the PMD supports a deferred scheduling mode. In thismode,
-the CQ entry is not popped until the *subsequent*rte_event_dequeue_burst()
-call. This mode only applies to load-balanced event ports with dequeue depth of
-1.doc/guides/eventdevs/dlb.rst deleted +0
-7- -To enable deferred scheduling, use the defer_sched vdev argument like so: - - .. code-block:: console - - --vdev=dlb1_event,defer_sched=on -doc/guides/eventdevs/index.rst +0
-1@@ -11,7 +11,6 @@ application through the eventdev API. :maxdepth: 2 :numbered: - dlb dlb2 dpaa dpaa2doc/guides/rel_notes/release_21_05.rst +2
-0@@ -68,6 +68,9 @@ Removed Items Also, make sure to start the actual text at the margin. ======================================================= +* Removed support for DLB V1 hardware. This is not a broad market device, + and existing customers already obtain the source code directly fromIntel.
doc/guides/rel_notes/release_21_05.rst +1
-0+ API Changes -----------drivers/event/dlb/dlb.c deleted +0
-44@@ -1,4082 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause -* Copyright(c) 2016-2020 Intel Corporation -*/ - -#include <assert.h> -#include <errno.h> -#include <nmmintrin.h> -#include <pthread.h> -#include <stdbool.h> -#include <stdint.h> -#include <stdio.h> -#include <string.h> -#include <sys/fcntl.h> -#include <sys/mman.h> -#include <unistd.h> - -#include <rte_common.h> -#include <rte_config.h> -#include <rte_cycles.h> -#include <rte_debug.h> -#include <rte_dev.h> -#include <rte_errno.h> -#include <rte_io.h> -#include <rte_kvargs.h> -#include <rte_log.h> -#include <rte_malloc.h> -#include <rte_mbuf.h> -#include <rte_power_intrinsics.h> -#include <rte_prefetch.h> -#include <rte_ring.h> -#include <rte_string_fns.h> - -#include <rte_eventdev.h> -#include <eventdev_pmd.h> - -#include "dlb_priv.h" -#include "dlb_iface.h" -#include "dlb_inline_fns.h" - -/* -* Resources exposed to eventdev. -*/ -#if (RTE_EVENT_MAX_QUEUES_PER_DEV >UINT8_MAX ) -#error "RTE_EVENT_MAX_QUEUES_PER_DEV cannot fit in member
max_event_queues"drivers/event/dlb/dlb.c deleted +0
-186-#endif -static struct rte_event_dev_info evdev_dlb_default_info = { - .driver_name ="" ,/* probe will set */ - .min_dequeue_timeout_ns =DLB_MIN_DEQUEUE_TIMEOUT_NS , - .max_dequeue_timeout_ns =DLB_MAX_DEQUEUE_TIMEOUT_NS , -#if (RTE_EVENT_MAX_QUEUES_PER_DEV < DLB_MAX_NUM_LDB_QUEUES) - .max_event_queues =RTE_EVENT_MAX_QUEUES_PER_DEV , -#else - .max_event_queues =DLB_MAX_NUM_LDB_QUEUES , -#endif - .max_event_queue_flows =DLB_MAX_NUM_FLOWS , - .max_event_queue_priority_levels =DLB_QID_PRIORITIES , - .max_event_priority_levels =DLB_QID_PRIORITIES , - .max_event_ports =DLB_MAX_NUM_LDB_PORTS , - .max_event_port_dequeue_depth =DLB_MAX_CQ_DEPTH , - .max_event_port_enqueue_depth =DLB_MAX_ENQUEUE_DEPTH , - .max_event_port_links =DLB_MAX_NUM_QIDS_PER_LDB_CQ , - .max_num_events =DLB_MAX_NUM_LDB_CREDITS , - .max_single_link_event_port_queue_pairs =DLB_MAX_NUM_DIR_PORTS , - .event_dev_cap = (RTE_EVENT_DEV_CAP_QUEUE_QOS | -RTE_EVENT_DEV_CAP_EVENT_QOS | -RTE_EVENT_DEV_CAP_BURST_MODE | -RTE_EVENT_DEV_CAP_DISTRIBUTED_SCHED | -RTE_EVENT_DEV_CAP_IMPLICIT_RELEASE_DISABLE | -RTE_EVENT_DEV_CAP_QUEUE_ALL_TYPES ), -}; - -struct process_local_port_data -dlb_port[DLB_MAX_NUM_PORTS ][NUM_DLB_PORT_TYPES ]; - -static inline uint16_t -dlb_event_enqueue_delayed (void *event_port, -const struct rte_event events[]); - -static inline uint16_t -dlb_event_enqueue_burst_delayed (void *event_port, -const struct rte_event events[], -uint16_t num); - -static inline uint16_t -dlb_event_enqueue_new_burst_delayed (void *event_port, -const struct rte_event events[], -uint16_t num); - -static inline uint16_t -dlb_event_enqueue_forward_burst_delayed (void *event_port, -const struct rte_event events[], -uint16_t num); - -static int -dlb_hw_query_resources (struct dlb_eventdev *dlb) -{ -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_hw_resource_info *dlb_info = &handle->info; -int ret; - - ret =dlb_iface_get_num_resources (handle, - &dlb->hw_rsrc_query_results); -if (ret) { -DLB_LOG_ERR ("get dlb num resources, err=%d\n" , ret); -return ret; - } - -/* Complete filling in device resource info returned to evdev app, -* overriding any default values. -* The capabilities (CAPs) were set at compile time. -*/ - - evdev_dlb_default_info.max_event_queues = - dlb->hw_rsrc_query_results.num_ldb_queues; - - evdev_dlb_default_info.max_event_ports = - dlb->hw_rsrc_query_results.num_ldb_ports; - - evdev_dlb_default_info.max_num_events = - dlb->hw_rsrc_query_results.max_contiguous_ldb_credits; - -/* Save off values used when creating the scheduling domain. */ - - handle->info.num_sched_domains = - dlb->hw_rsrc_query_results.num_sched_domains; - - handle->info.hw_rsrc_max.nb_events_limit = - dlb->hw_rsrc_query_results.max_contiguous_ldb_credits; - - handle->info.hw_rsrc_max.num_queues = - dlb->hw_rsrc_query_results.num_ldb_queues + - dlb->hw_rsrc_query_results.num_dir_ports; - - handle->info.hw_rsrc_max.num_ldb_queues = - dlb->hw_rsrc_query_results.num_ldb_queues; - - handle->info.hw_rsrc_max.num_ldb_ports = - dlb->hw_rsrc_query_results.num_ldb_ports; - - handle->info.hw_rsrc_max.num_dir_ports = - dlb->hw_rsrc_query_results.num_dir_ports; - - handle->info.hw_rsrc_max.reorder_window_size = - dlb->hw_rsrc_query_results.num_hist_list_entries; - -rte_memcpy (dlb_info, &handle->info.hw_rsrc_max,sizeof (*dlb_info)); - -return 0 ; -} - -static void -dlb_free_qe_mem (struct dlb_port *qm_port) -{ -if (qm_port ==NULL ) -return ; - -rte_free (qm_port->qe4); - qm_port->qe4 =NULL ; - -rte_free (qm_port->consume_qe); - qm_port->consume_qe =NULL ; - -rte_memzone_free (dlb_port[qm_port->id][PORT_TYPE (qm_port)].mz); - dlb_port[qm_port->id][PORT_TYPE (qm_port)].mz =NULL ; -} - -static int -dlb_init_consume_qe (struct dlb_port *qm_port,char *mz_name) -{ -struct dlb_cq_pop_qe *qe; - - qe =rte_zmalloc (mz_name, -DLB_NUM_QES_PER_CACHE_LINE * -sizeof (struct dlb_cq_pop_qe ), -RTE_CACHE_LINE_SIZE ); - -if (qe ==NULL ) { -DLB_LOG_ERR ("dlb: no memory for consume_qe\n" ); -return -ENOMEM ; - } - - qm_port->consume_qe = qe; - - qe->qe_valid =0 ; - qe->qe_frag =0 ; - qe->qe_comp =0 ; - qe->cq_token =1 ; -/* Tokens value is 0-based; i.e. '0' returns 1 token, '1' returns 2, -* and so on. -*/ - qe->tokens =0 ;/* set at run time */ - qe->meas_lat =0 ; - qe->no_dec =0 ; -/* Completion IDs are disabled */ - qe->cmp_id =0 ; - -return 0 ; -} - -static int -dlb_init_qe_mem (struct dlb_port *qm_port,char *mz_name) -{ -int ret, sz; - - sz =DLB_NUM_QES_PER_CACHE_LINE *sizeof (struct dlb_enqueue_qe ); - - qm_port->qe4 =rte_zmalloc (mz_name, sz,RTE_CACHE_LINE_SIZE ); - -if (qm_port->qe4 ==NULL ) { -DLB_LOG_ERR ("dlb: no qe4 memory\n" ); - ret = -ENOMEM ; - goto error_exit; - } - - ret =dlb_init_consume_qe (qm_port, mz_name); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: dlb_init_consume_qe ret=%d\n" , ret); - goto error_exit; - } - -return 0 ; - -error_exit: - -dlb_free_qe_mem (qm_port); - -return ret; -} - -/* Wrapper for string to int conversion. Substituted for atoi(...), which is
- * unsafe.
- */drivers/event/dlb/dlb.c deleted +0
-26-#define DLB_BASE_10 10 - -static int -dlb_string_to_int (int *result,const char *str) -{ -long ret; -char *endstr; - -if (str ==NULL || result ==NULL ) -return -EINVAL ; - - errno =0 ; - ret =strtol (str, &endstr,DLB_BASE_10 ); -if (errno) -return -errno; - -/* long int and int may be different width for some architectures */ -if (ret <INT_MIN || ret >INT_MAX || endstr == str) -return -EINVAL ; - - *result = ret; -return 0 ; -} - -static int -set_numa_node(const char *key __rte_unused, const char *value, void*opaque)
drivers/event/dlb/dlb.c deleted +0
-235-{ -int *socket_id = opaque; -int ret; - - ret =dlb_string_to_int (socket_id, value); -if (ret <0 ) -return ret; - -if (*socket_id >RTE_MAX_NUMA_NODES ) -return -EINVAL ; - -return 0 ; -} - -static int -set_max_num_events(const char *key __rte_unused, -const char *value, -void *opaque) -{ -int *max_num_events = opaque; -int ret; - -if (value ==NULL || opaque ==NULL ) { -DLB_LOG_ERR ("NULL pointer\n" ); -return -EINVAL ; - } - - ret =dlb_string_to_int (max_num_events, value); -if (ret <0 ) -return ret; - -if (*max_num_events <0 || *max_num_events >DLB_MAX_NUM_LDB_CREDITS ) { -DLB_LOG_ERR ("dlb: max_num_events must be between 0 and %d\n" , -DLB_MAX_NUM_LDB_CREDITS ); -return -EINVAL ; - } - -return 0 ; -} - -static int -set_num_dir_credits(const char *key __rte_unused, -const char *value, -void *opaque) -{ -int *num_dir_credits = opaque; -int ret; - -if (value ==NULL || opaque ==NULL ) { -DLB_LOG_ERR ("NULL pointer\n" ); -return -EINVAL ; - } - - ret =dlb_string_to_int (num_dir_credits, value); -if (ret <0 ) -return ret; - -if (*num_dir_credits <0 || - *num_dir_credits >DLB_MAX_NUM_DIR_CREDITS ) { -DLB_LOG_ERR ("dlb: num_dir_credits must be between 0 and %d\n" , -DLB_MAX_NUM_DIR_CREDITS ); -return -EINVAL ; - } -return 0 ; -} - -/* VDEV-only notes: -* This function first unmaps all memory mappings and closes the -* domain's file descriptor, which causes the driver to reset the -* scheduling domain. Once that completes (when close() returns), we -* can safely free the dynamically allocated memory used by the -* scheduling domain. -* -* PF-only notes: -* We will maintain a use count and use that to determine when -* a reset is required. In PF mode, we never mmap, or munmap -* device memory, and we own the entire physical PCI device. -*/ - -static void -dlb_hw_reset_sched_domain (const struct rte_eventdev *dev,bool reconfig) -{ -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); -enum dlb_configuration_state config_state; -int i, j; - -/* Close and reset the domain */ -dlb_iface_domain_close (dlb); - -/* Free all dynamically allocated port memory */ -for (i =0 ; i < dlb->num_ports; i++) -dlb_free_qe_mem (&dlb->ev_ports[i].qm_port); - -/* If reconfiguring, mark the device's queues and ports as "previously -* configured." If the user does not reconfigure them, the PMD will -* reapply their previous configuration when the device is started. -*/ - config_state = (reconfig) ?DLB_PREV_CONFIGURED :DLB_NOT_CONFIGURED ; - -for (i =0 ; i < dlb->num_ports; i++) { - dlb->ev_ports[i].qm_port.config_state = config_state; -/* Reset setup_done so ports can be reconfigured */ - dlb->ev_ports[i].setup_done = false; -for (j =0 ; j <DLB_MAX_NUM_QIDS_PER_LDB_CQ ; j++) - dlb->ev_ports[i].link[j].mapped = false; - } - -for (i =0 ; i < dlb->num_queues; i++) - dlb->ev_queues[i].qm_queue.config_state = config_state; - -for (i =0 ; i <DLB_MAX_NUM_QUEUES ; i++) - dlb->ev_queues[i].setup_done = false; - - dlb->num_ports =0 ; - dlb->num_ldb_ports =0 ; - dlb->num_dir_ports =0 ; - dlb->num_queues =0 ; - dlb->num_ldb_queues =0 ; - dlb->num_dir_queues =0 ; - dlb->configured = false; -} - -static int -dlb_ldb_credit_pool_create (struct dlb_hw_dev *handle) -{ -struct dlb_create_ldb_pool_args cfg; -struct dlb_cmd_response response; -int ret; - -if (handle ==NULL ) -return -EINVAL ; - -if (!handle->cfg.resources.num_ldb_credits) { - handle->cfg.ldb_credit_pool_id =0 ; - handle->cfg.num_ldb_credits =0 ; -return 0 ; - } - - cfg.response = (uintptr_t )&response; - cfg.num_ldb_credits = handle->cfg.resources.num_ldb_credits; - - ret =dlb_iface_ldb_credit_pool_create (handle, - &cfg); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: ldb_credit_pool_create ret=%d (driver status: %s)\n" , - ret, dlb_error_strings[response.status]); - } - - handle->cfg.ldb_credit_pool_id = response.id; - handle->cfg.num_ldb_credits = cfg.num_ldb_credits; - -return ret; -} - -static int -dlb_dir_credit_pool_create (struct dlb_hw_dev *handle) -{ -struct dlb_create_dir_pool_args cfg; -struct dlb_cmd_response response; -int ret; - -if (handle ==NULL ) -return -EINVAL ; - -if (!handle->cfg.resources.num_dir_credits) { - handle->cfg.dir_credit_pool_id =0 ; - handle->cfg.num_dir_credits =0 ; -return 0 ; - } - - cfg.response = (uintptr_t )&response; - cfg.num_dir_credits = handle->cfg.resources.num_dir_credits; - - ret =dlb_iface_dir_credit_pool_create (handle, &cfg); -if (ret <0 ) -DLB_LOG_ERR ("dlb: dir_credit_pool_create ret=%d (driver status: %s)\n" , - ret, dlb_error_strings[response.status]); - - handle->cfg.dir_credit_pool_id = response.id; - handle->cfg.num_dir_credits = cfg.num_dir_credits; - -return ret; -} - -static int -dlb_hw_create_sched_domain (struct dlb_hw_dev *handle, -struct dlb_eventdev *dlb, -const struct dlb_hw_rsrcs *resources_asked) -{ -int ret =0 ; -struct dlb_create_sched_domain_args *config_params; -struct dlb_cmd_response response; - -if (resources_asked ==NULL ) { -DLB_LOG_ERR ("dlb: dlb_create NULL parameter\n" ); - ret =EINVAL ; - goto error_exit; - } - -/* Map generic qm resources to dlb resources */ - config_params = &handle->cfg.resources; - - config_params->response = (uintptr_t )&response; - -/* DIR ports and queues */ - - config_params->num_dir_ports = - resources_asked->num_dir_ports; - - config_params->num_dir_credits = - resources_asked->num_dir_credits; - -/* LDB ports and queues */ - - config_params->num_ldb_queues = - resources_asked->num_ldb_queues; - - config_params->num_ldb_ports = - resources_asked->num_ldb_ports; - - config_params->num_ldb_credits = - resources_asked->num_ldb_credits; - - config_params->num_atomic_inflights = - dlb->num_atm_inflights_per_queue * - config_params->num_ldb_queues; - - config_params->num_hist_list_entries = config_params->num_ldb_ports * -DLB_NUM_HIST_LIST_ENTRIES_PER_LDB_PORT ; - -/* dlb limited to 1 credit pool per queue type */ - config_params->num_ldb_credit_pools =1 ; - config_params->num_dir_credit_pools =1 ; - - DLB_LOG_DBG("sched domain create - ldb_qs=%d, ldb_ports=%d, dir_ports=%d,atomic_inflights=%d, hist_list_entries=%d, ldb_credits=%d, dir_credits=%d, ldb_cred_pools=%d, dir-credit_pools=%d\n",
drivers/event/dlb/dlb.c deleted +0
-15- config_params->num_ldb_queues, - config_params->num_ldb_ports, - config_params->num_dir_ports, - config_params->num_atomic_inflights, - config_params->num_hist_list_entries, - config_params->num_ldb_credits, - config_params->num_dir_credits, - config_params->num_ldb_credit_pools, - config_params->num_dir_credit_pools); - -/* Configure the QM */ - - ret =dlb_iface_sched_domain_create (handle, config_params); -if (ret <0 ) { - DLB_LOG_ERR("dlb: domain create failed, device_id = %d, (driver ret = %d,extra status: %s)\n",
drivers/event/dlb/dlb.c deleted +0
-90- handle->device_id, - ret, - dlb_error_strings[response.status]); - goto error_exit; - } - - handle->domain_id = response.id; - handle->domain_id_valid =1 ; - - config_params->response =0 ; - - ret =dlb_ldb_credit_pool_create (handle); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: create ldb credit pool failed\n" ); - goto error_exit2; - } - - ret =dlb_dir_credit_pool_create (handle); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: create dir credit pool failed\n" ); - goto error_exit2; - } - - handle->cfg.configured = true; - -return 0 ; - -error_exit2: -dlb_iface_domain_close (dlb); - -error_exit: -return ret; -} - -/* End HW specific */ -static void -dlb_eventdev_info_get (struct rte_eventdev *dev, -struct rte_event_dev_info *dev_info) -{ -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); -int ret; - - ret =dlb_hw_query_resources (dlb); -if (ret) { -const struct rte_eventdev_data *data = dev->data; - -DLB_LOG_ERR ("get resources err=%d, devid=%d\n" , - ret, data->dev_id); -/* fn is void, so fall through and return values set up in -* probe -*/ - } - -/* Add num resources currently owned by this domain. -* These would become available if the scheduling domain were reset due -* to the application recalling eventdev_configure to *reconfigure* the -* domain. -*/ - evdev_dlb_default_info.max_event_ports += dlb->num_ldb_ports; - evdev_dlb_default_info.max_event_queues += dlb->num_ldb_queues; - evdev_dlb_default_info.max_num_events += dlb->num_ldb_credits; - -/* In DLB A-stepping hardware, applications are limited to 128 -* configured ports (load-balanced or directed). The reported number of -* available ports must reflect this. -*/ -if (dlb->revision <DLB_REV_B0 ) { -int used_ports; - - used_ports =DLB_MAX_NUM_LDB_PORTS +DLB_MAX_NUM_DIR_PORTS - - dlb->hw_rsrc_query_results.num_ldb_ports - - dlb->hw_rsrc_query_results.num_dir_ports; - - evdev_dlb_default_info.max_event_ports = -RTE_MIN (evdev_dlb_default_info.max_event_ports, -128 - used_ports); - } - - evdev_dlb_default_info.max_event_queues = -RTE_MIN (evdev_dlb_default_info.max_event_queues, -RTE_EVENT_MAX_QUEUES_PER_DEV ); - - evdev_dlb_default_info.max_num_events = -RTE_MIN (evdev_dlb_default_info.max_num_events, - dlb->max_num_events_override); - - *dev_info = evdev_dlb_default_info; -} - -/* Note: 1 QM instance per QM device, QM instance/device == event device */
drivers/event/dlb/dlb.c deleted +0
-26-static int -dlb_eventdev_configure (const struct rte_eventdev *dev) -{ -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_hw_rsrcs *rsrcs = &handle->info.hw_rsrc_max; -const struct rte_eventdev_data *data = dev->data; -const struct rte_event_dev_config *config = &data->dev_conf; -int ret; - -/* If this eventdev is already configured, we must release the current -* scheduling domain before attempting to configure a new one. -*/ -if (dlb->configured) { -dlb_hw_reset_sched_domain (dev, true); - - ret =dlb_hw_query_resources (dlb); -if (ret) { -DLB_LOG_ERR ("get resources err=%d, devid=%d\n" , - ret, data->dev_id); -return ret; - } - } - -if (config->nb_event_queues > rsrcs->num_queues) { - DLB_LOG_ERR("nb_event_queues parameter (%d) exceeds the QM device'scapabilities (%d).\n",
drivers/event/dlb/dlb.c deleted +0
-7- config->nb_event_queues, - rsrcs->num_queues); -return -EINVAL ; - } -if (config->nb_event_ports > (rsrcs->num_ldb_ports - + rsrcs->num_dir_ports)) { - DLB_LOG_ERR("nb_event_ports parameter (%d) exceeds the QM device'scapabilities (%d).\n",
drivers/event/dlb/dlb.c deleted +0
-6- config->nb_event_ports, - (rsrcs->num_ldb_ports + rsrcs->num_dir_ports)); -return -EINVAL ; - } -if (config->nb_events_limit > rsrcs->nb_events_limit) { - DLB_LOG_ERR("nb_events_limit parameter (%d) exceeds the QM device'scapabilities (%d).\n",
drivers/event/dlb/dlb.c deleted +0
-23- config->nb_events_limit, - rsrcs->nb_events_limit); -return -EINVAL ; - } - -if (config->event_dev_cfg &RTE_EVENT_DEV_CFG_PER_DEQUEUE_TIMEOUT ) - dlb->global_dequeue_wait = false; -else { -uint32_t timeout32; - - dlb->global_dequeue_wait = true; - - timeout32 = config->dequeue_timeout_ns; - - dlb->global_dequeue_wait_ticks = - timeout32 * (rte_get_timer_hz () /1E9 ); - } - -/* Does this platform support umonitor/umwait? */ -if (rte_cpu_get_flag_enabled (RTE_CPUFLAG_WAITPKG )) { -if (RTE_LIBRTE_PMD_DLB_UMWAIT_CTL_STATE !=0 && -RTE_LIBRTE_PMD_DLB_UMWAIT_CTL_STATE !=1 ) { - DLB_LOG_ERR("invalid value (%d) for RTE_LIBRTE_PMD_DLB_UMWAIT_CTL_STATEmust be 0 or 1.\n",
drivers/event/dlb/dlb.c deleted +0
-306- RTE_LIBRTE_PMD_DLB_UMWAIT_CTL_STATE); -return -EINVAL ; - } - dlb->umwait_allowed = true; - } - - rsrcs->num_dir_ports = config->nb_single_link_event_port_queues; - rsrcs->num_ldb_ports = config->nb_event_ports - rsrcs->num_dir_ports; -/* 1 dir queue per dir port */ - rsrcs->num_ldb_queues = config->nb_event_queues - rsrcs->num_dir_ports; - -/* Scale down nb_events_limit by 4 for directed credits, since there -* are 4x as many load-balanced credits. -*/ - rsrcs->num_ldb_credits =0 ; - rsrcs->num_dir_credits =0 ; - -if (rsrcs->num_ldb_queues) - rsrcs->num_ldb_credits = config->nb_events_limit; -if (rsrcs->num_dir_ports) - rsrcs->num_dir_credits = config->nb_events_limit /4 ; -if (dlb->num_dir_credits_override !=-1 ) - rsrcs->num_dir_credits = dlb->num_dir_credits_override; - -if (dlb_hw_create_sched_domain (handle, dlb, rsrcs) <0 ) { -DLB_LOG_ERR ("dlb_hw_create_sched_domain failed\n" ); -return -ENODEV ; - } - - dlb->new_event_limit = config->nb_events_limit; -__atomic_store_n (&dlb->inflights,0 , __ATOMIC_SEQ_CST); - -/* Save number of ports/queues for this event dev */ - dlb->num_ports = config->nb_event_ports; - dlb->num_queues = config->nb_event_queues; - dlb->num_dir_ports = rsrcs->num_dir_ports; - dlb->num_ldb_ports = dlb->num_ports - dlb->num_dir_ports; - dlb->num_ldb_queues = dlb->num_queues - dlb->num_dir_ports; - dlb->num_dir_queues = dlb->num_dir_ports; - dlb->num_ldb_credits = rsrcs->num_ldb_credits; - dlb->num_dir_credits = rsrcs->num_dir_credits; - - dlb->configured = true; - -return 0 ; -} - -static int16_t -dlb_hw_unmap_ldb_qid_from_port (struct dlb_hw_dev *handle, -uint32_t qm_port_id, -uint16_t qm_qid) -{ -struct dlb_unmap_qid_args cfg; -struct dlb_cmd_response response; -int32_t ret; - -if (handle ==NULL ) -return -EINVAL ; - - cfg.response = (uintptr_t )&response; - cfg.port_id = qm_port_id; - cfg.qid = qm_qid; - - ret =dlb_iface_unmap_qid (handle, &cfg); -if (ret <0 ) -DLB_LOG_ERR ("dlb: unmap qid error, ret=%d (driver status: %s)\n" , - ret, dlb_error_strings[response.status]); - -return ret; -} - -static int -dlb_event_queue_detach_ldb (struct dlb_eventdev *dlb, -struct dlb_eventdev_port *ev_port, -struct dlb_eventdev_queue *ev_queue) -{ -int ret, i; - -/* Don't unlink until start time. */ -if (dlb->run_state ==DLB_RUN_STATE_STOPPED ) -return 0 ; - -for (i =0 ; i <DLB_MAX_NUM_QIDS_PER_LDB_CQ ; i++) { -if (ev_port->link[i].valid && - ev_port->link[i].queue_id == ev_queue->id) -break ;/* found */ - } - -/* This is expected with eventdev API! -* It blindly attempts to unmap all queues. -*/ -if (i ==DLB_MAX_NUM_QIDS_PER_LDB_CQ ) { -DLB_LOG_DBG ("dlb: ignoring LB QID %d not mapped for qm_port %d.\n" , - ev_queue->qm_queue.id, - ev_port->qm_port.id); -return 0 ; - } - - ret =dlb_hw_unmap_ldb_qid_from_port (&dlb->qm_instance, - ev_port->qm_port.id, - ev_queue->qm_queue.id); -if (!ret) - ev_port->link[i].mapped = false; - -return ret; -} - -static int -dlb_eventdev_port_unlink (struct rte_eventdev *dev,void *event_port, -uint8_t queues[],uint16_t nb_unlinks) -{ -struct dlb_eventdev_port *ev_port = event_port; -struct dlb_eventdev *dlb; -int i; - -RTE_SET_USED (dev); - -if (!ev_port->setup_done) { -DLB_LOG_ERR ("dlb: evport %d is not configured\n" , - ev_port->id); - rte_errno = -EINVAL ; -return 0 ; - } - -if (queues ==NULL || nb_unlinks ==0 ) { -DLB_LOG_DBG ("dlb: queues is NULL or nb_unlinks is 0\n" ); -return 0 ;/* Ignore and return success */ - } - -if (ev_port->qm_port.is_directed) { -DLB_LOG_DBG ("dlb: ignore unlink from dir port %d\n" , - ev_port->id); - rte_errno =0 ; -return nb_unlinks;/* as if success */ - } - - dlb = ev_port->dlb; - -for (i =0 ; i < nb_unlinks; i++) { -struct dlb_eventdev_queue *ev_queue; -int ret, j; - -if (queues[i] >= dlb->num_queues) { -DLB_LOG_ERR ("dlb: invalid queue id %d\n" , queues[i]); - rte_errno = -EINVAL ; -return i;/* return index of offending queue */ - } - - ev_queue = &dlb->ev_queues[queues[i]]; - -/* Does a link exist? */ -for (j =0 ; j <DLB_MAX_NUM_QIDS_PER_LDB_CQ ; j++) -if (ev_port->link[j].queue_id == queues[i] && - ev_port->link[j].valid) -break ; - -if (j ==DLB_MAX_NUM_QIDS_PER_LDB_CQ ) -continue ; - - ret =dlb_event_queue_detach_ldb (dlb, ev_port, ev_queue); -if (ret) { -DLB_LOG_ERR ("unlink err=%d for port %d queue %d\n" , - ret, ev_port->id, queues[i]); - rte_errno = -ENOENT ; -return i;/* return index of offending queue */ - } - - ev_port->link[j].valid = false; - ev_port->num_links--; - ev_queue->num_links--; - } - -return nb_unlinks; -} - -static int -dlb_eventdev_port_unlinks_in_progress (struct rte_eventdev *dev, -void *event_port) -{ -struct dlb_eventdev_port *ev_port = event_port; -struct dlb_eventdev *dlb; -struct dlb_hw_dev *handle; -struct dlb_pending_port_unmaps_args cfg; -struct dlb_cmd_response response; -int ret; - -RTE_SET_USED (dev); - -if (!ev_port->setup_done) { -DLB_LOG_ERR ("dlb: evport %d is not configured\n" , - ev_port->id); - rte_errno = -EINVAL ; -return 0 ; - } - - cfg.port_id = ev_port->qm_port.id; - cfg.response = (uintptr_t )&response; - dlb = ev_port->dlb; - handle = &dlb->qm_instance; - ret =dlb_iface_pending_port_unmaps (handle, &cfg); - -if (ret <0 ) { -DLB_LOG_ERR ("dlb: num_unlinks_in_progress ret=%d (driver status: %s)\n" , - ret, dlb_error_strings[response.status]); -return ret; - } - -return response.id; -} - -static void -dlb_eventdev_port_default_conf_get (struct rte_eventdev *dev, -uint8_t port_id, -struct rte_event_port_conf *port_conf) -{ -RTE_SET_USED (port_id); -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); - - port_conf->new_event_threshold = dlb->new_event_limit; - port_conf->dequeue_depth =32 ; - port_conf->enqueue_depth =DLB_MAX_ENQUEUE_DEPTH ; - port_conf->event_port_cfg =0 ; -} - -static void -dlb_eventdev_queue_default_conf_get (struct rte_eventdev *dev, -uint8_t queue_id, -struct rte_event_queue_conf *queue_conf) -{ -RTE_SET_USED (dev); -RTE_SET_USED (queue_id); - queue_conf->nb_atomic_flows =1024 ; - queue_conf->nb_atomic_order_sequences =32 ; - queue_conf->event_queue_cfg =0 ; - queue_conf->priority =0 ; -} - -static int -dlb_hw_create_ldb_port (struct dlb_eventdev *dlb, -struct dlb_eventdev_port *ev_port, -uint32_t dequeue_depth, -uint32_t cq_depth, -uint32_t enqueue_depth, -uint16_t rsvd_tokens, -bool use_rsvd_token_scheme) -{ -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_create_ldb_port_args cfg = {0 }; -struct dlb_cmd_response response = {0 }; -int ret; -struct dlb_port *qm_port =NULL ; -char mz_name[RTE_MEMZONE_NAMESIZE ]; -uint32_t qm_port_id; - -if (handle ==NULL ) -return -EINVAL ; - -if (cq_depth <DLB_MIN_LDB_CQ_DEPTH ) { -DLB_LOG_ERR ("dlb: invalid cq_depth, must be %d-%d\n" , -DLB_MIN_LDB_CQ_DEPTH ,DLB_MAX_INPUT_QUEUE_DEPTH ); -return -EINVAL ; - } - -if (enqueue_depth <DLB_MIN_ENQUEUE_DEPTH ) { -DLB_LOG_ERR ("dlb: invalid enqueue_depth, must be at least %d\n" , -DLB_MIN_ENQUEUE_DEPTH ); -return -EINVAL ; - } - -rte_spinlock_lock (&handle->resource_lock); - - cfg.response = (uintptr_t )&response; - -/* We round up to the next power of 2 if necessary */ - cfg.cq_depth =rte_align32pow2 (cq_depth); - cfg.cq_depth_threshold = rsvd_tokens; - - cfg.cq_history_list_size =DLB_NUM_HIST_LIST_ENTRIES_PER_LDB_PORT ; - -/* User controls the LDB high watermark via enqueue depth. The DIR high -* watermark is equal, unless the directed credit pool is too small. -*/ - cfg.ldb_credit_high_watermark = enqueue_depth; - -/* If there are no directed ports, the kernel driver will ignore this -* port's directed credit settings. Don't use enqueue_depth if it would -* require more directed credits than are available. -*/ - cfg.dir_credit_high_watermark = -RTE_MIN (enqueue_depth, - handle->cfg.num_dir_credits / dlb->num_ports); - - cfg.ldb_credit_quantum = cfg.ldb_credit_high_watermark /2 ; - cfg.ldb_credit_low_watermark =RTE_MIN (16 , cfg.ldb_credit_quantum); - - cfg.dir_credit_quantum = cfg.dir_credit_high_watermark /2 ; - cfg.dir_credit_low_watermark =RTE_MIN (16 , cfg.dir_credit_quantum); - -/* Per QM values */ - - cfg.ldb_credit_pool_id = handle->cfg.ldb_credit_pool_id; - cfg.dir_credit_pool_id = handle->cfg.dir_credit_pool_id; - - ret =dlb_iface_ldb_port_create (handle, &cfg, dlb->poll_mode); -if (ret <0 ) { - DLB_LOG_ERR("dlb: dlb_ldb_port_create error, ret=%d (driver status:%s)\n",
drivers/event/dlb/dlb.c deleted +0
-98- ret, dlb_error_strings[response.status]); - goto error_exit; - } - - qm_port_id = response.id; - -DLB_LOG_DBG ("dlb: ev_port %d uses qm LB port %d <<<<<\n" , - ev_port->id, qm_port_id); - - qm_port = &ev_port->qm_port; - qm_port->ev_port = ev_port;/* back ptr */ - qm_port->dlb = dlb;/* back ptr */ - -/* -* Allocate and init local qe struct(s). -* Note: MOVDIR64 requires the enqueue QE (qe4) to be aligned. -*/ - -snprintf (mz_name,sizeof (mz_name),"ldb_port%d" , - ev_port->id); - - ret =dlb_init_qe_mem (qm_port, mz_name); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: init_qe_mem failed, ret=%d\n" , ret); - goto error_exit; - } - - qm_port->pp_mmio_base =DLB_LDB_PP_BASE +PAGE_SIZE * qm_port_id; - qm_port->id = qm_port_id; - -/* The credit window is one high water mark of QEs */ - qm_port->ldb_pushcount_at_credit_expiry =0 ; - qm_port->cached_ldb_credits = cfg.ldb_credit_high_watermark; -/* The credit window is one high water mark of QEs */ - qm_port->dir_pushcount_at_credit_expiry =0 ; - qm_port->cached_dir_credits = cfg.dir_credit_high_watermark; -/* CQs with depth < 8 use an 8-entry queue, but withhold credits so -* the effective depth is smaller. -*/ - qm_port->cq_depth = cfg.cq_depth <=8 ?8 : cfg.cq_depth; - qm_port->cq_idx =0 ; - qm_port->cq_idx_unmasked =0 ; -if (dlb->poll_mode ==DLB_CQ_POLL_MODE_SPARSE ) - qm_port->cq_depth_mask = (qm_port->cq_depth *4 ) -1 ; -else - qm_port->cq_depth_mask = qm_port->cq_depth -1 ; - - qm_port->gen_bit_shift =__builtin_popcount (qm_port->cq_depth_mask); -/* starting value of gen bit - it toggles at wrap time */ - qm_port->gen_bit =1 ; - - qm_port->use_rsvd_token_scheme = use_rsvd_token_scheme; - qm_port->cq_rsvd_token_deficit = rsvd_tokens; - qm_port->int_armed = false; - -/* Save off for later use in info and lookup APIs. */ - qm_port->qid_mappings = &dlb->qm_ldb_to_ev_queue_id[0 ]; - - qm_port->dequeue_depth = dequeue_depth; - -/* When using the reserved token scheme, token_pop_thresh is -* initially 2 * dequeue_depth. Once the tokens are reserved, -* the enqueue code re-assigns it to dequeue_depth. -*/ - qm_port->token_pop_thresh = cq_depth; - -/* When the deferred scheduling vdev arg is selected, use deferred pop -* for all single-entry CQs. -*/ -if (cfg.cq_depth ==1 || (cfg.cq_depth ==2 && use_rsvd_token_scheme)) { -if (dlb->defer_sched) - qm_port->token_pop_mode =DEFERRED_POP ; - } - -/* The default enqueue functions do not include delayed-pop support for -* performance reasons. -*/ -if (qm_port->token_pop_mode ==DELAYED_POP ) { - dlb->event_dev->enqueue = dlb_event_enqueue_delayed; - dlb->event_dev->enqueue_burst = - dlb_event_enqueue_burst_delayed; - dlb->event_dev->enqueue_new_burst = - dlb_event_enqueue_new_burst_delayed; - dlb->event_dev->enqueue_forward_burst = - dlb_event_enqueue_forward_burst_delayed; - } - - qm_port->owed_tokens =0 ; - qm_port->issued_releases =0 ; - -/* update state */ - qm_port->state =PORT_STARTED ;/* enabled at create time */ - qm_port->config_state =DLB_CONFIGURED ; - - qm_port->dir_credits = cfg.dir_credit_high_watermark; - qm_port->ldb_credits = cfg.ldb_credit_high_watermark; - - DLB_LOG_DBG("dlb: created ldb port %d, depth = %d, ldb credits=%d, dircredits=%d\n",
drivers/event/dlb/dlb.c deleted +0
-91- qm_port_id, - cq_depth, - qm_port->ldb_credits, - qm_port->dir_credits); - -rte_spinlock_unlock (&handle->resource_lock); - -return 0 ; - -error_exit: -if (qm_port) { -dlb_free_qe_mem (qm_port); - qm_port->pp_mmio_base =0 ; - } - -rte_spinlock_unlock (&handle->resource_lock); - -DLB_LOG_ERR ("dlb: create ldb port failed!\n" ); - -return ret; -} - -static int -dlb_hw_create_dir_port (struct dlb_eventdev *dlb, -struct dlb_eventdev_port *ev_port, -uint32_t dequeue_depth, -uint32_t cq_depth, -uint32_t enqueue_depth, -uint16_t rsvd_tokens, -bool use_rsvd_token_scheme) -{ -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_create_dir_port_args cfg = {0 }; -struct dlb_cmd_response response = {0 }; -int ret; -struct dlb_port *qm_port =NULL ; -char mz_name[RTE_MEMZONE_NAMESIZE ]; -uint32_t qm_port_id; - -if (dlb ==NULL || handle ==NULL ) -return -EINVAL ; - -if (cq_depth <DLB_MIN_DIR_CQ_DEPTH ) { -DLB_LOG_ERR ("dlb: invalid cq_depth, must be at least %d\n" , -DLB_MIN_DIR_CQ_DEPTH ); -return -EINVAL ; - } - -if (enqueue_depth <DLB_MIN_ENQUEUE_DEPTH ) { -DLB_LOG_ERR ("dlb: invalid enqueue_depth, must be at least %d\n" , -DLB_MIN_ENQUEUE_DEPTH ); -return -EINVAL ; - } - -rte_spinlock_lock (&handle->resource_lock); - -/* Directed queues are configured at link time. */ - cfg.queue_id =-1 ; - - cfg.response = (uintptr_t )&response; - -/* We round up to the next power of 2 if necessary */ - cfg.cq_depth =rte_align32pow2 (cq_depth); - cfg.cq_depth_threshold = rsvd_tokens; - -/* User controls the LDB high watermark via enqueue depth. The DIR high -* watermark is equal, unless the directed credit pool is too small. -*/ - cfg.ldb_credit_high_watermark = enqueue_depth; - -/* Don't use enqueue_depth if it would require more directed credits -* than are available. -*/ - cfg.dir_credit_high_watermark = -RTE_MIN (enqueue_depth, - handle->cfg.num_dir_credits / dlb->num_ports); - - cfg.ldb_credit_quantum = cfg.ldb_credit_high_watermark /2 ; - cfg.ldb_credit_low_watermark =RTE_MIN (16 , cfg.ldb_credit_quantum); - - cfg.dir_credit_quantum = cfg.dir_credit_high_watermark /2 ; - cfg.dir_credit_low_watermark =RTE_MIN (16 , cfg.dir_credit_quantum); - -/* Per QM values */ - - cfg.ldb_credit_pool_id = handle->cfg.ldb_credit_pool_id; - cfg.dir_credit_pool_id = handle->cfg.dir_credit_pool_id; - - ret =dlb_iface_dir_port_create (handle, &cfg, dlb->poll_mode); -if (ret <0 ) { - DLB_LOG_ERR("dlb: dlb_dir_port_create error, ret=%d (driver status:%s)\n",
drivers/event/dlb/dlb.c deleted +0
-129- ret, dlb_error_strings[response.status]); - goto error_exit; - } - - qm_port_id = response.id; - -DLB_LOG_DBG ("dlb: ev_port %d uses qm DIR port %d <<<<<\n" , - ev_port->id, qm_port_id); - - qm_port = &ev_port->qm_port; - qm_port->ev_port = ev_port;/* back ptr */ - qm_port->dlb = dlb;/* back ptr */ - -/* -* Init local qe struct(s). -* Note: MOVDIR64 requires the enqueue QE to be aligned -*/ - -snprintf (mz_name,sizeof (mz_name),"dir_port%d" , - ev_port->id); - - ret =dlb_init_qe_mem (qm_port, mz_name); - -if (ret <0 ) { -DLB_LOG_ERR ("dlb: init_qe_mem failed, ret=%d\n" , ret); - goto error_exit; - } - - qm_port->pp_mmio_base =DLB_DIR_PP_BASE +PAGE_SIZE * qm_port_id; - qm_port->id = qm_port_id; - -/* The credit window is one high water mark of QEs */ - qm_port->ldb_pushcount_at_credit_expiry =0 ; - qm_port->cached_ldb_credits = cfg.ldb_credit_high_watermark; -/* The credit window is one high water mark of QEs */ - qm_port->dir_pushcount_at_credit_expiry =0 ; - qm_port->cached_dir_credits = cfg.dir_credit_high_watermark; - qm_port->cq_depth = cfg.cq_depth; - qm_port->cq_idx =0 ; - qm_port->cq_idx_unmasked =0 ; -if (dlb->poll_mode ==DLB_CQ_POLL_MODE_SPARSE ) - qm_port->cq_depth_mask = (cfg.cq_depth *4 ) -1 ; -else - qm_port->cq_depth_mask = cfg.cq_depth -1 ; - - qm_port->gen_bit_shift =__builtin_popcount (qm_port->cq_depth_mask); -/* starting value of gen bit - it toggles at wrap time */ - qm_port->gen_bit =1 ; - - qm_port->use_rsvd_token_scheme = use_rsvd_token_scheme; - qm_port->cq_rsvd_token_deficit = rsvd_tokens; - qm_port->int_armed = false; - -/* Save off for later use in info and lookup APIs. */ - qm_port->qid_mappings = &dlb->qm_dir_to_ev_queue_id[0 ]; - - qm_port->dequeue_depth = dequeue_depth; - -/* Directed ports are auto-pop, by default. */ - qm_port->token_pop_mode =AUTO_POP ; - qm_port->owed_tokens =0 ; - qm_port->issued_releases =0 ; - -/* update state */ - qm_port->state =PORT_STARTED ;/* enabled at create time */ - qm_port->config_state =DLB_CONFIGURED ; - - qm_port->dir_credits = cfg.dir_credit_high_watermark; - qm_port->ldb_credits = cfg.ldb_credit_high_watermark; - -DLB_LOG_DBG ("dlb: created dir port %d, depth = %d cr=%d,%d\n" , - qm_port_id, - cq_depth, - cfg.dir_credit_high_watermark, - cfg.ldb_credit_high_watermark); - -rte_spinlock_unlock (&handle->resource_lock); - -return 0 ; - -error_exit: -if (qm_port) { - qm_port->pp_mmio_base =0 ; -dlb_free_qe_mem (qm_port); - } - -rte_spinlock_unlock (&handle->resource_lock); - -DLB_LOG_ERR ("dlb: create dir port failed!\n" ); - -return ret; -} - -static int32_t -dlb_hw_create_ldb_queue (struct dlb_eventdev *dlb, -struct dlb_queue *queue, -const struct rte_event_queue_conf *evq_conf) -{ -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_create_ldb_queue_args cfg; -struct dlb_cmd_response response; -int32_t ret; -uint32_t qm_qid; -int sched_type =-1 ; - -if (evq_conf ==NULL ) -return -EINVAL ; - -if (evq_conf->event_queue_cfg &RTE_EVENT_QUEUE_CFG_ALL_TYPES ) { -if (evq_conf->nb_atomic_order_sequences !=0 ) - sched_type =RTE_SCHED_TYPE_ORDERED ; -else - sched_type =RTE_SCHED_TYPE_PARALLEL ; - }else - sched_type = evq_conf->schedule_type; - - cfg.response = (uintptr_t )&response; - cfg.num_atomic_inflights = dlb->num_atm_inflights_per_queue; - cfg.num_sequence_numbers = evq_conf->nb_atomic_order_sequences; - cfg.num_qid_inflights = evq_conf->nb_atomic_order_sequences; - -if (sched_type !=RTE_SCHED_TYPE_ORDERED ) { - cfg.num_sequence_numbers =0 ; - cfg.num_qid_inflights =DLB_DEF_UNORDERED_QID_INFLIGHTS ; - } - - ret =dlb_iface_ldb_queue_create (handle, &cfg); -if (ret <0 ) { - DLB_LOG_ERR("dlb: create LB event queue error, ret=%d (driver status:%s)\n",
drivers/event/dlb/dlb.c deleted +0
-14- ret, dlb_error_strings[response.status]); -return -EINVAL ; - } - - qm_qid = response.id; - -/* Save off queue config for debug, resource lookups, and reconfig */ - queue->num_qid_inflights = cfg.num_qid_inflights; - queue->num_atm_inflights = cfg.num_atomic_inflights; - - queue->sched_type = sched_type; - queue->config_state =DLB_CONFIGURED ; - - DLB_LOG_DBG("Created LB event queue %d, nb_inflights=%d, nb_seq=%d, qidinflights=%d\n",
drivers/event/dlb/dlb.c deleted +0
-73- qm_qid, - cfg.num_atomic_inflights, - cfg.num_sequence_numbers, - cfg.num_qid_inflights); - -return qm_qid; -} - -static int32_t -dlb_get_sn_allocation (struct dlb_eventdev *dlb,int group) -{ -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_get_sn_allocation_args cfg; -struct dlb_cmd_response response; -int ret; - - cfg.group = group; - cfg.response = (uintptr_t )&response; - - ret =dlb_iface_get_sn_allocation (handle, &cfg); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: get_sn_allocation ret=%d (driver status: %s)\n" , - ret, dlb_error_strings[response.status]); -return ret; - } - -return response.id; -} - -static int -dlb_set_sn_allocation (struct dlb_eventdev *dlb,int group,int num) -{ -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_set_sn_allocation_args cfg; -struct dlb_cmd_response response; -int ret; - - cfg.num = num; - cfg.group = group; - cfg.response = (uintptr_t )&response; - - ret =dlb_iface_set_sn_allocation (handle, &cfg); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: set_sn_allocation ret=%d (driver status: %s)\n" , - ret, dlb_error_strings[response.status]); -return ret; - } - -return ret; -} - -static int32_t -dlb_get_sn_occupancy (struct dlb_eventdev *dlb,int group) -{ -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_get_sn_occupancy_args cfg; -struct dlb_cmd_response response; -int ret; - - cfg.group = group; - cfg.response = (uintptr_t )&response; - - ret =dlb_iface_get_sn_occupancy (handle, &cfg); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: get_sn_occupancy ret=%d (driver status: %s)\n" , - ret, dlb_error_strings[response.status]); -return ret; - } - -return response.id; -} - -/* Query the current sequence number allocations and, if they conflict with the
- * requested LDB queue configuration, attempt to re-allocate sequence numbers.
- * This is best-effort; if it fails, the PMD will attempt to configure the
- * load-balanced queue and return an error.
- */drivers/event/dlb/dlb.c deleted +0
-42-static void -dlb_program_sn_allocation (struct dlb_eventdev *dlb, -const struct rte_event_queue_conf *queue_conf) -{ -int grp_occupancy[DLB_NUM_SN_GROUPS ]; -int grp_alloc[DLB_NUM_SN_GROUPS ]; -int i, sequence_numbers; - - sequence_numbers = (int )queue_conf->nb_atomic_order_sequences; - -for (i =0 ; i <DLB_NUM_SN_GROUPS ; i++) { -int total_slots; - - grp_alloc[i] =dlb_get_sn_allocation (dlb, i); -if (grp_alloc[i] <0 ) -return ; - - total_slots =DLB_MAX_LDB_SN_ALLOC / grp_alloc[i]; - - grp_occupancy[i] =dlb_get_sn_occupancy (dlb, i); -if (grp_occupancy[i] <0 ) -return ; - -/* DLB has at least one available slot for the requested -* sequence numbers, so no further configuration required. -*/ -if (grp_alloc[i] == sequence_numbers && - grp_occupancy[i] < total_slots) -return ; - } - -/* None of the sequence number groups are configured for the requested -* sequence numbers, so we have to reconfigure one of them. This is -* only possible if a group is not in use. -*/ -for (i =0 ; i <DLB_NUM_SN_GROUPS ; i++) { -if (grp_occupancy[i] ==0 ) -break ; - } - -if (i ==DLB_NUM_SN_GROUPS ) { - DLB_LOG_ERR("[%s()] No groups with %d sequence_numbers are available orhave free slots\n",
drivers/event/dlb/dlb.c deleted +0
-443- __func__, sequence_numbers); -return ; - } - -/* Attempt to configure slot i with the requested number of sequence -* numbers. Ignore the return value -- if this fails, the error will be -* caught during subsequent queue configuration. -*/ -dlb_set_sn_allocation (dlb, i, sequence_numbers); -} - -static int -dlb_eventdev_ldb_queue_setup (struct rte_eventdev *dev, -struct dlb_eventdev_queue *ev_queue, -const struct rte_event_queue_conf *queue_conf) -{ -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); -int32_t qm_qid; - -if (queue_conf->nb_atomic_order_sequences) -dlb_program_sn_allocation (dlb, queue_conf); - - qm_qid =dlb_hw_create_ldb_queue (dlb, - &ev_queue->qm_queue, - queue_conf); -if (qm_qid <0 ) { -DLB_LOG_ERR ("Failed to create the load-balanced queue\n" ); - -return qm_qid; - } - - dlb->qm_ldb_to_ev_queue_id[qm_qid] = ev_queue->id; - - ev_queue->qm_queue.id = qm_qid; - -return 0 ; -} - -static int dlb_num_dir_queues_setup (struct dlb_eventdev *dlb) -{ -int i, num =0 ; - -for (i =0 ; i < dlb->num_queues; i++) { -if (dlb->ev_queues[i].setup_done && - dlb->ev_queues[i].qm_queue.is_directed) - num++; - } - -return num; -} - -static void -dlb_queue_link_teardown (struct dlb_eventdev *dlb, -struct dlb_eventdev_queue *ev_queue) -{ -struct dlb_eventdev_port *ev_port; -int i, j; - -for (i =0 ; i < dlb->num_ports; i++) { - ev_port = &dlb->ev_ports[i]; - -for (j =0 ; j <DLB_MAX_NUM_QIDS_PER_LDB_CQ ; j++) { -if (!ev_port->link[j].valid || - ev_port->link[j].queue_id != ev_queue->id) -continue ; - - ev_port->link[j].valid = false; - ev_port->num_links--; - } - } - - ev_queue->num_links =0 ; -} - -static int -dlb_eventdev_queue_setup (struct rte_eventdev *dev, -uint8_t ev_qid, -const struct rte_event_queue_conf *queue_conf) -{ -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); -struct dlb_eventdev_queue *ev_queue; -int ret; - -if (queue_conf ==NULL ) -return -EINVAL ; - -if (ev_qid >= dlb->num_queues) -return -EINVAL ; - - ev_queue = &dlb->ev_queues[ev_qid]; - - ev_queue->qm_queue.is_directed = queue_conf->event_queue_cfg & -RTE_EVENT_QUEUE_CFG_SINGLE_LINK ; - ev_queue->id = ev_qid; - ev_queue->conf = *queue_conf; - -if (!ev_queue->qm_queue.is_directed) { - ret =dlb_eventdev_ldb_queue_setup (dev, ev_queue, queue_conf); - }else { -/* The directed queue isn't setup until link time, at which -* point we know its directed port ID. Directed queue setup -* will only fail if this queue is already setup or there are -* no directed queues left to configure. -*/ - ret =0 ; - - ev_queue->qm_queue.config_state =DLB_NOT_CONFIGURED ; - -if (ev_queue->setup_done || -dlb_num_dir_queues_setup (dlb) == dlb->num_dir_queues) - ret = -EINVAL ; - } - -/* Tear down pre-existing port->queue links */ -if (!ret && dlb->run_state ==DLB_RUN_STATE_STOPPED ) -dlb_queue_link_teardown (dlb, ev_queue); - -if (!ret) - ev_queue->setup_done = true; - -return ret; -} - -static void -dlb_port_link_teardown (struct dlb_eventdev *dlb, -struct dlb_eventdev_port *ev_port) -{ -struct dlb_eventdev_queue *ev_queue; -int i; - -for (i =0 ; i <DLB_MAX_NUM_QIDS_PER_LDB_CQ ; i++) { -if (!ev_port->link[i].valid) -continue ; - - ev_queue = &dlb->ev_queues[ev_port->link[i].queue_id]; - - ev_port->link[i].valid = false; - ev_port->num_links--; - ev_queue->num_links--; - } -} - -static int -dlb_eventdev_port_setup (struct rte_eventdev *dev, -uint8_t ev_port_id, -const struct rte_event_port_conf *port_conf) -{ -struct dlb_eventdev *dlb; -struct dlb_eventdev_port *ev_port; -bool use_rsvd_token_scheme; -uint32_t adj_cq_depth; -uint16_t rsvd_tokens; -int ret; - -if (dev ==NULL || port_conf ==NULL ) { -DLB_LOG_ERR ("Null parameter\n" ); -return -EINVAL ; - } - - dlb =dlb_pmd_priv (dev); - -if (ev_port_id >=DLB_MAX_NUM_PORTS ) -return -EINVAL ; - -if (port_conf->dequeue_depth > - evdev_dlb_default_info.max_event_port_dequeue_depth || - port_conf->enqueue_depth > - evdev_dlb_default_info.max_event_port_enqueue_depth) -return -EINVAL ; - - ev_port = &dlb->ev_ports[ev_port_id]; -/* configured? */ -if (ev_port->setup_done) { -DLB_LOG_ERR ("evport %d is already configured\n" , ev_port_id); -return -EINVAL ; - } - -/* The reserved token interrupt arming scheme requires that one or more -* CQ tokens be reserved by the PMD. This limits the amount of CQ space -* usable by the DLB, so in order to give an *effective* CQ depth equal -* to the user-requested value, we double CQ depth and reserve half of -* its tokens. If the user requests the max CQ depth (256) then we -* cannot double it, so we reserve one token and give an effective -* depth of 255 entries. -*/ - use_rsvd_token_scheme = true; - rsvd_tokens =1 ; - adj_cq_depth = port_conf->dequeue_depth; - -if (use_rsvd_token_scheme && adj_cq_depth <256 ) { - rsvd_tokens = adj_cq_depth; - adj_cq_depth *=2 ; - } - - ev_port->qm_port.is_directed = port_conf->event_port_cfg & -RTE_EVENT_PORT_CFG_SINGLE_LINK ; - -if (!ev_port->qm_port.is_directed) { - ret =dlb_hw_create_ldb_port (dlb, - ev_port, - port_conf->dequeue_depth, - adj_cq_depth, - port_conf->enqueue_depth, - rsvd_tokens, - use_rsvd_token_scheme); -if (ret <0 ) { -DLB_LOG_ERR ("Failed to create the lB port ve portId=%d\n" , - ev_port_id); -return ret; - } - }else { - ret =dlb_hw_create_dir_port (dlb, - ev_port, - port_conf->dequeue_depth, - adj_cq_depth, - port_conf->enqueue_depth, - rsvd_tokens, - use_rsvd_token_scheme); -if (ret <0 ) { -DLB_LOG_ERR ("Failed to create the DIR port\n" ); -return ret; - } - } - -/* Save off port config for reconfig */ - dlb->ev_ports[ev_port_id].conf = *port_conf; - - dlb->ev_ports[ev_port_id].id = ev_port_id; - dlb->ev_ports[ev_port_id].enq_configured = true; - dlb->ev_ports[ev_port_id].setup_done = true; - dlb->ev_ports[ev_port_id].inflight_max = - port_conf->new_event_threshold; - dlb->ev_ports[ev_port_id].implicit_release = - !(port_conf->event_port_cfg & -RTE_EVENT_PORT_CFG_DISABLE_IMPL_REL ); - dlb->ev_ports[ev_port_id].outstanding_releases =0 ; - dlb->ev_ports[ev_port_id].inflight_credits =0 ; - dlb->ev_ports[ev_port_id].credit_update_quanta = -RTE_LIBRTE_PMD_DLB_SW_CREDIT_QUANTA ; - dlb->ev_ports[ev_port_id].dlb = dlb;/* reverse link */ - -/* Tear down pre-existing port->queue links */ -if (dlb->run_state ==DLB_RUN_STATE_STOPPED ) -dlb_port_link_teardown (dlb, &dlb->ev_ports[ev_port_id]); - - dev->data->ports[ev_port_id] = &dlb->ev_ports[ev_port_id]; - -return 0 ; -} - -static int -dlb_eventdev_reapply_configuration (struct rte_eventdev *dev) -{ -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); -int ret, i; - -/* If an event queue or port was previously configured, but hasn't been -* reconfigured, reapply its original configuration. -*/ -for (i =0 ; i < dlb->num_queues; i++) { -struct dlb_eventdev_queue *ev_queue; - - ev_queue = &dlb->ev_queues[i]; - -if (ev_queue->qm_queue.config_state !=DLB_PREV_CONFIGURED ) -continue ; - - ret =dlb_eventdev_queue_setup (dev, i, &ev_queue->conf); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: failed to reconfigure queue %d" , i); -return ret; - } - } - -for (i =0 ; i < dlb->num_ports; i++) { -struct dlb_eventdev_port *ev_port = &dlb->ev_ports[i]; - -if (ev_port->qm_port.config_state !=DLB_PREV_CONFIGURED ) -continue ; - - ret =dlb_eventdev_port_setup (dev, i, &ev_port->conf); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: failed to reconfigure ev_port %d" , - i); -return ret; - } - } - -return 0 ; -} - -static int -set_dev_id(const char *key __rte_unused, -const char *value, -void *opaque) -{ -int *dev_id = opaque; -int ret; - -if (value ==NULL || opaque ==NULL ) { -DLB_LOG_ERR ("NULL pointer\n" ); -return -EINVAL ; - } - - ret =dlb_string_to_int (dev_id, value); -if (ret <0 ) -return ret; - -return 0 ; -} - -static int -set_defer_sched(const char *key __rte_unused, -const char *value, -void *opaque) -{ -int *defer_sched = opaque; - -if (value ==NULL || opaque ==NULL ) { -DLB_LOG_ERR ("NULL pointer\n" ); -return -EINVAL ; - } - -if (strncmp (value,"on" ,2 ) !=0 ) { -DLB_LOG_ERR ("Invalid defer_sched argument \"%s\" (expected \"on\")\n" , - value); -return -EINVAL ; - } - - *defer_sched =1 ; - -return 0 ; -} - -static int -set_num_atm_inflights(const char *key __rte_unused, -const char *value, -void *opaque) -{ -int *num_atm_inflights = opaque; -int ret; - -if (value ==NULL || opaque ==NULL ) { -DLB_LOG_ERR ("NULL pointer\n" ); -return -EINVAL ; - } - - ret =dlb_string_to_int (num_atm_inflights, value); -if (ret <0 ) -return ret; - -if (*num_atm_inflights <0 || - *num_atm_inflights >DLB_MAX_NUM_ATM_INFLIGHTS ) { -DLB_LOG_ERR ("dlb: atm_inflights must be between 0 and %d\n" , -DLB_MAX_NUM_ATM_INFLIGHTS ); -return -EINVAL ; - } - -return 0 ; -} - -static int -dlb_validate_port_link (struct dlb_eventdev_port *ev_port, -uint8_t queue_id, -bool link_exists, -int index) -{ -struct dlb_eventdev *dlb = ev_port->dlb; -struct dlb_eventdev_queue *ev_queue; -bool port_is_dir, queue_is_dir; - -if (queue_id > dlb->num_queues) { -DLB_LOG_ERR ("queue_id %d > num queues %d\n" , - queue_id, dlb->num_queues); - rte_errno = -EINVAL ; -return -1 ; - } - - ev_queue = &dlb->ev_queues[queue_id]; - -if (!ev_queue->setup_done && - ev_queue->qm_queue.config_state !=DLB_PREV_CONFIGURED ) { -DLB_LOG_ERR ("setup not done and not previously configured\n" ); - rte_errno = -EINVAL ; -return -1 ; - } - - port_is_dir = ev_port->qm_port.is_directed; - queue_is_dir = ev_queue->qm_queue.is_directed; - -if (port_is_dir != queue_is_dir) { -DLB_LOG_ERR ("%s queue %u can't link to %s port %u\n" , - queue_is_dir ?"DIR" :"LDB" , ev_queue->id, - port_is_dir ?"DIR" :"LDB" , ev_port->id); - - rte_errno = -EINVAL ; -return -1 ; - } - -/* Check if there is space for the requested link */ -if (!link_exists && index ==-1 ) { -DLB_LOG_ERR ("no space for new link\n" ); - rte_errno = -ENOSPC ; -return -1 ; - } - -/* Check if the directed port is already linked */ -if (ev_port->qm_port.is_directed && ev_port->num_links >0 && - !link_exists) { -DLB_LOG_ERR ("Can't link DIR port %d to >1 queues\n" , - ev_port->id); - rte_errno = -EINVAL ; -return -1 ; - } - -/* Check if the directed queue is already linked */ -if (ev_queue->qm_queue.is_directed && ev_queue->num_links >0 && - !link_exists) { -DLB_LOG_ERR ("Can't link DIR queue %d to >1 ports\n" , - ev_queue->id); - rte_errno = -EINVAL ; -return -1 ; - } - -return 0 ; -} - -static int32_t -dlb_hw_create_dir_queue (struct dlb_eventdev *dlb,int32_t qm_port_id) -{ -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_create_dir_queue_args cfg; -struct dlb_cmd_response response = {0 }; -int32_t ret; - - cfg.response = (uintptr_t )&response; - -/* The directed port is always configured before its queue */ - cfg.port_id = qm_port_id; - - ret =dlb_iface_dir_queue_create (handle, &cfg); -if (ret <0 ) { - DLB_LOG_ERR("dlb: create DIR event queue error, ret=%d (driver status:%s)\n",
drivers/event/dlb/dlb.c deleted +0
-476- ret, dlb_error_strings[response.status]); -return -EINVAL ; - } - -return response.id; -} - -static int -dlb_eventdev_dir_queue_setup (struct dlb_eventdev *dlb, -struct dlb_eventdev_queue *ev_queue, -struct dlb_eventdev_port *ev_port) -{ -int32_t qm_qid; - - qm_qid =dlb_hw_create_dir_queue (dlb, ev_port->qm_port.id); - -if (qm_qid <0 ) { -DLB_LOG_ERR ("Failed to create the DIR queue\n" ); -return qm_qid; - } - - dlb->qm_dir_to_ev_queue_id[qm_qid] = ev_queue->id; - - ev_queue->qm_queue.id = qm_qid; - -return 0 ; -} - -static int16_t -dlb_hw_map_ldb_qid_to_port (struct dlb_hw_dev *handle, -uint32_t qm_port_id, -uint16_t qm_qid, -uint8_t priority) -{ -struct dlb_map_qid_args cfg; -struct dlb_cmd_response response; -int32_t ret; - -if (handle ==NULL ) -return -EINVAL ; - -/* Build message */ - cfg.response = (uintptr_t )&response; - cfg.port_id = qm_port_id; - cfg.qid = qm_qid; - cfg.priority =EV_TO_DLB_PRIO (priority); - - ret =dlb_iface_map_qid (handle, &cfg); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: map qid error, ret=%d (driver status: %s)\n" , - ret, dlb_error_strings[response.status]); -DLB_LOG_ERR ("dlb: device_id=%d grp=%d, qm_port=%d, qm_qid=%d prio=%d\n" , - handle->device_id, - handle->domain_id, cfg.port_id, - cfg.qid, - cfg.priority); - }else { -DLB_LOG_DBG ("dlb: mapped queue %d to qm_port %d\n" , - qm_qid, qm_port_id); - } - -return ret; -} - -static int -dlb_event_queue_join_ldb (struct dlb_eventdev *dlb, -struct dlb_eventdev_port *ev_port, -struct dlb_eventdev_queue *ev_queue, -uint8_t priority) -{ -int first_avail =-1 ; -int ret, i; - -for (i =0 ; i <DLB_MAX_NUM_QIDS_PER_LDB_CQ ; i++) { -if (ev_port->link[i].valid) { -if (ev_port->link[i].queue_id == ev_queue->id && - ev_port->link[i].priority == priority) { -if (ev_port->link[i].mapped) -return 0 ;/* already mapped */ - first_avail = i; - } - }else { -if (first_avail ==-1 ) - first_avail = i; - } - } -if (first_avail ==-1 ) { -DLB_LOG_ERR ("dlb: qm_port %d has no available QID slots.\n" , - ev_port->qm_port.id); -return -EINVAL ; - } - - ret =dlb_hw_map_ldb_qid_to_port (&dlb->qm_instance, - ev_port->qm_port.id, - ev_queue->qm_queue.id, - priority); - -if (!ret) - ev_port->link[first_avail].mapped = true; - -return ret; -} - -static int -dlb_do_port_link (struct rte_eventdev *dev, -struct dlb_eventdev_queue *ev_queue, -struct dlb_eventdev_port *ev_port, -uint8_t prio) -{ -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); -int err; - -/* Don't link until start time. */ -if (dlb->run_state ==DLB_RUN_STATE_STOPPED ) -return 0 ; - -if (ev_queue->qm_queue.is_directed) - err =dlb_eventdev_dir_queue_setup (dlb, ev_queue, ev_port); -else - err =dlb_event_queue_join_ldb (dlb, ev_port, ev_queue, prio); - -if (err) { -DLB_LOG_ERR ("port link failure for %s ev_q %d, ev_port %d\n" , - ev_queue->qm_queue.is_directed ?"DIR" :"LDB" , - ev_queue->id, ev_port->id); - - rte_errno = err; -return -1 ; - } - -return 0 ; -} - -static int -dlb_eventdev_apply_port_links (struct rte_eventdev *dev) -{ -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); -int i; - -/* Perform requested port->queue links */ -for (i =0 ; i < dlb->num_ports; i++) { -struct dlb_eventdev_port *ev_port = &dlb->ev_ports[i]; -int j; - -for (j =0 ; j <DLB_MAX_NUM_QIDS_PER_LDB_CQ ; j++) { -struct dlb_eventdev_queue *ev_queue; -uint8_t prio, queue_id; - -if (!ev_port->link[j].valid) -continue ; - - prio = ev_port->link[j].priority; - queue_id = ev_port->link[j].queue_id; - -if (dlb_validate_port_link (ev_port, queue_id, true, j)) -return -EINVAL ; - - ev_queue = &dlb->ev_queues[queue_id]; - -if (dlb_do_port_link (dev, ev_queue, ev_port, prio)) -return -EINVAL ; - } - } - -return 0 ; -} - -static int -dlb_eventdev_port_link (struct rte_eventdev *dev,void *event_port, -const uint8_t queues[],const uint8_t priorities[], -uint16_t nb_links) - -{ -struct dlb_eventdev_port *ev_port = event_port; -struct dlb_eventdev *dlb; -int i, j; - -RTE_SET_USED (dev); - -if (ev_port ==NULL ) { -DLB_LOG_ERR ("dlb: evport not setup\n" ); - rte_errno = -EINVAL ; -return 0 ; - } - -if (!ev_port->setup_done && - ev_port->qm_port.config_state !=DLB_PREV_CONFIGURED ) { -DLB_LOG_ERR ("dlb: evport not setup\n" ); - rte_errno = -EINVAL ; -return 0 ; - } - -/* Note: rte_event_port_link() ensures the PMD won't receive a NULL -* queues pointer. -*/ -if (nb_links ==0 ) { -DLB_LOG_DBG ("dlb: nb_links is 0\n" ); -return 0 ;/* Ignore and return success */ - } - - dlb = ev_port->dlb; - -DLB_LOG_DBG ("Linking %u queues to %s port %d\n" , - nb_links, - ev_port->qm_port.is_directed ?"DIR" :"LDB" , - ev_port->id); - -for (i =0 ; i < nb_links; i++) { -struct dlb_eventdev_queue *ev_queue; -uint8_t queue_id, prio; -bool found = false; -int index =-1 ; - - queue_id = queues[i]; - prio = priorities[i]; - -/* Check if the link already exists. */ -for (j =0 ; j <DLB_MAX_NUM_QIDS_PER_LDB_CQ ; j++) -if (ev_port->link[j].valid) { -if (ev_port->link[j].queue_id == queue_id) { - found = true; - index = j; -break ; - } - }else { -if (index ==-1 ) - index = j; - } - -/* could not link */ -if (index ==-1 ) -break ; - -/* Check if already linked at the requested priority */ -if (found && ev_port->link[j].priority == prio) -continue ; - -if (dlb_validate_port_link (ev_port, queue_id, found, index)) -break ;/* return index of offending queue */ - - ev_queue = &dlb->ev_queues[queue_id]; - -if (dlb_do_port_link (dev, ev_queue, ev_port, prio)) -break ;/* return index of offending queue */ - - ev_queue->num_links++; - - ev_port->link[index].queue_id = queue_id; - ev_port->link[index].priority = prio; - ev_port->link[index].valid = true; -/* Entry already exists? If so, then must be prio change */ -if (!found) - ev_port->num_links++; - } -return i; -} - -static int -dlb_eventdev_start (struct rte_eventdev *dev) -{ -struct dlb_eventdev *dlb =dlb_pmd_priv (dev); -struct dlb_hw_dev *handle = &dlb->qm_instance; -struct dlb_start_domain_args cfg; -struct dlb_cmd_response response; -int ret, i; - -rte_spinlock_lock (&dlb->qm_instance.resource_lock); -if (dlb->run_state !=DLB_RUN_STATE_STOPPED ) { -DLB_LOG_ERR ("bad state %d for dev_start\n" , - (int )dlb->run_state); -rte_spinlock_unlock (&dlb->qm_instance.resource_lock); -return -EINVAL ; - } - dlb->run_state =DLB_RUN_STATE_STARTING ; -rte_spinlock_unlock (&dlb->qm_instance.resource_lock); - -/* If the device was configured more than once, some event ports and/or -* queues may need to be reconfigured. -*/ - ret =dlb_eventdev_reapply_configuration (dev); -if (ret) -return ret; - -/* The DLB PMD delays port links until the device is started. */ - ret =dlb_eventdev_apply_port_links (dev); -if (ret) -return ret; - - cfg.response = (uintptr_t )&response; - -for (i =0 ; i < dlb->num_ports; i++) { -if (!dlb->ev_ports[i].setup_done) { -DLB_LOG_ERR ("dlb: port %d not setup" , i); -return -ESTALE ; - } - } - -for (i =0 ; i < dlb->num_queues; i++) { -if (dlb->ev_queues[i].num_links ==0 ) { -DLB_LOG_ERR ("dlb: queue %d is not linked" , i); -return -ENOLINK ; - } - } - - ret =dlb_iface_sched_domain_start (handle, &cfg); -if (ret <0 ) { -DLB_LOG_ERR ("dlb: sched_domain_start ret=%d (driver status: %s)\n" , - ret, dlb_error_strings[response.status]); -return ret; - } - - dlb->run_state =DLB_RUN_STATE_STARTED ; -DLB_LOG_DBG ("dlb: sched_domain_start completed OK\n" ); - -return 0 ; -} - -static inline int -dlb_check_enqueue_sw_credits (struct dlb_eventdev *dlb, -struct dlb_eventdev_port *ev_port) -{ -uint32_t sw_inflights =__atomic_load_n (&dlb->inflights, - __ATOMIC_SEQ_CST); -const int num =1 ; - -if (unlikely (ev_port->inflight_max < sw_inflights)) { -DLB_INC_STAT (ev_port->stats.traffic.tx_nospc_inflight_max,1 ); - rte_errno = -ENOSPC ; -return 1 ; - } - -if (ev_port->inflight_credits < num) { -/* check if event enqueue brings ev_port over max threshold */ -uint32_t credit_update_quanta = ev_port->credit_update_quanta; - -if (sw_inflights + credit_update_quanta > - dlb->new_event_limit) { -DLB_INC_STAT ( - ev_port->stats.traffic.tx_nospc_new_event_limit, -1 ); - rte_errno = -ENOSPC ; -return 1 ; - } - -__atomic_fetch_add (&dlb->inflights, credit_update_quanta, - __ATOMIC_SEQ_CST); - ev_port->inflight_credits += (credit_update_quanta); - -if (ev_port->inflight_credits < num) { -DLB_INC_STAT ( - ev_port->stats.traffic.tx_nospc_inflight_credits, -1 ); - rte_errno = -ENOSPC ; -return 1 ; - } - } - -return 0 ; -} - -static inline void -dlb_replenish_sw_credits (struct dlb_eventdev *dlb, -struct dlb_eventdev_port *ev_port) -{ -uint16_t quanta = ev_port->credit_update_quanta; - -if (ev_port->inflight_credits >= quanta *2 ) { -/* Replenish credits, saving one quanta for enqueues */ -uint16_t val = ev_port->inflight_credits - quanta; - -__atomic_fetch_sub (&dlb->inflights, val, __ATOMIC_SEQ_CST); - ev_port->inflight_credits -= val; - } -} - -static __rte_always_inline uint16_t -dlb_read_pc (struct process_local_port_data *port_data,bool ldb) -{ -volatile uint16_t *popcount; - -if (ldb) - popcount = port_data->ldb_popcount; -else - popcount = port_data->dir_popcount; - -return *popcount; -} - -static inline int -dlb_check_enqueue_hw_ldb_credits (struct dlb_port *qm_port, -struct process_local_port_data *port_data) -{ -if (unlikely (qm_port->cached_ldb_credits ==0 )) { -uint16_t pc; - - pc =dlb_read_pc (port_data, true); - - qm_port->cached_ldb_credits = pc - - qm_port->ldb_pushcount_at_credit_expiry; -if (unlikely (qm_port->cached_ldb_credits ==0 )) { -DLB_INC_STAT ( - qm_port->ev_port->stats.traffic.tx_nospc_ldb_hw_credits, -1 ); - -DLB_LOG_DBG ("ldb credits exhausted\n" ); -return 1 ; - } - qm_port->ldb_pushcount_at_credit_expiry += - qm_port->cached_ldb_credits; - } - -return 0 ; -} - -static inline int -dlb_check_enqueue_hw_dir_credits (struct dlb_port *qm_port, -struct process_local_port_data *port_data) -{ -if (unlikely (qm_port->cached_dir_credits ==0 )) { -uint16_t pc; - - pc =dlb_read_pc (port_data, false); - - qm_port->cached_dir_credits = pc - - qm_port->dir_pushcount_at_credit_expiry; - -if (unlikely (qm_port->cached_dir_credits ==0 )) { -DLB_INC_STAT ( - qm_port->ev_port->stats.traffic.tx_nospc_dir_hw_credits, -1 ); - -DLB_LOG_DBG ("dir credits exhausted\n" ); -return 1 ; - } - qm_port->dir_pushcount_at_credit_expiry += - qm_port->cached_dir_credits; - } - -return 0 ; -} - -static inline int -dlb_event_enqueue_prep (struct dlb_eventdev_port *ev_port, -struct dlb_port *qm_port, -const struct rte_event ev[], -struct process_local_port_data *port_data, -uint8_t *sched_type, -uint8_t *queue_id) -{ -struct dlb_eventdev *dlb = ev_port->dlb; -struct dlb_eventdev_queue *ev_queue; -uint16_t *cached_credits =NULL ; -struct dlb_queue *qm_queue; - - ev_queue = &dlb->ev_queues[ev->queue_id]; - qm_queue = &ev_queue->qm_queue; - *queue_id = qm_queue->id; - -/* Ignore sched_type and hardware credits on release events */ -if (ev->op ==RTE_EVENT_OP_RELEASE ) - goto op_check; - -if (!qm_queue->is_directed) { -/* Load balanced destination queue */ - -if (dlb_check_enqueue_hw_ldb_credits (qm_port, port_data)) { - rte_errno = -ENOSPC ; -return 1 ; - } - cached_credits = &qm_port->cached_ldb_credits; - -switch (ev->sched_type) { -case RTE_SCHED_TYPE_ORDERED : -DLB_LOG_DBG ("dlb: put_qe: RTE_SCHED_TYPE_ORDERED\n" ); -if (qm_queue->sched_type !=RTE_SCHED_TYPE_ORDERED ) { - DLB_LOG_ERR("dlb: tried to send ordered event to unordered queue%d\n",
drivers/event/dlb/dlb.c deleted +0
-88- *queue_id); - rte_errno = -EINVAL ; -return 1 ; - } - *sched_type =DLB_SCHED_ORDERED ; -break ; -case RTE_SCHED_TYPE_ATOMIC : -DLB_LOG_DBG ("dlb: put_qe: RTE_SCHED_TYPE_ATOMIC\n" ); - *sched_type =DLB_SCHED_ATOMIC ; -break ; -case RTE_SCHED_TYPE_PARALLEL : -DLB_LOG_DBG ("dlb: put_qe: RTE_SCHED_TYPE_PARALLEL\n" ); -if (qm_queue->sched_type ==RTE_SCHED_TYPE_ORDERED ) - *sched_type =DLB_SCHED_ORDERED ; -else - *sched_type =DLB_SCHED_UNORDERED ; -break ; -default : -DLB_LOG_ERR ("Unsupported LDB sched type in put_qe\n" ); -DLB_INC_STAT (ev_port->stats.tx_invalid,1 ); - rte_errno = -EINVAL ; -return 1 ; - } - }else { -/* Directed destination queue */ - -if (dlb_check_enqueue_hw_dir_credits (qm_port, port_data)) { - rte_errno = -ENOSPC ; -return 1 ; - } - cached_credits = &qm_port->cached_dir_credits; - -DLB_LOG_DBG ("dlb: put_qe: RTE_SCHED_TYPE_DIRECTED\n" ); - - *sched_type =DLB_SCHED_DIRECTED ; - } - -op_check: -switch (ev->op) { -case RTE_EVENT_OP_NEW : -/* Check that a sw credit is available */ -if (dlb_check_enqueue_sw_credits (dlb, ev_port)) { - rte_errno = -ENOSPC ; -return 1 ; - } - ev_port->inflight_credits--; - (*cached_credits)--; -break ; -case RTE_EVENT_OP_FORWARD : -/* Check for outstanding_releases underflow. If this occurs, -* the application is not using the EVENT_OPs correctly; for -* example, forwarding or releasing events that were not -* dequeued. -*/ -RTE_ASSERT (ev_port->outstanding_releases >0 ); - ev_port->outstanding_releases--; - qm_port->issued_releases++; - (*cached_credits)--; -break ; -case RTE_EVENT_OP_RELEASE : - ev_port->inflight_credits++; -/* Check for outstanding_releases underflow. If this occurs, -* the application is not using the EVENT_OPs correctly; for -* example, forwarding or releasing events that were not -* dequeued. -*/ -RTE_ASSERT (ev_port->outstanding_releases >0 ); - ev_port->outstanding_releases--; - qm_port->issued_releases++; -/* Replenish s/w credits if enough are cached */ -dlb_replenish_sw_credits (dlb, ev_port); -break ; - } - -DLB_INC_STAT (ev_port->stats.tx_op_cnt[ev->op],1 ); -DLB_INC_STAT (ev_port->stats.traffic.tx_ok,1 ); - -#ifndef RTE_LIBRTE_PMD_DLB_QUELL_STATS -if (ev->op !=RTE_EVENT_OP_RELEASE ) { -DLB_INC_STAT (ev_port->stats.enq_ok[ev->queue_id],1 ); -DLB_INC_STAT (ev_port->stats.tx_sched_cnt[*sched_type],1 ); - } -#endif - -return 0 ; -} - -static uint8_t cmd_byte_map[NUM_DLB_PORT_TYPES][DLB_NUM_HW_SCHED_TYPES] ={
drivers/event/dlb/dlb.c deleted +0
-520- { - /* Load-balanced cmd bytes */ - [RTE_EVENT_OP_NEW] = DLB_NEW_CMD_BYTE, - [RTE_EVENT_OP_FORWARD] = DLB_FWD_CMD_BYTE, - [RTE_EVENT_OP_RELEASE] = DLB_COMP_CMD_BYTE, - }, - { -/* Directed cmd bytes */ - [RTE_EVENT_OP_NEW] = DLB_NEW_CMD_BYTE, - [RTE_EVENT_OP_FORWARD] = DLB_NEW_CMD_BYTE, - [RTE_EVENT_OP_RELEASE] = DLB_NOOP_CMD_BYTE, - }, -}; - -static inline void -dlb_event_build_hcws (struct dlb_port *qm_port, -const struct rte_event ev[], -int num, -uint8_t *sched_type, -uint8_t *queue_id) -{ -struct dlb_enqueue_qe *qe; -uint16_t sched_word[4 ]; -__m128i sse_qe[2 ]; -int i; - - qe = qm_port->qe4; - - sse_qe[0 ] =_mm_setzero_si128 (); - sse_qe[1 ] =_mm_setzero_si128 (); - -switch (num) { -case 4 : -/* Construct the metadata portion of two HCWs in one 128b SSE -* register. HCW metadata is constructed in the SSE registers -* like so: -* sse_qe[0][63:0]: qe[0]'s metadata -* sse_qe[0][127:64]: qe[1]'s metadata -* sse_qe[1][63:0]: qe[2]'s metadata -* sse_qe[1][127:64]: qe[3]'s metadata -*/ - -/* Convert the event operation into a command byte and store it -* in the metadata: -* sse_qe[0][63:56] = cmd_byte_map[is_directed][ev[0].op] -* sse_qe[0][127:120] = cmd_byte_map[is_directed][ev[1].op] -* sse_qe[1][63:56] = cmd_byte_map[is_directed][ev[2].op] -* sse_qe[1][127:120] = cmd_byte_map[is_directed][ev[3].op] -*/ -#define DLB_QE_CMD_BYTE 7 - sse_qe[0 ] =_mm_insert_epi8 (sse_qe[0 ], - cmd_byte_map[qm_port->is_directed][ev[0 ].op], -DLB_QE_CMD_BYTE ); - sse_qe[0 ] =_mm_insert_epi8 (sse_qe[0 ], - cmd_byte_map[qm_port->is_directed][ev[1 ].op], -DLB_QE_CMD_BYTE +8 ); - sse_qe[1 ] =_mm_insert_epi8 (sse_qe[1 ], - cmd_byte_map[qm_port->is_directed][ev[2 ].op], -DLB_QE_CMD_BYTE ); - sse_qe[1 ] =_mm_insert_epi8 (sse_qe[1 ], - cmd_byte_map[qm_port->is_directed][ev[3 ].op], -DLB_QE_CMD_BYTE +8 ); - -/* Store priority, scheduling type, and queue ID in the sched -* word array because these values are re-used when the -* destination is a directed queue. -*/ - sched_word[0 ] =EV_TO_DLB_PRIO (ev[0 ].priority) <<10 | - sched_type[0 ] <<8 | - queue_id[0 ]; - sched_word[1 ] =EV_TO_DLB_PRIO (ev[1 ].priority) <<10 | - sched_type[1 ] <<8 | - queue_id[1 ]; - sched_word[2 ] =EV_TO_DLB_PRIO (ev[2 ].priority) <<10 | - sched_type[2 ] <<8 | - queue_id[2 ]; - sched_word[3 ] =EV_TO_DLB_PRIO (ev[3 ].priority) <<10 | - sched_type[3 ] <<8 | - queue_id[3 ]; - -/* Store the event priority, scheduling type, and queue ID in -* the metadata: -* sse_qe[0][31:16] = sched_word[0] -* sse_qe[0][95:80] = sched_word[1] -* sse_qe[1][31:16] = sched_word[2] -* sse_qe[1][95:80] = sched_word[3] -*/ -#define DLB_QE_QID_SCHED_WORD 1 - sse_qe[0 ] =_mm_insert_epi16 (sse_qe[0 ], - sched_word[0 ], -DLB_QE_QID_SCHED_WORD ); - sse_qe[0 ] =_mm_insert_epi16 (sse_qe[0 ], - sched_word[1 ], -DLB_QE_QID_SCHED_WORD +4 ); - sse_qe[1 ] =_mm_insert_epi16 (sse_qe[1 ], - sched_word[2 ], -DLB_QE_QID_SCHED_WORD ); - sse_qe[1 ] =_mm_insert_epi16 (sse_qe[1 ], - sched_word[3 ], -DLB_QE_QID_SCHED_WORD +4 ); - -/* If the destination is a load-balanced queue, store the lock -* ID. If it is a directed queue, DLB places this field in -* bytes 10-11 of the received QE, so we format it accordingly: -* sse_qe[0][47:32] = dir queue ? sched_word[0] : flow_id[0] -* sse_qe[0][111:96] = dir queue ? sched_word[1] : flow_id[1] -* sse_qe[1][47:32] = dir queue ? sched_word[2] : flow_id[2] -* sse_qe[1][111:96] = dir queue ? sched_word[3] : flow_id[3] -*/ -#define DLB_QE_LOCK_ID_WORD 2 - sse_qe[0 ] =_mm_insert_epi16 (sse_qe[0 ], - (sched_type[0 ] ==DLB_SCHED_DIRECTED ) ? - sched_word[0 ] : ev[0 ].flow_id, -DLB_QE_LOCK_ID_WORD ); - sse_qe[0 ] =_mm_insert_epi16 (sse_qe[0 ], - (sched_type[1 ] ==DLB_SCHED_DIRECTED ) ? - sched_word[1 ] : ev[1 ].flow_id, -DLB_QE_LOCK_ID_WORD +4 ); - sse_qe[1 ] =_mm_insert_epi16 (sse_qe[1 ], - (sched_type[2 ] ==DLB_SCHED_DIRECTED ) ? - sched_word[2 ] : ev[2 ].flow_id, -DLB_QE_LOCK_ID_WORD ); - sse_qe[1 ] =_mm_insert_epi16 (sse_qe[1 ], - (sched_type[3 ] ==DLB_SCHED_DIRECTED ) ? - sched_word[3 ] : ev[3 ].flow_id, -DLB_QE_LOCK_ID_WORD +4 ); - -/* Store the event type and sub event type in the metadata: -* sse_qe[0][15:0] = flow_id[0] -* sse_qe[0][79:64] = flow_id[1] -* sse_qe[1][15:0] = flow_id[2] -* sse_qe[1][79:64] = flow_id[3] -*/ -#define DLB_QE_EV_TYPE_WORD 0 - sse_qe[0 ] =_mm_insert_epi16 (sse_qe[0 ], - ev[0 ].sub_event_type <<8 | - ev[0 ].event_type, -DLB_QE_EV_TYPE_WORD ); - sse_qe[0 ] =_mm_insert_epi16 (sse_qe[0 ], - ev[1 ].sub_event_type <<8 | - ev[1 ].event_type, -DLB_QE_EV_TYPE_WORD +4 ); - sse_qe[1 ] =_mm_insert_epi16 (sse_qe[1 ], - ev[2 ].sub_event_type <<8 | - ev[2 ].event_type, -DLB_QE_EV_TYPE_WORD ); - sse_qe[1 ] =_mm_insert_epi16 (sse_qe[1 ], - ev[3 ].sub_event_type <<8 | - ev[3 ].event_type, -DLB_QE_EV_TYPE_WORD +4 ); - -/* Store the metadata to memory (use the double-precision -* _mm_storeh_pd because there is no integer function for -* storing the upper 64b): -* qe[0] metadata = sse_qe[0][63:0] -* qe[1] metadata = sse_qe[0][127:64] -* qe[2] metadata = sse_qe[1][63:0] -* qe[3] metadata = sse_qe[1][127:64] -*/ -_mm_storel_epi64 ((__m128i *)&qe[0 ].u.opaque_data, sse_qe[0 ]); -_mm_storeh_pd ((double *)&qe[1 ].u.opaque_data, - (__m128d ) sse_qe[0 ]); -_mm_storel_epi64 ((__m128i *)&qe[2 ].u.opaque_data, sse_qe[1 ]); -_mm_storeh_pd ((double *)&qe[3 ].u.opaque_data, - (__m128d ) sse_qe[1 ]); - - qe[0 ].data = ev[0 ].u64; - qe[1 ].data = ev[1 ].u64; - qe[2 ].data = ev[2 ].u64; - qe[3 ].data = ev[3 ].u64; - -break ; -case 3 : -case 2 : -case 1 : -for (i =0 ; i < num; i++) { - qe[i].cmd_byte = - cmd_byte_map[qm_port->is_directed][ev[i].op]; - qe[i].sched_type = sched_type[i]; - qe[i].data = ev[i].u64; - qe[i].qid = queue_id[i]; - qe[i].priority =EV_TO_DLB_PRIO (ev[i].priority); - qe[i].lock_id = ev[i].flow_id; -if (sched_type[i] ==DLB_SCHED_DIRECTED ) { -struct dlb_msg_info *info = - (struct dlb_msg_info *)&qe[i].lock_id; - - info->qid = queue_id[i]; - info->sched_type =DLB_SCHED_DIRECTED ; - info->priority = qe[i].priority; - } - qe[i].u.event_type.major = ev[i].event_type; - qe[i].u.event_type.sub = ev[i].sub_event_type; - } -break ; -case 0 : -break ; - } -} - -static inline void -dlb_construct_token_pop_qe (struct dlb_port *qm_port,int idx) -{ -struct dlb_cq_pop_qe *qe = (void *)qm_port->qe4; -int num = qm_port->owed_tokens; - -if (qm_port->use_rsvd_token_scheme) { -/* Check if there's a deficit of reserved tokens, and return -* early if there are no (unreserved) tokens to consume. -*/ -if (num <= qm_port->cq_rsvd_token_deficit) { - qm_port->cq_rsvd_token_deficit -= num; - qm_port->owed_tokens =0 ; -return ; - } - num -= qm_port->cq_rsvd_token_deficit; - qm_port->cq_rsvd_token_deficit =0 ; - } - - qe[idx].cmd_byte =DLB_POP_CMD_BYTE ; - qe[idx].tokens = num -1 ; - qm_port->owed_tokens =0 ; -} - -static __rte_always_inline void -dlb_pp_write (struct dlb_enqueue_qe *qe4, -struct process_local_port_data *port_data) -{ -dlb_movdir64b (port_data->pp_addr, qe4); -} - -static inline void -dlb_hw_do_enqueue (struct dlb_port *qm_port, -bool do_sfence, -struct process_local_port_data *port_data) -{ -DLB_LOG_DBG ("dlb: Flushing QE(s) to DLB\n" ); - -/* Since MOVDIR64B is weakly-ordered, use an SFENCE to ensure that -* application writes complete before enqueueing the release HCW. -*/ -if (do_sfence) -rte_wmb (); - -dlb_pp_write (qm_port->qe4, port_data); -} - -static inline int -dlb_consume_qe_immediate (struct dlb_port *qm_port,int num) -{ -struct process_local_port_data *port_data; -struct dlb_cq_pop_qe *qe; - -RTE_ASSERT (qm_port->config_state ==DLB_CONFIGURED ); - -if (qm_port->use_rsvd_token_scheme) { -/* Check if there's a deficit of reserved tokens, and return -* early if there are no (unreserved) tokens to consume. -*/ Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
subevent=%d\npp_id = %d,
sched_type= %d, qid = %d, err=%d\n",drivers/event/dlb/dlb.c deleted +0
-58Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
subevent=%d\npp_id = %d,
sched_type= %d, qid = %d, err=%d\n",drivers/event/dlb/dlb.c deleted +0
-471Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
underflowed.\n");
drivers/event/dlb/dlb.c deleted +0
-14Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
num,
drivers/event/dlb/dlb.c deleted +0
-78Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
wait)
drivers/event/dlb/dlb.c deleted +0
-206Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
%d\n",
drivers/event/dlb/dlb.c deleted +0
-241Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
'%s'\n",
drivers/event/dlb/dlb.c deleted +0
-70Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
ioctls
- * serviced by DLB kernel module.
- * If PCI (PF PMD), these will be implemented locally in user mode.
- */drivers/event/dlb/dlb_iface.c deleted +0
-66Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
ioctls
- * serviced by DLB kernel module.
- * If PCI (PF PMD), these will be implemented locally in user mode.
- */drivers/event/dlb/dlb_iface.h deleted +0
-70Lines of this file are not shown. View the raw message.
drivers/event/dlb/dlb_inline_fns.h deleted +0
-36Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*/
drivers/event/dlb/dlb_priv.h deleted +0
-30Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*/
drivers/event/dlb/dlb_priv.h deleted +0
-425Lines of this file are not shown. View the raw message.
drivers/event/dlb/dlb_selftest.c deleted +0
-163Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
__rte_unused)drivers/event/dlb/dlb_selftest.c deleted +0
-6Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
events */
drivers/event/dlb/dlb_selftest.c deleted +0
-1372Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
failed\n",
drivers/event/dlb/dlb_selftest.c deleted +0
-3Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
the
- * resources (queues, ports, etc.) that it contains.
- *
- * Input parameters:
- * -num_ldb_queues: Number of load-balanced queues.
- * -num_ldb_ports: Number of load-balanced ports.
- * -num_dir_ports: Number of directed ports. A directed port has one directed
- * queue, so nonum_dir_queuesargument is necessary.
- * -num_atomic_inflights: This specifies the amount of temporary atomic QE
- * storage for the domain. This storage is divided among the domain's
- * load-balanced queues that are configured for atomic scheduling.
- * -num_hist_list_entries: Amount of history list storage. This is divided
- * among the domain's CQs.
- * -num_ldb_credits: Amount of load-balanced QE storage (QED). QEs occupy this
- * space until they are scheduled to a load-balanced CQ. One credit
- * represents the storage for one QE.
- * -num_dir_credits: Amount of directed QE storage (DQED). QEs occupy this
- * space until they are scheduled to a directed CQ. One credit represents
- * the storage for one QE.
- * -num_ldb_credit_pools: Number of pools into which the load-balanced credits
- * are placed.
- * -num_dir_credit_pools: Number of pools into which the directed credits are
- * placed.
- * - padding0: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- * response.id: domain ID.
- */drivers/event/dlb/dlb_user.h deleted +0
-24Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
directed
- * queue for every directed port.
- * -num_atomic_inflights: Amount of available temporary atomic QE storage.
- * -max_contiguous_atomic_inflights: When a domain is created, the temporary
- * atomic QE storage is allocated in a contiguous chunk. This return value
- * is the longest available contiguous range of atomic QE storage.
- * -num_hist_list_entries: Amount of history list storage.
- * -max_contiguous_hist_list_entries: History list storage is allocated in
- * a contiguous chunk, and this return value is the longest available
- * contiguous range of history list entries.
- * -num_ldb_credits: Amount of available load-balanced QE storage.
- * -max_contiguous_ldb_credits: QED storage is allocated in a contiguous
- * chunk, and this return value is the longest available contiguous range
- * of load-balanced credit storage.
- * -num_dir_credits: Amount of available directed QE storage.
- * -max_contiguous_dir_credits: DQED storage is allocated in a contiguous
- * chunk, and this return value is the longest available contiguous range
- * of directed credit storage.
- * -num_ldb_credit_pools: Number of available load-balanced credit pools.
- * -num_dir_credit_pools: Number of available directed credit pools.
- * - padding0: Reserved for future use.
- */drivers/event/dlb/dlb_user.h deleted +0
-70Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
using
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- * response.id: CQ poll mode (see enumdlb_cq_poll_modes).
- */drivers/event/dlb/dlb_user.h deleted +0
-11Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
slot
- * - If configured for 512 sequence numbers per queue, the group has 2 slots
- * ...
- * - If configured for 32 sequence numbers per queue, the group has 32 slots
- *
- * This ioctl returns the group's number of in-use slots. If its occupancy is
- * 0, the group's sequence number allocation can be reconfigured.
- *
- * Input parameters:
- * - group: Sequence number group ID.
- * - padding0: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- * response.id: Specified group's number of used slots.
- */drivers/event/dlb/dlb_user.h deleted +0
-37Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
pool.
- * - padding0: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- * response.id: Pool ID.
- */drivers/event/dlb/dlb_user.h deleted +0
-12Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
QE
- * storage for this queue. If zero, the queue will not support atomic
- * scheduling.
- * -num_sequence_numbers: This specifies the number of sequence numbers used
- * by this queue. If zero, the queue will not support ordered scheduling.
- * If non-zero, the queue will not support unordered scheduling.
- * -num_qid_inflights: The maximum number of QEs that can be inflight
- * (scheduled to a CQ but not completed) at any time. If
- *num_sequence_numbersis non-zero,num_qid_inflightsmust be set equal
- * tonum_sequence_numbers.
- * - padding0: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- * response.id: Queue ID.
- */drivers/event/dlb/dlb_user.h deleted +0
-14Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
created,
- * specify its ID here. Else this argument must be0xFFFFFFFFto indicate
- * that the queue is being created before the port.
- * - padding0: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- * response.id: Queue ID.
- */drivers/event/dlb/dlb_user.h deleted +0
-12Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
to.
- * -dir_credit_pool_id: Directed credit pool this port will belong to.
- * -ldb_credit_high_watermark: Number of load-balanced credits from the pool
- * that this port will own.
- *
- * If this port's scheduling domain does not have any load-balanced
queues,
- * this argument is ignored and the port is given no load-balanced
- * credits.
- * -dir_credit_high_watermark: Number of directed credits from the pool that
- * this port will own.
- *
- * If this port's scheduling domain does not have any directed queues,
- * this argument is ignored and the port is given no directed credits.
- * -ldb_credit_low_watermark: Load-balanced credit low watermark. When the
- * port's credits reach this watermark, they become eligible to be
- * refilled by the DLB as credits until the high watermark
- * (num_ldb_credits) is reached.
- *
- * If this port's scheduling domain does not have any load-balanced
queues,
- * this argument is ignored and the port is given no load-balanced
- * credits.
- * -dir_credit_low_watermark: Directed credit low watermark. When the port's
- * credits reach this watermark, they become eligible to be refilled by
- * the DLB as credits until the high watermark (num_dir_credits) is
- * reached.
- *
- * If this port's scheduling domain does not have any directed queues,
- * this argument is ignored and the port is given no directed credits.
- * -ldb_credit_quantum: Number of load-balanced credits for the DLB to refill
- * per refill operation.
- *
- * If this port's scheduling domain does not have any load-balanced
queues,
- * this argument is ignored and the port is given no load-balanced
- * credits.
- * -dir_credit_quantum: Number of directed credits for the DLB to refill per
- * refill operation.
- *
- * If this port's scheduling domain does not have any directed queues,
- * this argument is ignored and the port is given no directed credits.
- * - padding0: Reserved for future use.
- * -cq_depth: Depth of the port's CQ. Must be a power-of-two between 8 and
- * 1024, inclusive.
- * -cq_depth_threshold: CQ depth interrupt threshold. A value of N means that
- * the CQ interrupt won't fire until there are N or more outstanding CQ
- * tokens.
- * -cq_history_list_size: Number of history list entries. This must be greater
- * than or equal tocq_depth.
- * - padding1: Reserved for future use.
- * - padding2: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- * response.id: port ID.
- */drivers/event/dlb/dlb_user.h deleted +0
-23Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
to.
- * -dir_credit_pool_id: Directed credit pool this port will belong to.
- * -ldb_credit_high_watermark: Number of load-balanced credits from the pool
- * that this port will own.
- *
- * If this port's scheduling domain does not have any load-balanced
queues,
- * this argument is ignored and the port is given no load-balanced
- * credits.
- * -dir_credit_high_watermark: Number of directed credits from the pool that
- * this port will own.
- * -ldb_credit_low_watermark: Load-balanced credit low watermark. When the
- * port's credits reach this watermark, they become eligible to be
- * refilled by the DLB as credits until the high watermark
- * (num_ldb_credits) is reached.
- *
- * If this port's scheduling domain does not have any load-balanced
queues,
- * this argument is ignored and the port is given no load-balanced
- * credits.
- * -dir_credit_low_watermark: Directed credit low watermark. When the port's
- * credits reach this watermark, they become eligible to be refilled by
- * the DLB as credits until the high watermark (num_dir_credits) is
- * reached.
- * -ldb_credit_quantum: Number of load-balanced credits for the DLB to refill
- * per refill operation.
- *
- * If this port's scheduling domain does not have any load-balanced
queues,
- * this argument is ignored and the port is given no load-balanced
- * credits.
- * -dir_credit_quantum: Number of directed credits for the DLB to refill per
- * refill operation.
- * -cq_depth: Depth of the port's CQ. Must be a power-of-two between 8 and
- * 1024, inclusive.
- * -cq_depth_threshold: CQ depth interrupt threshold. A value of N means that
- * the CQ interrupt won't fire until there are N or more outstanding CQ
- * tokens.
- * - qid: Queue ID. If the corresponding directed queue is already created,
- * specify its ID here. Else this argument must be0xFFFFFFFFto indicate
- * that the port is being created before the queue.
- * - padding1: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- * response.id: Port ID.
- */drivers/event/dlb/dlb_user.h deleted +0
-20Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
This
- * must be called before passing QEs into the device, and no configuration
- * ioctls can be issued once the domain has started. Sending QEs into the
- * device before calling this ioctl will result in undefined behavior.
- * Input parameters:
- * - (None)
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- */drivers/event/dlb/dlb_user.h deleted +0
-8Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
port.
- * Input parameters:
- * -port_id: Load-balanced port ID.
- * - qid: Load-balanced queue ID.
- * - priority:Queue->portservice priority.
- * - padding0: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- */drivers/event/dlb/dlb_user.h deleted +0
-12Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
load-balanced
- * port.
- * Input parameters:
- * -port_id: Load-balanced port ID.
- * - qid: Load-balanced queue ID.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- */drivers/event/dlb/dlb_user.h deleted +0
-10Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
port.
- * Input parameters:
- * -port_id: Load-balanced port ID.
- * - padding0: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- */drivers/event/dlb/dlb_user.h deleted +0
-28Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
port.
- * Input parameters:
- * -port_id: Load-balanced port ID.
- * - padding0: Reserved for future use.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- */drivers/event/dlb/dlb_user.h deleted +0
-69Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
in
- * progress for a load-balanced port.
- *
- * Note: This is a snapshot; the number of unmap operations in progress
- * is subject to change at any time.
- *
- * Input parameters:
- * -port_id: Load-balanced port ID.
- *
- * Output parameters:
- * - response: pointer to a structdlb_cmd_response.
- * response.status: Detailed error code. In certain cases, such as if the
- * response pointer is invalid, the driver won't set status.
- * response.id: number of unmaps in progress.
- */drivers/event/dlb/dlb_user.h deleted +0
-10Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
(PC)
- * memory space, and producer port (PP) MMIO space. The CQ, PC, and PP
- * addresses are per-port. Every address is page-separated (e.g. LDB PP 0 is at
- *0x2100000and LDB PP 1 is at0x2101000).
- */drivers/event/dlb/dlb_user.h deleted +0
-25Lines of this file are not shown. View the raw message.
drivers/event/dlb/dlb_xstats.c deleted +0
-79Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
values */
drivers/event/dlb/dlb_xstats.c deleted +0
-1133Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/base/dlb_hw_types.h deleted +0
-34Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
issue */
drivers/event/dlb/pf/base/dlb_hw_types.h deleted +0
-14Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
DLB_PF_NUM_NON_CQ_INTERRUPT_VECTORSdrivers/event/dlb/pf/base/dlb_hw_types.h deleted +0
-80Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
them
- * with a single data structure.
- */drivers/event/dlb/pf/base/dlb_hw_types.h deleted +0
-104Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
slot)
drivers/event/dlb/pf/base/dlb_hw_types.h deleted +0
-65Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
one of
- * the following lists:
- * -- The PF's available resources list. These are unconfigured resources owned
- * by the PF and not allocated to a DLB scheduling domain.
- * -- A domain's available resources list. These are domain-owned unconfigured
- * resources.
- * -- A domain's used resources list. These are domain-owned configured
- * resources.
- *
- * A resource moves to a new list when a domain is created or destroyed, or
- * when the resource is configured.
- */drivers/event/dlb/pf/base/dlb_hw_types.h deleted +0
-24Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/base/dlb_osdep.h deleted +0
-27Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
(reg)))
drivers/event/dlb/pf/base/dlb_osdep.h deleted +0
-6Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
(reg)))
drivers/event/dlb/pf/base/dlb_osdep.h deleted +0
-8Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
queue
- * unregister acknowledgments.
- */drivers/event/dlb/pf/base/dlb_osdep.h deleted +0
-30Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
DLB_DIR_PP_BASE)
-/**
- *os_map_producer_port()- map a producer port into the caller's address space
- * @hw:dlb_hwhandle for a particular device.
- * @port_id: port ID
- * @is_ldb: true for load-balanced port, false for a directed port
- *
- * This function maps the requested producer port memory into the caller's
- * address space.
- *
- * Return:
- * Returns the base address at which the PP memory was mapped, else NULL.
- */drivers/event/dlb/pf/base/dlb_osdep.h deleted +0
-19Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
port
- * memory from the caller's address space.
- *
- * Return:
- * Returns the base address at which the PP memory was mapped, else NULL.
- */drivers/event/dlb/pf/base/dlb_osdep.h deleted +0
-2Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*/
drivers/event/dlb/pf/base/dlb_osdep.h deleted +0
-91Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
work
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function launches a thread that will run until all pending
- * map and unmap procedures are complete.
- */drivers/event/dlb/pf/base/dlb_osdep.h deleted +0
-23Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
active
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function returns a boolean indicating whether a thread (launched by
- *os_schedule_work()) is active. This function is used to determine
- * whether or not to launch a worker thread.
- */drivers/event/dlb/pf/base/dlb_osdep.h deleted +0
-74Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/base/dlb_osdep_bitmap.h deleted +0
-32Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
All
- * entries are initially zero.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise.
- *
- * Errors:
- * EINVAL - bitmap is NULL or len is 0.
- * ENOMEM - could not allocate memory for the bitmap data structure.
- */drivers/event/dlb/pf/base/dlb_osdep_bitmap.h deleted +0
-48Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
dlb_bitmap_alloc().
- */drivers/event/dlb/pf/base/dlb_osdep_bitmap.h deleted +0
-93Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
bitmap
- * length.
- */drivers/event/dlb/pf/base/dlb_osdep_bitmap.h deleted +0
-55Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
bitmap
- * length.
- */drivers/event/dlb/pf/base/dlb_osdep_bitmap.h deleted +0
-118Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
bits
- * @bitmap: pointer todlb_bitmapstructure.
- *
- * Return:
- * Returns the bitmap's longest contiguous range of set bits upon success,
- * <0 otherwise.
- *
- * Errors:
- * EINVAL - bitmap is NULL or is uninitialized.
- */drivers/event/dlb/pf/base/dlb_osdep_bitmap.h deleted +0
-30Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
of
- * the 'or' of src1 and src2.
- * @src1: pointer todlb_bitmapstructure, will be 'or'ed with src2.
- * @src2: pointer todlb_bitmapstructure, will be 'or'ed with src1.
- *
- * This function 'or's two bitmaps together and stores the result in a third
- * bitmap. The source and destination bitmaps can be the same.
- *
- * Return:
- * Returns the number of set bits upon success, <0 otherwise.
- *
- * Errors:
- * EINVAL - One of the bitmaps is NULL or is uninitialized.
- */drivers/event/dlb/pf/base/dlb_osdep_bitmap.h deleted +0
-29Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/base/dlb_osdep_list.h deleted +0
-122Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
(temporary)
- * @head: list head
- * @name: name of thedlb_list_entryfield within the containing struct
- * @iter: iterator variable
- * @iter_tmp: iterator variable (temporary)
- */
-#defineDLB_LIST_FOR_EACH_SAFE(head, ptr, ptr_tmp, name, tmp_iter, saf_iter)\drivers/event/dlb/pf/base/dlb_osdep_list.h deleted +0
-3Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/base/dlb_osdep_types.h deleted +0
-31Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/base/dlb_regs.h deleted +0
-2368Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-216Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
id)
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-497Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*rsrcs,
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-396Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
(%d -> %d)\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-6Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
their
- * function names imply, and should only be called by the dynamic CQ mapping
- * code.
- */drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-324Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
occur
- * at a later point, and <0 if an error occurred.
- */drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-356Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
domains.\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-764Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
completions.\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-399Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*port)
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-275Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
credits.\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-656Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
function's bitmap.\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-17Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
bitmap.\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-16Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
function's bitmap.\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-16Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
function's bitmap.\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-86Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
result.
- *
- * Return: returns < 0 on error, 0 otherwise.
- */drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-283Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
group_id)drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-265Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
resources\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-802Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
and
- * its resources.
- * @hw: Contains the current state of the DLB hardware.
- * @args: User-provided arguments.
- * @resp: Response to user.
- *
- * Return: returns < 0 on error, 0 otherwise. If the driver is unable to
- * satisfy a request,resp->statuswill be set accordingly.
- */drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-49Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
ports.\n",
drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-510Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
and
- * queue. The port/queue pair have the same ID and name.
- * @hw: Contains the current state of the DLB hardware.
- * @args: User-provided arguments.
- * @resp: Response to user.
- *
- * Return: returns < 0 on error, 0 otherwise. If the driver is unable to
- * satisfy a request,resp->statuswill be set accordingly.
- */drivers/event/dlb/pf/base/dlb_resource.c deleted +0
-947Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-15Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
hw
- * argument) and programs global scheduling QoS registers. This function should
- * be called during driver initialization.
- *
- * Thedlb_hwstruct must be unique per DLB device and persist until the device
- * is reset.
- *
- * Return:
- * Returns 0 upon success, -1 otherwise.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-16Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
use.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-9Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
specified
- * in args. The individual resources (queues, ports, credit pools) can be
- * configured after creating a scheduling domain.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the domain ID.
- *
- * Errors:
- * EINVAL - A requested resource is unavailable, or the requested domain name
- * is already in use.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-12Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
of
- * requested credits.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the pool ID.
- *
- * Errors:
- * EINVAL - A requested resource is unavailable, the domain is not configured,
- * or the domain has already been started.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-17Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
is
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the pool ID.
- *
- * Errors:
- * EINVAL - A requested resource is unavailable, the domain is not configured,
- * or the domain has already been started.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-16Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
is
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the queue ID.
- *
- * Errors:
- * EINVAL - A requested resource is unavailable, the domain is not configured,
- * the domain has already been started, or the requested queue name is
- * already in use.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-16Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
is
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the queue ID.
- *
- * Errors:
- * EINVAL - A requested resource is unavailable, the domain is not configured,
- * or the domain has already been started.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-13Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
IOVA.
- * @resp: response structure.
- *
- * This function creates a directed port.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the port ID.
- *
- * Errors:
- * EINVAL - A requested resource is unavailable, a credit setting is invalid, a
- * pool ID is invalid, a pointer address is not properly aligned, the
- * domain is not configured, or the domain has already been started.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-15Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
IOVA.
- * @resp: response structure.
- *
- * This function creates a load-balanced port.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the port ID.
- *
- * Errors:
- * EINVAL - A requested resource is unavailable, a credit setting is invalid, a
- * pool ID is invalid, a pointer address is not properly aligned, the
- * domain is not configured, or the domain has already been started.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-15Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
send
- * traffic through it. Once a domain is started, its resources can no longer be
- * configured (besides QID remapping and port enable/disable).
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error.
- *
- * Errors:
- * EINVAL - the domain is not configured, or the domain is already started.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-13Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
queue to
- * the specified port. Each load-balanced port can be mapped to up to 8 queues;
- * each load-balanced queue can potentially map to all the load-balanced ports.
- *
- * A successful return does not necessarily mean the mapping was configured. If
- * this function is unable to immediately map the queue to the port, it will
- * add the requested operation to a per-port list of pending map/unmap
- * operations, and (if it's not already running) launch a kernel thread that
- * periodically attempts to process all pending operations. In a sense, this is
- * an asynchronous function.
- *
- * This asynchronicity creates two views of the state of hardware: the actual
- * hardware state and the requested state (as if every request completed
- * immediately). If there are any pending map/unmap operations, the requested
- * state will differ from the actual state. All validation is performed with
- * respect to the pending state; for instance, if there are 8 pending map
- * operations for port X, a request for a 9th will fail because a load-balanced
- * port can only map up to 8 queues.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error.
- *
- * Errors:
- * EINVAL - A requested resource is unavailable, invalid port or queue ID, or
- * the domain is not configured.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-7Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
port
- * @hw:dlb_hwhandle for a particular device.
- * @domain_id: domain ID.
- * @args: unmap QID arguments.
- * @resp: response structure.
- *
- * This function configures the DLB to stop scheduling QEs from the specified
- * queue to the specified port.
- *
- * A successful return does not necessarily mean the mapping was removed. If
- * this function is unable to immediately unmap the queue from the port, it
- * will add the requested operation to a per-port list of pending map/unmap
- * operations, and (if it's not already running) launch a kernel thread that
- * periodically attempts to process all pending operations. See
- *dlb_hw_map_qid()for more details.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error.
- *
- * Errors:
- * EINVAL - A requested resource is unavailable, invalid port or queue ID, or
- * the domain is not configured.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-39Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
port.
- * Ports are enabled by default.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error.
- *
- * Errors:
- * EINVAL - The port ID is invalid or the domain is not configured.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-13Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
load-balanced
- * port. Ports are enabled by default.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error.
- *
- * Errors:
- * EINVAL - The port ID is invalid or the domain is not configured.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-17Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
is
- * assigned a detailed error code from enumdlb_error.
- *
- * Errors:
- * EINVAL - The port ID is invalid or the domain is not configured.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-13Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
port.
- * Ports are enabled by default.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error.
- *
- * Errors:
- * EINVAL - The port ID is invalid or the domain is not configured.
- * EFAULT - Internal error (resp->statusnot set).
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-7Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
interrupts
- * @hw:dlb_hwhandle for a particular device.
- * @port_id: load-balancd port ID.
- * @vector: interrupt vector ID. Should be 0 for MSI or compressed MSI-X mode,
- * else a value up to 64.
- * @mode: interrupt type (DLB_CQ_ISR_MODE_MSIorDLB_CQ_ISR_MODE_MSIX)
- * @threshold: the minimum CQ depth at which the interrupt can fire. Must be
- * greater than 0.
- *
- * This function configures the DLB registers for load-balanced CQ's interrupts.
- * This doesn't enable the CQ's interrupt; that can be done with
- *dlb_arm_cq_interrupt()or through an interrupt arm QE.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise.
- *
- * Errors:
- * EINVAL - The port ID is invalid.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-11Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
mode,
- * else a value up to 64.
- * @mode: interrupt type (DLB_CQ_ISR_MODE_MSIorDLB_CQ_ISR_MODE_MSIX)
- * @threshold: the minimum CQ depth at which the interrupt can fire. Must be
- * greater than 0.
- *
- * This function configures the DLB registers for directed CQ's interrupts.
- * This doesn't enable the CQ's interrupt; that can be done with
- *dlb_arm_cq_interrupt()or through an interrupt arm QE.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise.
- *
- * Errors:
- * EINVAL - The port ID is invalid.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-8Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
interrupts
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function configures the ingress error alarm. (Other alarms are enabled
- * by default.)
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
interrupts
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function configures the ingress error alarm. (Other alarms are disabled
- * by default.)
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-8Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
compressed
- * mode. This function should not be called if using MSI interrupts.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-9Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
to
- * calling this function.
- *
- * The function does no parameter validation; that is the caller's
- * responsibility.
- *
- * Return: returns 0 upon success, <0 otherwise.
- *
- * EINVAL - Invalid port ID.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
status
- * @hw:dlb_hwhandle for a particular device.
- * @ldb_interrupts: 2-entry array of u32 bitmaps
- * @dir_interrupts: 4-entry array of u32 bitmaps
- *
- * This function can be called from a compressed CQ interrupt handler to
- * determine which CQ interrupts have fired. The caller should take appropriate
- * (such as waking threads blocked on a CQ's interrupt) then ack the interrupts
- * withdlb_ack_compressed_cq_intr().
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-11Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
the
- * same ones passed todlb_read_compressed_cq_intr_status().
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-9Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
interrupt.
- * This function should be called from the alarm interrupt handler when
- * interrupt vectorDLB_INT_ALARMfires.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
interrupts
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function reads the alarm syndrome, logs it, notifies user-space, and
- * acks the interrupt. This function should be called from the alarm interrupt
- * handler when interrupt vectorDLB_INT_INGRESS_ERRORfires.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
queue
- * @hw:dlb_hwhandle for a particular device.
- * @group_id: sequence number group ID.
- *
- * This function returns the configured number of sequence numbers per queue
- * for the specified group.
- *
- * Return:
- * Returns-EINVALifgroup_idis invalid, else the group's SNs per queue.
- */
-intdlb_get_group_sequence_numbers(struct dlb_hw *hw, unsigned int group_id);drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-3Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
slots
- * @hw:dlb_hwhandle for a particular device.
- * @group_id: sequence number group ID.
- *
- * This function returns the group's number of in-use slots (i.e. load-balanced
- * queues using the specified group).
- *
- * Return:
- * Returns-EINVALifgroup_idis invalid, else the group's occupancy.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-5Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
queue
- * @hw:dlb_hwhandle for a particular device.
- * @group_id: sequence number group ID.
- * @val: requested amount of sequence numbers per queue.
- *
- * This function configures the group's number of sequence numbers per queue.
- * val can be a power-of-two between 32 and 1024, inclusive. This setting can
- * be configured until the first ordered load-balanced queue is configured, at
- * which point the configuration is locked.
- *
- * Return:
- * Returns 0 upon success;-EINVALifgroup_idor val is invalid,-EPERMif an
- * ordered queue is configured.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-10Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
associated
- * resources.
- *
- * Pre-condition: the driver must ensure software has stopped sending QEs
- * through this domain's producer ports before invoking this function, or
- * undefined behavior will result.
- *
- * Return:
- * Returns 0 upon success, -1 otherwise.
- *
- * EINVAL - Invalid domain ID, or the domain is not configured.
- * EFAULT - Internal error. (Possibly caused if software is the pre-condition
- * is not met.)
- * ETIMEDOUT - Hardware component didn't reset in the expected time.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
domain
- * @hw:dlb_hwhandle for a particular device.
- * @domain_id: domain ID.
- * @port_id: port ID.
- *
- * This function returns whether a load-balanced port is owned by a specified
- * domain.
- *
- * Return:
- * Returns 0 if false, 1 if true, <0 otherwise.
- *
- * EINVAL - Invalid domain or port ID, or the domain is not configured.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-6Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
domain
- * @hw:dlb_hwhandle for a particular device.
- * @domain_id: domain ID.
- * @port_id: port ID.
- *
- * This function returns whether a directed port is owned by a specified
- * domain.
- *
- * Return:
- * Returns 0 if false, 1 if true, <0 otherwise.
- *
- * EINVAL - Invalid domain or port ID, or the domain is not configured.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-6Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
resources
- * @arg: pointer to resource counts.
- *
- * This function returns the number of available resources for the PF.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-5Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
resources
- * @arg: pointer to resource counts.
- *
- * This function returns the number of resources in use by the PF. It fills in
- * the fields that args points to, except the following:
- * -max_contiguous_atomic_inflights
- * -max_contiguous_hist_list_entries
- * -max_contiguous_ldb_credits
- * -max_contiguous_dir_credits
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-5Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
hardware
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function disables certain hardware in the directed pipe,
- * necessary to workaround a DLB VAS reset issue.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
token
- * pop alarm
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function enables the PF ingress error alarm interrupt to fire when an
- * excess token pop occurs.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
token
- * pop alarm
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function disables the PF ingress error alarm interrupt to fire when an
- * excess token pop occurs.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
queue
- * @hw:dlb_hwhandle for a particular device.
- * @domain_id: domain ID.
- * @args: queue depth args
- *
- * This function returns the depth of a load-balanced queue.
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the depth.
- *
- * Errors:
- * EINVAL - Invalid domain ID or queue ID.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-15Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
is
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the depth.
- *
- * Errors:
- * EINVAL - Invalid domain ID or queue ID.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-7Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
in
- * progress for a load-balanced port.
- * @hw:dlb_hwhandle for a particular device.
- * @domain_id: domain ID.
- * @args: number of unmaps in progress args
- *
- * Return:
- * Returns 0 upon success, < 0 otherwise. If an error occurs,resp->statusis
- * assigned a detailed error code from enumdlb_error. If successful,resp->id
- * contains the number of unmaps in progress.
- *
- * Errors:
- * EINVAL - Invalid port ID.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-7Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
load-balanced
- * ports.
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function must be called prior to configuring scheduling domains.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
ports
- * @hw:dlb_hwhandle for a particular device.
- *
- * This function must be called prior to configuring scheduling domains.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-8Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
are
- * reduced to 4 bins, the mapping is:
- * - weight[1] programs bin 0
- * - weight[3] programs bin 1
- * - weight[5] programs bin 2
- * - weight[7] programs bin 3
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-8Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
are
- * reduced to 4 bins, the mapping is:
- * - weight[1] programs bin 0
- * - weight[3] programs bin 1
- * - weight[5] programs bin 2
- * - weight[7] programs bin 3
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
producer
- * ports
- * @hw:dlb_hwhandle for a particular device.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-4Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
producer
- * ports
- * @hw:dlb_hwhandle for a particular device.
- */drivers/event/dlb/pf/base/dlb_resource.h deleted +0
-17Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/dlb_main.c deleted +0
-66Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
id)
drivers/event/dlb/pf/dlb_main.c deleted +0
-53Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
offset %d\n",
drivers/event/dlb/pf/dlb_main.c deleted +0
-206Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
%d\n",
drivers/event/dlb/pf/dlb_main.c deleted +0
-12Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
%d\n",
drivers/event/dlb/pf/dlb_main.c deleted +0
-215Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/dlb_main.h deleted +0
-47Lines of this file are not shown. View the raw message.
drivers/event/dlb/pf/dlb_pf.c deleted +0
-246Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
*phys,
drivers/event/dlb/pf/dlb_pf.c deleted +0
-506Lines of this file are not shown. View the raw message.
drivers/event/dlb/rte_pmd_dlb.c deleted +0
-38Lines of this file are not shown. View the raw message.
drivers/event/dlb/rte_pmd_dlb.h deleted +0
-23Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
notice
- *
- * Selects the token pop mode for an DLB port.
- */drivers/event/dlb/rte_pmd_dlb.h deleted +0
-17Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
notice
- *
- * Configure the token pop mode for an DLB port. By default, all ports use
- *AUTO_POP. This function must be called before callingrte_event_port_setup()
- * for the port, but after callingrte_event_dev_configure().
- *
- * @note
- * Thedefer_schedvdev arg, which configures all load-balanced ports
with
- *dequeue_depth== 1 forDEFERRED_POPmode, takes precedence over this
- * function.
- *
- * @paramdev_id
- * The identifier of the event device.
- * @paramport_id
- * The identifier of the event port.
- * @param mode
- * The token pop mode.
- *
- * @return
- * - 0: Success
- * - EINVAL: Invaliddev_id,port_id, or mode
- * - EINVAL: The DLB is not configured, is already running, or the port is
- * already setup
- */drivers/event/dlb/rte_pmd_dlb.h deleted +0
-11Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
dpdk_conf.has('RTE_ARCH_ARM64'))
--
2.23.0
Part of the diff is not shown here. View the raw message.