get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/115849/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 115849,
    "url": "http://patches.dpdk.org/api/patches/115849/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220905083933.2506819-9-david.marchand@redhat.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20220905083933.2506819-9-david.marchand@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220905083933.2506819-9-david.marchand@redhat.com",
    "date": "2022-09-05T08:39:14",
    "name": "[v5,08/27] eal: deprecate RTE_FUNC_PTR_* macros",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2766e619e3761fd51fc34086191bc355d00b3c16",
    "submitter": {
        "id": 1173,
        "url": "http://patches.dpdk.org/api/people/1173/?format=api",
        "name": "David Marchand",
        "email": "david.marchand@redhat.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20220905083933.2506819-9-david.marchand@redhat.com/mbox/",
    "series": [
        {
            "id": 24531,
            "url": "http://patches.dpdk.org/api/series/24531/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=24531",
            "date": "2022-09-05T08:39:07",
            "name": "[v5,01/27] devtools: forbid inclusions of driver only headers",
            "version": 5,
            "mbox": "http://patches.dpdk.org/series/24531/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/115849/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/115849/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 23400A0547;\n\tMon,  5 Sep 2022 10:40:37 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 70D3F427F9;\n\tMon,  5 Sep 2022 10:40:22 +0200 (CEST)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by mails.dpdk.org (Postfix) with ESMTP id 10CEE4114A\n for <dev@dpdk.org>; Mon,  5 Sep 2022 10:40:20 +0200 (CEST)",
            "from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com\n [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n us-mta-216-MDQjqRLHPra5Gw12T_3uBA-1; Mon, 05 Sep 2022 04:40:09 -0400",
            "from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com\n [10.11.54.2])\n (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n (No client certificate requested)\n by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8BDB729AB3EF;\n Mon,  5 Sep 2022 08:40:08 +0000 (UTC)",
            "from fchome.redhat.com (unknown [10.40.193.251])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 8E88E4010FA4;\n Mon,  5 Sep 2022 08:40:03 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1662367220;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=NWTkRW/Dac3wTbTI+UrnbVBIs+2EjQlXZPktFBeQkSY=;\n b=X/ayv59kgfeadmtSRUCzYuaBVZI+OyMNfV5+y4Fsc4ICZzz8zof4md9IVHhOMHWCpt0FD0\n kkDUcUvQPOqPvVTBTVb8pqemAaeSJm5STP01Wyhmib7+K2sQHDDK1jpKGppGP83K40h5cc\n dagWnyRZoHOeuvx3FXJJTZAB3TELaaY=",
        "X-MC-Unique": "MDQjqRLHPra5Gw12T_3uBA-1",
        "From": "David Marchand <david.marchand@redhat.com>",
        "To": "dev@dpdk.org",
        "Cc": "thomas@monjalon.net, bruce.richardson@intel.com,\n Ray Kinsella <mdr@ashroe.eu>, Fan Zhang <roy.fan.zhang@intel.com>,\n Ashish Gupta <ashish.gupta@marvell.com>,\n Qiming Yang <qiming.yang@intel.com>, Wenjun Wu <wenjun1.wu@intel.com>,\n Shijith Thotton <sthotton@marvell.com>,\n Srisivasubramanian Srinivasan <srinivasan@marvell.com>,\n Rosen Xu <rosen.xu@intel.com>, Tianfei zhang <tianfei.zhang@intel.com>,\n Sachin Saxena <sachin.saxena@oss.nxp.com>,\n Hemant Agrawal <hemant.agrawal@nxp.com>, Akhil Goyal <gakhil@marvell.com>,\n Chengwen Feng <fengchengwen@huawei.com>,\n Kevin Laatz <kevin.laatz@intel.com>,\n Ferruh Yigit <ferruh.yigit@xilinx.com>,\n Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,\n Abhinandan Gujjar <abhinandan.gujjar@intel.com>,\n Jerin Jacob <jerinj@marvell.com>,\n Jay Jayatheerthan <jay.jayatheerthan@intel.com>,\n Olivier Matz <olivier.matz@6wind.com>, Ori Kam <orika@nvidia.com>,\n Maxime Coquelin <maxime.coquelin@redhat.com>,\n Chenbo Xia <chenbo.xia@intel.com>",
        "Subject": "[PATCH v5 08/27] eal: deprecate RTE_FUNC_PTR_* macros",
        "Date": "Mon,  5 Sep 2022 10:39:14 +0200",
        "Message-Id": "<20220905083933.2506819-9-david.marchand@redhat.com>",
        "In-Reply-To": "<20220905083933.2506819-1-david.marchand@redhat.com>",
        "References": "<20220628144643.1213026-1-david.marchand@redhat.com>\n <20220905083933.2506819-1-david.marchand@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 2.84 on 10.11.54.2",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Those macros have no real value and are easily replaced with a simple\nif() block.\n\nExisting users have been converted using a new cocci script.\nDeprecate them.\n\nSigned-off-by: David Marchand <david.marchand@redhat.com>\n---\n devtools/cocci/func_or_ret.cocci              |  12 +\n doc/guides/rel_notes/deprecation.rst          |   4 +\n doc/guides/rel_notes/release_22_11.rst        |   4 +\n drivers/common/qat/qat_device.c               |   8 +-\n drivers/common/qat/qat_qp.c                   |  31 +-\n drivers/compress/qat/qat_comp_pmd.c           |   4 +-\n .../scheduler/rte_cryptodev_scheduler.c       |   6 +-\n drivers/crypto/scheduler/scheduler_pmd_ops.c  |   6 +-\n drivers/net/ixgbe/rte_pmd_ixgbe.c             |   3 +-\n drivers/net/liquidio/lio_ethdev.c             |   3 +-\n drivers/raw/ifpga/ifpga_rawdev.c              |   6 +-\n drivers/raw/skeleton/skeleton_rawdev.c        |  21 +-\n lib/compressdev/rte_compressdev.c             |  47 +--\n lib/cryptodev/rte_cryptodev.c                 |  43 ++-\n lib/dmadev/rte_dmadev.c                       |  21 +-\n lib/dmadev/rte_dmadev.h                       |  21 +-\n lib/eal/include/rte_dev.h                     |   7 +-\n lib/ethdev/ethdev_driver.c                    |  18 +-\n lib/ethdev/ethdev_pci.h                       |   3 +-\n lib/ethdev/rte_ethdev.c                       | 276 ++++++++++++------\n lib/ethdev/rte_ethdev.h                       |   9 +-\n lib/eventdev/rte_event_crypto_adapter.c       |  10 +-\n lib/eventdev/rte_event_eth_rx_adapter.c       |  13 +-\n lib/eventdev/rte_eventdev.c                   |  62 ++--\n lib/mempool/rte_mempool_ops.c                 |   3 +-\n lib/rawdev/rte_rawdev.c                       |  75 +++--\n lib/regexdev/rte_regexdev.c                   |  59 ++--\n lib/regexdev/rte_regexdev.h                   |   6 +-\n lib/security/rte_security.c                   |   6 +-\n lib/vhost/vdpa.c                              |   9 +-\n lib/vhost/vhost_user.c                        |   6 +-\n 31 files changed, 517 insertions(+), 285 deletions(-)\n create mode 100644 devtools/cocci/func_or_ret.cocci",
    "diff": "diff --git a/devtools/cocci/func_or_ret.cocci b/devtools/cocci/func_or_ret.cocci\nnew file mode 100644\nindex 0000000000..f23d60cc4e\n--- /dev/null\n+++ b/devtools/cocci/func_or_ret.cocci\n@@ -0,0 +1,12 @@\n+@@\n+expression cond, ret;\n+@@\n+-RTE_FUNC_PTR_OR_ERR_RET(cond, ret);\n++if (cond == NULL)\n++\treturn ret;\n+@@\n+expression cond;\n+@@\n+-RTE_FUNC_PTR_OR_RET(cond);\n++if (cond == NULL)\n++\treturn;\ndiff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst\nindex dba252067c..5b4ffc992d 100644\n--- a/doc/guides/rel_notes/deprecation.rst\n+++ b/doc/guides/rel_notes/deprecation.rst\n@@ -14,6 +14,10 @@ Deprecation Notices\n * kvargs: The function ``rte_kvargs_process`` will get a new parameter\n   for returning key match count. It will ease handling of no-match case.\n \n+* eal: RTE_FUNC_PTR_OR_* macros have been marked deprecated and will be removed\n+  in the future. Applications can use ``devtools/cocci/func_or_ret.cocci``\n+  to update their code.\n+\n * eal: The function ``rte_eal_remote_launch`` will return new error codes\n   after read or write error on the pipe, instead of calling ``rte_panic``.\n \ndiff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst\nindex 3cea3aa8eb..225a380de0 100644\n--- a/doc/guides/rel_notes/release_22_11.rst\n+++ b/doc/guides/rel_notes/release_22_11.rst\n@@ -84,6 +84,10 @@ API Changes\n    Also, make sure to start the actual text at the margin.\n    =======================================================\n \n+* eal: RTE_FUNC_PTR_OR_* macros have been marked deprecated and will be removed\n+  in the future. Applications can use ``devtools/cocci/func_or_ret.cocci``\n+  to update their code.\n+\n * raw/ifgpa: The function ``rte_pmd_ifpga_get_pci_bus`` has been removed.\n \n \ndiff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c\nindex db4b087d2b..30e5cdb573 100644\n--- a/drivers/common/qat/qat_device.c\n+++ b/drivers/common/qat/qat_device.c\n@@ -58,8 +58,8 @@ qat_pci_get_extra_size(enum qat_device_gen qat_dev_gen)\n {\n \tstruct qat_dev_hw_spec_funcs *ops_hw =\n \t\tqat_dev_hw_spec[qat_dev_gen];\n-\tRTE_FUNC_PTR_OR_ERR_RET(ops_hw->qat_dev_get_extra_size,\n-\t\t-ENOTSUP);\n+\tif (ops_hw->qat_dev_get_extra_size == NULL)\n+\t\treturn -ENOTSUP;\n \treturn ops_hw->qat_dev_get_extra_size();\n }\n \n@@ -381,8 +381,8 @@ static int qat_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,\n \t\treturn -ENODEV;\n \n \tops_hw = qat_dev_hw_spec[qat_pci_dev->qat_dev_gen];\n-\tRTE_FUNC_PTR_OR_ERR_RET(ops_hw->qat_dev_reset_ring_pairs,\n-\t\t-ENOTSUP);\n+\tif (ops_hw->qat_dev_reset_ring_pairs == NULL)\n+\t\treturn -ENOTSUP;\n \tif (ops_hw->qat_dev_reset_ring_pairs(qat_pci_dev)) {\n \t\tQAT_LOG(ERR,\n \t\t\t\"Cannot reset ring pairs, does pf driver supports pf2vf comms?\"\ndiff --git a/drivers/common/qat/qat_qp.c b/drivers/common/qat/qat_qp.c\nindex 08ac91eac4..8674eccdca 100644\n--- a/drivers/common/qat/qat_qp.c\n+++ b/drivers/common/qat/qat_qp.c\n@@ -370,8 +370,8 @@ adf_queue_arb_enable(struct qat_pci_device *qat_dev, struct qat_queue *txq,\n \tstruct qat_qp_hw_spec_funcs *ops =\n \t\tqat_qp_hw_spec[qat_dev->qat_dev_gen];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(ops->qat_qp_adf_arb_enable,\n-\t\t\t-ENOTSUP);\n+\tif (ops->qat_qp_adf_arb_enable == NULL)\n+\t\treturn -ENOTSUP;\n \tops->qat_qp_adf_arb_enable(txq, base_addr, lock);\n \treturn 0;\n }\n@@ -383,8 +383,8 @@ adf_queue_arb_disable(enum qat_device_gen qat_dev_gen, struct qat_queue *txq,\n \tstruct qat_qp_hw_spec_funcs *ops =\n \t\tqat_qp_hw_spec[qat_dev_gen];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(ops->qat_qp_adf_arb_disable,\n-\t\t\t-ENOTSUP);\n+\tif (ops->qat_qp_adf_arb_disable == NULL)\n+\t\treturn -ENOTSUP;\n \tops->qat_qp_adf_arb_disable(txq, base_addr, lock);\n \treturn 0;\n }\n@@ -396,8 +396,8 @@ qat_qp_build_ring_base(struct qat_pci_device *qat_dev, void *io_addr,\n \tstruct qat_qp_hw_spec_funcs *ops =\n \t\tqat_qp_hw_spec[qat_dev->qat_dev_gen];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(ops->qat_qp_build_ring_base,\n-\t\t\t-ENOTSUP);\n+\tif (ops->qat_qp_build_ring_base == NULL)\n+\t\treturn -ENOTSUP;\n \tops->qat_qp_build_ring_base(io_addr, queue);\n \treturn 0;\n }\n@@ -409,8 +409,8 @@ qat_qps_per_service(struct qat_pci_device *qat_dev,\n \tstruct qat_qp_hw_spec_funcs *ops =\n \t\tqat_qp_hw_spec[qat_dev->qat_dev_gen];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(ops->qat_qp_rings_per_service,\n-\t\t\t-ENOTSUP);\n+\tif (ops->qat_qp_rings_per_service == NULL)\n+\t\treturn -ENOTSUP;\n \treturn ops->qat_qp_rings_per_service(qat_dev, service);\n }\n \n@@ -421,7 +421,8 @@ qat_qp_get_hw_data(struct qat_pci_device *qat_dev,\n \tstruct qat_qp_hw_spec_funcs *ops =\n \t\tqat_qp_hw_spec[qat_dev->qat_dev_gen];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(ops->qat_qp_get_hw_data, NULL);\n+\tif (ops->qat_qp_get_hw_data == NULL)\n+\t\treturn NULL;\n \treturn ops->qat_qp_get_hw_data(qat_dev, service, qp_id);\n }\n \n@@ -431,8 +432,8 @@ qat_read_qp_config(struct qat_pci_device *qat_dev)\n \tstruct qat_dev_hw_spec_funcs *ops_hw =\n \t\tqat_dev_hw_spec[qat_dev->qat_dev_gen];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(ops_hw->qat_dev_read_config,\n-\t\t\t-ENOTSUP);\n+\tif (ops_hw->qat_dev_read_config == NULL)\n+\t\treturn -ENOTSUP;\n \treturn ops_hw->qat_dev_read_config(qat_dev);\n }\n \n@@ -442,8 +443,8 @@ adf_configure_queues(struct qat_qp *qp, enum qat_device_gen qat_dev_gen)\n \tstruct qat_qp_hw_spec_funcs *ops =\n \t\tqat_qp_hw_spec[qat_dev_gen];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(ops->qat_qp_adf_configure_queues,\n-\t\t\t-ENOTSUP);\n+\tif (ops->qat_qp_adf_configure_queues == NULL)\n+\t\treturn -ENOTSUP;\n \tops->qat_qp_adf_configure_queues(qp);\n \treturn 0;\n }\n@@ -483,8 +484,8 @@ qat_qp_csr_setup(struct qat_pci_device *qat_dev,\n \tstruct qat_qp_hw_spec_funcs *ops =\n \t\tqat_qp_hw_spec[qat_dev->qat_dev_gen];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(ops->qat_qp_csr_setup,\n-\t\t\t-ENOTSUP);\n+\tif (ops->qat_qp_csr_setup == NULL)\n+\t\treturn -ENOTSUP;\n \tops->qat_qp_csr_setup(qat_dev, io_addr, qp);\n \treturn 0;\n }\ndiff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c\nindex dc8db84a68..6fb8cf69be 100644\n--- a/drivers/compress/qat/qat_comp_pmd.c\n+++ b/drivers/compress/qat/qat_comp_pmd.c\n@@ -25,8 +25,8 @@ qat_comp_capabilities_info qat_comp_get_capa_info(\n \n \tif (qat_dev_gen >= QAT_N_GENS)\n \t\treturn ret;\n-\tRTE_FUNC_PTR_OR_ERR_RET(qat_comp_gen_dev_ops[qat_dev_gen]\n-\t\t\t.qat_comp_get_capabilities, ret);\n+\tif (qat_comp_gen_dev_ops[qat_dev_gen].qat_comp_get_capabilities == NULL)\n+\t\treturn ret;\n \treturn qat_comp_gen_dev_ops[qat_dev_gen]\n \t\t\t.qat_comp_get_capabilities(qat_dev);\n }\ndiff --git a/drivers/crypto/scheduler/rte_cryptodev_scheduler.c b/drivers/crypto/scheduler/rte_cryptodev_scheduler.c\nindex 1e0c4fe464..258d6f8c43 100644\n--- a/drivers/crypto/scheduler/rte_cryptodev_scheduler.c\n+++ b/drivers/crypto/scheduler/rte_cryptodev_scheduler.c\n@@ -541,7 +541,8 @@ rte_cryptodev_scheduler_option_set(uint8_t scheduler_id,\n \n \tsched_ctx = dev->data->dev_private;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*sched_ctx->ops.option_set, -ENOTSUP);\n+\tif (*sched_ctx->ops.option_set == NULL)\n+\t\treturn -ENOTSUP;\n \n \treturn (*sched_ctx->ops.option_set)(dev, option_type, option);\n }\n@@ -571,7 +572,8 @@ rte_cryptodev_scheduler_option_get(uint8_t scheduler_id,\n \n \tsched_ctx = dev->data->dev_private;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*sched_ctx->ops.option_get, -ENOTSUP);\n+\tif (*sched_ctx->ops.option_get == NULL)\n+\t\treturn -ENOTSUP;\n \n \treturn (*sched_ctx->ops.option_get)(dev, option_type, option);\n }\ndiff --git a/drivers/crypto/scheduler/scheduler_pmd_ops.c b/drivers/crypto/scheduler/scheduler_pmd_ops.c\nindex f3a1bd626c..83ae6b6be9 100644\n--- a/drivers/crypto/scheduler/scheduler_pmd_ops.c\n+++ b/drivers/crypto/scheduler/scheduler_pmd_ops.c\n@@ -160,7 +160,8 @@ scheduler_pmd_start(struct rte_cryptodev *dev)\n \t\treturn -1;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*sched_ctx->ops.worker_attach, -ENOTSUP);\n+\tif (*sched_ctx->ops.worker_attach == NULL)\n+\t\treturn -ENOTSUP;\n \n \tfor (i = 0; i < sched_ctx->nb_workers; i++) {\n \t\tuint8_t worker_dev_id = sched_ctx->workers[i].dev_id;\n@@ -171,7 +172,8 @@ scheduler_pmd_start(struct rte_cryptodev *dev)\n \t\t}\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*sched_ctx->ops.scheduler_start, -ENOTSUP);\n+\tif (*sched_ctx->ops.scheduler_start == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif ((*sched_ctx->ops.scheduler_start)(dev) < 0) {\n \t\tCR_SCHED_LOG(ERR, \"Scheduler start failed\");\ndiff --git a/drivers/net/ixgbe/rte_pmd_ixgbe.c b/drivers/net/ixgbe/rte_pmd_ixgbe.c\nindex 9729f8575f..89fe3a828a 100644\n--- a/drivers/net/ixgbe/rte_pmd_ixgbe.c\n+++ b/drivers/net/ixgbe/rte_pmd_ixgbe.c\n@@ -291,7 +291,8 @@ rte_pmd_ixgbe_set_vf_vlan_stripq(uint16_t port, uint16_t vf, uint8_t on)\n \tif (on > 1)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_strip_queue_set, -ENOTSUP);\n+\tif (*dev->dev_ops->vlan_strip_queue_set == NULL)\n+\t\treturn -ENOTSUP;\n \n \t/* The PF has 128 queue pairs and in SRIOV configuration\n \t * those queues will be assigned to VF's, so RXDCTL\ndiff --git a/drivers/net/liquidio/lio_ethdev.c b/drivers/net/liquidio/lio_ethdev.c\nindex 90ffe31b9f..ebcfbb1a5c 100644\n--- a/drivers/net/liquidio/lio_ethdev.c\n+++ b/drivers/net/liquidio/lio_ethdev.c\n@@ -281,7 +281,8 @@ lio_dev_xstats_reset(struct rte_eth_dev *eth_dev)\n \t}\n \n \t/* clear stored per queue stats */\n-\tRTE_FUNC_PTR_OR_ERR_RET(*eth_dev->dev_ops->stats_reset, 0);\n+\tif (*eth_dev->dev_ops->stats_reset == NULL)\n+\t\treturn 0;\n \treturn (*eth_dev->dev_ops->stats_reset)(eth_dev);\n }\n \ndiff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c\nindex 78a7123528..3b616c45ff 100644\n--- a/drivers/raw/ifpga/ifpga_rawdev.c\n+++ b/drivers/raw/ifpga/ifpga_rawdev.c\n@@ -713,7 +713,8 @@ ifpga_rawdev_configure(const struct rte_rawdev *dev,\n {\n \tIFPGA_RAWDEV_PMD_FUNC_TRACE();\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL);\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n \n \treturn config ? 0 : 1;\n }\n@@ -726,7 +727,8 @@ ifpga_rawdev_start(struct rte_rawdev *dev)\n \n \tIFPGA_RAWDEV_PMD_FUNC_TRACE();\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL);\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n \n \tadapter = ifpga_rawdev_get_priv(dev);\n \tif (!adapter)\ndiff --git a/drivers/raw/skeleton/skeleton_rawdev.c b/drivers/raw/skeleton/skeleton_rawdev.c\nindex 16ecae3d92..72d3b69d75 100644\n--- a/drivers/raw/skeleton/skeleton_rawdev.c\n+++ b/drivers/raw/skeleton/skeleton_rawdev.c\n@@ -76,7 +76,8 @@ static int skeleton_rawdev_configure(const struct rte_rawdev *dev,\n \n \tSKELETON_PMD_FUNC_TRACE();\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL);\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n \n \tif (config == NULL || config_size != sizeof(*skeldev_conf)) {\n \t\tSKELETON_PMD_ERR(\"Invalid configuration\");\n@@ -106,7 +107,8 @@ static int skeleton_rawdev_start(struct rte_rawdev *dev)\n \n \tSKELETON_PMD_FUNC_TRACE();\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL);\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n \n \tskeldev = skeleton_rawdev_get_priv(dev);\n \n@@ -169,7 +171,8 @@ static int skeleton_rawdev_close(struct rte_rawdev *dev)\n \n \tSKELETON_PMD_FUNC_TRACE();\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL);\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n \n \tskeldev = skeleton_rawdev_get_priv(dev);\n \n@@ -212,7 +215,8 @@ static int skeleton_rawdev_reset(struct rte_rawdev *dev)\n \n \tSKELETON_PMD_FUNC_TRACE();\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL);\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n \n \tskeldev = skeleton_rawdev_get_priv(dev);\n \n@@ -295,7 +299,8 @@ static int skeleton_rawdev_queue_release(struct rte_rawdev *dev,\n \n \tSKELETON_PMD_FUNC_TRACE();\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL);\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n \n \tskeldev = skeleton_rawdev_get_priv(dev);\n \n@@ -317,7 +322,8 @@ static uint16_t skeleton_rawdev_queue_count(struct rte_rawdev *dev)\n \n \tSKELETON_PMD_FUNC_TRACE();\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL);\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n \n \tskeldev = skeleton_rawdev_get_priv(dev);\n \treturn skeldev->num_queues;\n@@ -468,7 +474,8 @@ static int skeleton_rawdev_firmware_status_get(struct rte_rawdev *dev,\n \n \tskeldev = skeleton_rawdev_get_priv(dev);\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev, -EINVAL);\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n \n \tif (status_info)\n \t\tmemcpy(status_info, &skeldev->fw.firmware_state,\ndiff --git a/lib/compressdev/rte_compressdev.c b/lib/compressdev/rte_compressdev.c\nindex 22c438f2dd..5ddbc3f9c0 100644\n--- a/lib/compressdev/rte_compressdev.c\n+++ b/lib/compressdev/rte_compressdev.c\n@@ -315,7 +315,8 @@ rte_compressdev_queue_pairs_config(struct rte_compressdev *dev,\n \n \tmemset(&dev_info, 0, sizeof(struct rte_compressdev_info));\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_infos_get == NULL)\n+\t\treturn -ENOTSUP;\n \t(*dev->dev_ops->dev_infos_get)(dev, &dev_info);\n \n \tif ((dev_info.max_nb_queue_pairs != 0) &&\n@@ -344,8 +345,8 @@ rte_compressdev_queue_pairs_config(struct rte_compressdev *dev,\n \n \t\tqp = dev->data->queue_pairs;\n \n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_pair_release,\n-\t\t\t\t-ENOTSUP);\n+\t\tif (*dev->dev_ops->queue_pair_release == NULL)\n+\t\t\treturn -ENOTSUP;\n \n \t\tfor (i = nb_qpairs; i < old_nb_queues; i++) {\n \t\t\tret = (*dev->dev_ops->queue_pair_release)(dev, i);\n@@ -395,8 +396,8 @@ rte_compressdev_queue_pairs_release(struct rte_compressdev *dev)\n \tCOMPRESSDEV_LOG(DEBUG, \"Free %d queues pairs on device %u\",\n \t\t\tdev->data->nb_queue_pairs, dev->data->dev_id);\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_pair_release,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->queue_pair_release == NULL)\n+\t\treturn -ENOTSUP;\n \n \tfor (i = 0; i < num_qps; i++) {\n \t\tret = (*dev->dev_ops->queue_pair_release)(dev, i);\n@@ -430,7 +431,8 @@ rte_compressdev_configure(uint8_t dev_id, struct rte_compressdev_config *config)\n \t\treturn -EBUSY;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_configure == NULL)\n+\t\treturn -ENOTSUP;\n \n \t/* Setup new number of queue pairs and reconfigure device. */\n \tdiag = rte_compressdev_queue_pairs_config(dev, config->nb_queue_pairs,\n@@ -460,7 +462,8 @@ rte_compressdev_start(uint8_t dev_id)\n \n \tdev = &rte_comp_devices[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_start, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_start == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (dev->data->dev_started != 0) {\n \t\tCOMPRESSDEV_LOG(ERR,\n@@ -489,7 +492,8 @@ rte_compressdev_stop(uint8_t dev_id)\n \n \tdev = &rte_comp_devices[dev_id];\n \n-\tRTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_stop);\n+\tif (*dev->dev_ops->dev_stop == NULL)\n+\t\treturn;\n \n \tif (dev->data->dev_started == 0) {\n \t\tCOMPRESSDEV_LOG(ERR,\n@@ -527,7 +531,8 @@ rte_compressdev_close(uint8_t dev_id)\n \tif (retval < 0)\n \t\treturn retval;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_close == NULL)\n+\t\treturn -ENOTSUP;\n \tretval = (*dev->dev_ops->dev_close)(dev);\n \n \tif (retval < 0)\n@@ -565,7 +570,8 @@ rte_compressdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_pair_setup, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_pair_setup == NULL)\n+\t\treturn -ENOTSUP;\n \n \treturn (*dev->dev_ops->queue_pair_setup)(dev, queue_pair_id,\n \t\t\tmax_inflight_ops, socket_id);\n@@ -611,7 +617,8 @@ rte_compressdev_stats_get(uint8_t dev_id, struct rte_compressdev_stats *stats)\n \tdev = &rte_comp_devices[dev_id];\n \tmemset(stats, 0, sizeof(*stats));\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_get, -ENOTSUP);\n+\tif (*dev->dev_ops->stats_get == NULL)\n+\t\treturn -ENOTSUP;\n \t(*dev->dev_ops->stats_get)(dev, stats);\n \treturn 0;\n }\n@@ -628,7 +635,8 @@ rte_compressdev_stats_reset(uint8_t dev_id)\n \n \tdev = &rte_comp_devices[dev_id];\n \n-\tRTE_FUNC_PTR_OR_RET(*dev->dev_ops->stats_reset);\n+\tif (*dev->dev_ops->stats_reset == NULL)\n+\t\treturn;\n \t(*dev->dev_ops->stats_reset)(dev);\n }\n \n@@ -647,7 +655,8 @@ rte_compressdev_info_get(uint8_t dev_id, struct rte_compressdev_info *dev_info)\n \n \tmemset(dev_info, 0, sizeof(struct rte_compressdev_info));\n \n-\tRTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);\n+\tif (*dev->dev_ops->dev_infos_get == NULL)\n+\t\treturn;\n \t(*dev->dev_ops->dev_infos_get)(dev, dev_info);\n \n \tdev_info->driver_name = dev->device->driver->name;\n@@ -666,7 +675,8 @@ rte_compressdev_private_xform_create(uint8_t dev_id,\n \tif (xform == NULL || priv_xform == NULL || dev == NULL)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->private_xform_create, -ENOTSUP);\n+\tif (*dev->dev_ops->private_xform_create == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->private_xform_create)(dev, xform, priv_xform);\n \tif (ret < 0) {\n \t\tCOMPRESSDEV_LOG(ERR,\n@@ -689,7 +699,8 @@ rte_compressdev_private_xform_free(uint8_t dev_id, void *priv_xform)\n \tif (dev == NULL || priv_xform == NULL)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->private_xform_free, -ENOTSUP);\n+\tif (*dev->dev_ops->private_xform_free == NULL)\n+\t\treturn -ENOTSUP;\n \tret = dev->dev_ops->private_xform_free(dev, priv_xform);\n \tif (ret < 0) {\n \t\tCOMPRESSDEV_LOG(ERR,\n@@ -714,7 +725,8 @@ rte_compressdev_stream_create(uint8_t dev_id,\n \tif (xform == NULL || dev == NULL || stream == NULL)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stream_create, -ENOTSUP);\n+\tif (*dev->dev_ops->stream_create == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->stream_create)(dev, xform, stream);\n \tif (ret < 0) {\n \t\tCOMPRESSDEV_LOG(ERR,\n@@ -738,7 +750,8 @@ rte_compressdev_stream_free(uint8_t dev_id, void *stream)\n \tif (dev == NULL || stream == NULL)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stream_free, -ENOTSUP);\n+\tif (*dev->dev_ops->stream_free == NULL)\n+\t\treturn -ENOTSUP;\n \tret = dev->dev_ops->stream_free(dev, stream);\n \tif (ret < 0) {\n \t\tCOMPRESSDEV_LOG(ERR,\ndiff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c\nindex 42f3221052..6250302f3b 100644\n--- a/lib/cryptodev/rte_cryptodev.c\n+++ b/lib/cryptodev/rte_cryptodev.c\n@@ -978,7 +978,8 @@ rte_cryptodev_queue_pairs_config(struct rte_cryptodev *dev, uint16_t nb_qpairs,\n \n \tmemset(&dev_info, 0, sizeof(struct rte_cryptodev_info));\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_infos_get == NULL)\n+\t\treturn -ENOTSUP;\n \t(*dev->dev_ops->dev_infos_get)(dev, &dev_info);\n \n \tif (nb_qpairs > (dev_info.max_nb_queue_pairs)) {\n@@ -1007,8 +1008,8 @@ rte_cryptodev_queue_pairs_config(struct rte_cryptodev *dev, uint16_t nb_qpairs,\n \n \t\tqp = dev->data->queue_pairs;\n \n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_pair_release,\n-\t\t\t\t-ENOTSUP);\n+\t\tif (*dev->dev_ops->queue_pair_release == NULL)\n+\t\t\treturn -ENOTSUP;\n \n \t\tfor (i = nb_qpairs; i < old_nb_queues; i++) {\n \t\t\tret = (*dev->dev_ops->queue_pair_release)(dev, i);\n@@ -1041,7 +1042,8 @@ rte_cryptodev_configure(uint8_t dev_id, struct rte_cryptodev_config *config)\n \t\treturn -EBUSY;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_configure == NULL)\n+\t\treturn -ENOTSUP;\n \n \trte_spinlock_lock(&rte_cryptodev_callback_lock);\n \tcryptodev_cb_cleanup(dev);\n@@ -1083,7 +1085,8 @@ rte_cryptodev_start(uint8_t dev_id)\n \n \tdev = &rte_crypto_devices[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_start, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_start == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (dev->data->dev_started != 0) {\n \t\tCDEV_LOG_ERR(\"Device with dev_id=%\" PRIu8 \" already started\",\n@@ -1116,7 +1119,8 @@ rte_cryptodev_stop(uint8_t dev_id)\n \n \tdev = &rte_crypto_devices[dev_id];\n \n-\tRTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_stop);\n+\tif (*dev->dev_ops->dev_stop == NULL)\n+\t\treturn;\n \n \tif (dev->data->dev_started == 0) {\n \t\tCDEV_LOG_ERR(\"Device with dev_id=%\" PRIu8 \" already stopped\",\n@@ -1163,7 +1167,8 @@ rte_cryptodev_close(uint8_t dev_id)\n \t\t}\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_close == NULL)\n+\t\treturn -ENOTSUP;\n \tretval = (*dev->dev_ops->dev_close)(dev);\n \trte_cryptodev_trace_close(dev_id, retval);\n \n@@ -1262,7 +1267,8 @@ rte_cryptodev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,\n \t\treturn -EBUSY;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_pair_setup, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_pair_setup == NULL)\n+\t\treturn -ENOTSUP;\n \n \trte_cryptodev_trace_queue_pair_setup(dev_id, queue_pair_id, qp_conf);\n \treturn (*dev->dev_ops->queue_pair_setup)(dev, queue_pair_id, qp_conf,\n@@ -1557,7 +1563,8 @@ rte_cryptodev_stats_get(uint8_t dev_id, struct rte_cryptodev_stats *stats)\n \tdev = &rte_crypto_devices[dev_id];\n \tmemset(stats, 0, sizeof(*stats));\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_get, -ENOTSUP);\n+\tif (*dev->dev_ops->stats_get == NULL)\n+\t\treturn -ENOTSUP;\n \t(*dev->dev_ops->stats_get)(dev, stats);\n \treturn 0;\n }\n@@ -1574,7 +1581,8 @@ rte_cryptodev_stats_reset(uint8_t dev_id)\n \n \tdev = &rte_crypto_devices[dev_id];\n \n-\tRTE_FUNC_PTR_OR_RET(*dev->dev_ops->stats_reset);\n+\tif (*dev->dev_ops->stats_reset == NULL)\n+\t\treturn;\n \t(*dev->dev_ops->stats_reset)(dev);\n }\n \n@@ -1592,7 +1600,8 @@ rte_cryptodev_info_get(uint8_t dev_id, struct rte_cryptodev_info *dev_info)\n \n \tmemset(dev_info, 0, sizeof(struct rte_cryptodev_info));\n \n-\tRTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_infos_get);\n+\tif (*dev->dev_ops->dev_infos_get == NULL)\n+\t\treturn;\n \t(*dev->dev_ops->dev_infos_get)(dev, dev_info);\n \n \tdev_info->driver_name = dev->device->driver->name;\n@@ -1739,7 +1748,8 @@ rte_cryptodev_sym_session_init(uint8_t dev_id,\n \tif (index >= sess->nb_drivers)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->sym_session_configure, -ENOTSUP);\n+\tif (*dev->dev_ops->sym_session_configure == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (sess->sess_data[index].refcnt == 0) {\n \t\tret = dev->dev_ops->sym_session_configure(dev, xforms,\n@@ -1968,7 +1978,8 @@ rte_cryptodev_asym_session_create(uint8_t dev_id,\n \t/* Clear device session pointer.*/\n \tmemset(sess->sess_private_data, 0, session_priv_data_sz + sess->user_data_sz);\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->asym_session_configure, -ENOTSUP);\n+\tif (*dev->dev_ops->asym_session_configure == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (sess->sess_private_data[0] == 0) {\n \t\tret = dev->dev_ops->asym_session_configure(dev, xforms, sess);\n@@ -2007,7 +2018,8 @@ rte_cryptodev_sym_session_clear(uint8_t dev_id,\n \tif (--sess->sess_data[driver_id].refcnt != 0)\n \t\treturn -EBUSY;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->sym_session_clear, -ENOTSUP);\n+\tif (*dev->dev_ops->sym_session_clear == NULL)\n+\t\treturn -ENOTSUP;\n \n \tdev->dev_ops->sym_session_clear(dev, sess);\n \n@@ -2054,7 +2066,8 @@ rte_cryptodev_asym_session_free(uint8_t dev_id, void *sess)\n \tif (dev == NULL || sess == NULL)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->asym_session_clear, -ENOTSUP);\n+\tif (*dev->dev_ops->asym_session_clear == NULL)\n+\t\treturn -ENOTSUP;\n \n \tdev->dev_ops->asym_session_clear(dev, sess);\n \ndiff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c\nindex 174d4c40ae..d575c14493 100644\n--- a/lib/dmadev/rte_dmadev.c\n+++ b/lib/dmadev/rte_dmadev.c\n@@ -420,7 +420,8 @@ rte_dma_info_get(int16_t dev_id, struct rte_dma_info *dev_info)\n \tif (!rte_dma_is_valid(dev_id) || dev_info == NULL)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_info_get, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_info_get == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(dev_info, 0, sizeof(struct rte_dma_info));\n \tret = (*dev->dev_ops->dev_info_get)(dev, dev_info,\n \t\t\t\t\t    sizeof(struct rte_dma_info));\n@@ -472,7 +473,8 @@ rte_dma_configure(int16_t dev_id, const struct rte_dma_conf *dev_conf)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_configure == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->dev_configure)(dev, dev_conf,\n \t\t\t\t\t     sizeof(struct rte_dma_conf));\n \tif (ret == 0)\n@@ -555,7 +557,8 @@ rte_dma_close(int16_t dev_id)\n \t\treturn -EBUSY;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_close == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->dev_close)(dev);\n \tif (ret == 0)\n \t\tdma_release(dev);\n@@ -648,7 +651,8 @@ rte_dma_vchan_setup(int16_t dev_id, uint16_t vchan,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vchan_setup, -ENOTSUP);\n+\tif (*dev->dev_ops->vchan_setup == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->vchan_setup)(dev, vchan, conf,\n \t\t\t\t\tsizeof(struct rte_dma_vchan_conf));\n }\n@@ -668,7 +672,8 @@ rte_dma_stats_get(int16_t dev_id, uint16_t vchan, struct rte_dma_stats *stats)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_get, -ENOTSUP);\n+\tif (*dev->dev_ops->stats_get == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(stats, 0, sizeof(struct rte_dma_stats));\n \treturn (*dev->dev_ops->stats_get)(dev, vchan, stats,\n \t\t\t\t\t  sizeof(struct rte_dma_stats));\n@@ -689,7 +694,8 @@ rte_dma_stats_reset(int16_t dev_id, uint16_t vchan)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_reset, -ENOTSUP);\n+\tif (*dev->dev_ops->stats_reset == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->stats_reset)(dev, vchan);\n }\n \n@@ -706,7 +712,8 @@ rte_dma_vchan_status(int16_t dev_id, uint16_t vchan, enum rte_dma_vchan_status *\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vchan_status, -ENOTSUP);\n+\tif (*dev->dev_ops->vchan_status == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->vchan_status)(dev, vchan, status);\n }\n \ndiff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h\nindex e7f992b734..e61d71959e 100644\n--- a/lib/dmadev/rte_dmadev.h\n+++ b/lib/dmadev/rte_dmadev.h\n@@ -860,7 +860,8 @@ rte_dma_copy(int16_t dev_id, uint16_t vchan, rte_iova_t src, rte_iova_t dst,\n #ifdef RTE_DMADEV_DEBUG\n \tif (!rte_dma_is_valid(dev_id) || length == 0)\n \t\treturn -EINVAL;\n-\tRTE_FUNC_PTR_OR_ERR_RET(*obj->copy, -ENOTSUP);\n+\tif (*obj->copy == NULL)\n+\t\treturn -ENOTSUP;\n #endif\n \n \treturn (*obj->copy)(obj->dev_private, vchan, src, dst, length, flags);\n@@ -911,7 +912,8 @@ rte_dma_copy_sg(int16_t dev_id, uint16_t vchan, struct rte_dma_sge *src,\n \tif (!rte_dma_is_valid(dev_id) || src == NULL || dst == NULL ||\n \t    nb_src == 0 || nb_dst == 0)\n \t\treturn -EINVAL;\n-\tRTE_FUNC_PTR_OR_ERR_RET(*obj->copy_sg, -ENOTSUP);\n+\tif (*obj->copy_sg == NULL)\n+\t\treturn -ENOTSUP;\n #endif\n \n \treturn (*obj->copy_sg)(obj->dev_private, vchan, src, dst, nb_src,\n@@ -957,7 +959,8 @@ rte_dma_fill(int16_t dev_id, uint16_t vchan, uint64_t pattern,\n #ifdef RTE_DMADEV_DEBUG\n \tif (!rte_dma_is_valid(dev_id) || length == 0)\n \t\treturn -EINVAL;\n-\tRTE_FUNC_PTR_OR_ERR_RET(*obj->fill, -ENOTSUP);\n+\tif (*obj->fill == NULL)\n+\t\treturn -ENOTSUP;\n #endif\n \n \treturn (*obj->fill)(obj->dev_private, vchan, pattern, dst, length,\n@@ -990,7 +993,8 @@ rte_dma_submit(int16_t dev_id, uint16_t vchan)\n #ifdef RTE_DMADEV_DEBUG\n \tif (!rte_dma_is_valid(dev_id))\n \t\treturn -EINVAL;\n-\tRTE_FUNC_PTR_OR_ERR_RET(*obj->submit, -ENOTSUP);\n+\tif (*obj->submit == NULL)\n+\t\treturn -ENOTSUP;\n #endif\n \n \treturn (*obj->submit)(obj->dev_private, vchan);\n@@ -1033,7 +1037,8 @@ rte_dma_completed(int16_t dev_id, uint16_t vchan, const uint16_t nb_cpls,\n #ifdef RTE_DMADEV_DEBUG\n \tif (!rte_dma_is_valid(dev_id) || nb_cpls == 0)\n \t\treturn 0;\n-\tRTE_FUNC_PTR_OR_ERR_RET(*obj->completed, 0);\n+\tif (*obj->completed == NULL)\n+\t\treturn 0;\n #endif\n \n \t/* Ensure the pointer values are non-null to simplify drivers.\n@@ -1095,7 +1100,8 @@ rte_dma_completed_status(int16_t dev_id, uint16_t vchan,\n #ifdef RTE_DMADEV_DEBUG\n \tif (!rte_dma_is_valid(dev_id) || nb_cpls == 0 || status == NULL)\n \t\treturn 0;\n-\tRTE_FUNC_PTR_OR_ERR_RET(*obj->completed_status, 0);\n+\tif (*obj->completed_status == NULL)\n+\t\treturn 0;\n #endif\n \n \tif (last_idx == NULL)\n@@ -1129,7 +1135,8 @@ rte_dma_burst_capacity(int16_t dev_id, uint16_t vchan)\n #ifdef RTE_DMADEV_DEBUG\n \tif (!rte_dma_is_valid(dev_id))\n \t\treturn 0;\n-\tRTE_FUNC_PTR_OR_ERR_RET(*obj->burst_capacity, 0);\n+\tif (*obj->burst_capacity == NULL)\n+\t\treturn 0;\n #endif\n \treturn (*obj->burst_capacity)(obj->dev_private, vchan);\n }\ndiff --git a/lib/eal/include/rte_dev.h b/lib/eal/include/rte_dev.h\nindex e6ff1218f9..2743c09320 100644\n--- a/lib/eal/include/rte_dev.h\n+++ b/lib/eal/include/rte_dev.h\n@@ -20,6 +20,7 @@ extern \"C\" {\n #include <stdio.h>\n \n #include <rte_config.h>\n+#include <rte_common.h>\n #include <rte_compat.h>\n #include <rte_log.h>\n \n@@ -37,12 +38,14 @@ typedef void (*rte_dev_event_cb_fn)(const char *device_name,\n \t\t\t\t\tvoid *cb_arg);\n \n /* Macros to check for invalid function pointers */\n-#define RTE_FUNC_PTR_OR_ERR_RET(func, retval) do { \\\n+#define RTE_FUNC_PTR_OR_ERR_RET(func, retval) RTE_DEPRECATED(RTE_FUNC_PTR_OR_ERR_RET) \\\n+do { \\\n \tif ((func) == NULL) \\\n \t\treturn retval; \\\n } while (0)\n \n-#define RTE_FUNC_PTR_OR_RET(func) do { \\\n+#define RTE_FUNC_PTR_OR_RET(func) RTE_DEPRECATED(RTE_FUNC_PTR_OR_RET) \\\n+do { \\\n \tif ((func) == NULL) \\\n \t\treturn; \\\n } while (0)\ndiff --git a/lib/ethdev/ethdev_driver.c b/lib/ethdev/ethdev_driver.c\nindex a285f213f0..24a3969225 100644\n--- a/lib/ethdev/ethdev_driver.c\n+++ b/lib/ethdev/ethdev_driver.c\n@@ -264,7 +264,8 @@ rte_eth_dev_create(struct rte_device *device, const char *name,\n \tstruct rte_eth_dev *ethdev;\n \tint retval;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*ethdev_init, -EINVAL);\n+\tif (*ethdev_init == NULL)\n+\t\treturn -EINVAL;\n \n \tif (rte_eal_process_type() == RTE_PROC_PRIMARY) {\n \t\tethdev = rte_eth_dev_allocate(name);\n@@ -328,7 +329,8 @@ rte_eth_dev_destroy(struct rte_eth_dev *ethdev,\n \tif (!ethdev)\n \t\treturn -ENODEV;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*ethdev_uninit, -EINVAL);\n+\tif (*ethdev_uninit == NULL)\n+\t\treturn -EINVAL;\n \n \tret = ethdev_uninit(ethdev);\n \tif (ret)\n@@ -558,8 +560,8 @@ rte_eth_hairpin_queue_peer_bind(uint16_t cur_port, uint16_t cur_queue,\n \n \t/* No need to check the validity again. */\n \tdev = &rte_eth_devices[cur_port];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->hairpin_queue_peer_bind,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->hairpin_queue_peer_bind == NULL)\n+\t\treturn -ENOTSUP;\n \n \treturn (*dev->dev_ops->hairpin_queue_peer_bind)(dev, cur_queue,\n \t\t\t\t\t\t\tpeer_info, direction);\n@@ -573,8 +575,8 @@ rte_eth_hairpin_queue_peer_unbind(uint16_t cur_port, uint16_t cur_queue,\n \n \t/* No need to check the validity again. */\n \tdev = &rte_eth_devices[cur_port];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->hairpin_queue_peer_unbind,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->hairpin_queue_peer_unbind == NULL)\n+\t\treturn -ENOTSUP;\n \n \treturn (*dev->dev_ops->hairpin_queue_peer_unbind)(dev, cur_queue,\n \t\t\t\t\t\t\t  direction);\n@@ -594,8 +596,8 @@ rte_eth_hairpin_queue_peer_update(uint16_t peer_port, uint16_t peer_queue,\n \n \t/* No need to check the validity again. */\n \tdev = &rte_eth_devices[peer_port];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->hairpin_queue_peer_update,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->hairpin_queue_peer_update == NULL)\n+\t\treturn -ENOTSUP;\n \n \treturn (*dev->dev_ops->hairpin_queue_peer_update)(dev, peer_queue,\n \t\t\t\t\tcur_info, peer_info, direction);\ndiff --git a/lib/ethdev/ethdev_pci.h b/lib/ethdev/ethdev_pci.h\nindex 0549842709..a268507801 100644\n--- a/lib/ethdev/ethdev_pci.h\n+++ b/lib/ethdev/ethdev_pci.h\n@@ -130,7 +130,8 @@ rte_eth_dev_pci_generic_probe(struct rte_pci_device *pci_dev,\n \tif (!eth_dev)\n \t\treturn -ENOMEM;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev_init, -EINVAL);\n+\tif (*dev_init == NULL)\n+\t\treturn -EINVAL;\n \tret = dev_init(eth_dev);\n \tif (ret)\n \t\trte_eth_dev_release_port(eth_dev);\ndiff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c\nindex 1979dc0850..9d6f460726 100644\n--- a/lib/ethdev/rte_ethdev.c\n+++ b/lib/ethdev/rte_ethdev.c\n@@ -719,7 +719,8 @@ rte_eth_dev_rx_queue_start(uint16_t port_id, uint16_t rx_queue_id)\n \tif (ret != 0)\n \t\treturn ret;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_start, -ENOTSUP);\n+\tif (*dev->dev_ops->rx_queue_start == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (rte_eth_dev_is_rx_hairpin_queue(dev, rx_queue_id)) {\n \t\tRTE_ETHDEV_LOG(INFO,\n@@ -751,7 +752,8 @@ rte_eth_dev_rx_queue_stop(uint16_t port_id, uint16_t rx_queue_id)\n \tif (ret != 0)\n \t\treturn ret;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_stop, -ENOTSUP);\n+\tif (*dev->dev_ops->rx_queue_stop == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (rte_eth_dev_is_rx_hairpin_queue(dev, rx_queue_id)) {\n \t\tRTE_ETHDEV_LOG(INFO,\n@@ -790,7 +792,8 @@ rte_eth_dev_tx_queue_start(uint16_t port_id, uint16_t tx_queue_id)\n \tif (ret != 0)\n \t\treturn ret;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_start, -ENOTSUP);\n+\tif (*dev->dev_ops->tx_queue_start == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (rte_eth_dev_is_tx_hairpin_queue(dev, tx_queue_id)) {\n \t\tRTE_ETHDEV_LOG(INFO,\n@@ -822,7 +825,8 @@ rte_eth_dev_tx_queue_stop(uint16_t port_id, uint16_t tx_queue_id)\n \tif (ret != 0)\n \t\treturn ret;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_stop, -ENOTSUP);\n+\tif (*dev->dev_ops->tx_queue_stop == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (rte_eth_dev_is_tx_hairpin_queue(dev, tx_queue_id)) {\n \t\tRTE_ETHDEV_LOG(INFO,\n@@ -1077,7 +1081,8 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_configure == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (dev->data->dev_started) {\n \t\tRTE_ETHDEV_LOG(ERR,\n@@ -1447,7 +1452,8 @@ rte_eth_dev_start(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_start, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_start == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (dev->data->dev_configured == 0) {\n \t\tRTE_ETHDEV_LOG(INFO,\n@@ -1493,7 +1499,8 @@ rte_eth_dev_start(uint16_t port_id)\n \t}\n \n \tif (dev->data->dev_conf.intr_conf.lsc == 0) {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->link_update, -ENOTSUP);\n+\t\tif (*dev->dev_ops->link_update == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\t(*dev->dev_ops->link_update)(dev, 0);\n \t}\n \n@@ -1513,7 +1520,8 @@ rte_eth_dev_stop(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_stop, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_stop == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (dev->data->dev_started == 0) {\n \t\tRTE_ETHDEV_LOG(INFO,\n@@ -1541,7 +1549,8 @@ rte_eth_dev_set_link_up(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_set_link_up, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_set_link_up == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->dev_set_link_up)(dev));\n }\n \n@@ -1553,7 +1562,8 @@ rte_eth_dev_set_link_down(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_set_link_down, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_set_link_down == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->dev_set_link_down)(dev));\n }\n \n@@ -1579,7 +1589,8 @@ rte_eth_dev_close(uint16_t port_id)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_close == NULL)\n+\t\treturn -ENOTSUP;\n \t*lasterr = (*dev->dev_ops->dev_close)(dev);\n \tif (*lasterr != 0)\n \t\tlasterr = &binerr;\n@@ -1599,7 +1610,8 @@ rte_eth_dev_reset(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_reset, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_reset == NULL)\n+\t\treturn -ENOTSUP;\n \n \tret = rte_eth_dev_stop(port_id);\n \tif (ret != 0) {\n@@ -1624,7 +1636,8 @@ rte_eth_dev_is_removed(uint16_t port_id)\n \tif (dev->state == RTE_ETH_DEV_REMOVED)\n \t\treturn 1;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->is_removed, 0);\n+\tif (*dev->dev_ops->is_removed == NULL)\n+\t\treturn 0;\n \n \tret = dev->dev_ops->is_removed(dev);\n \tif (ret != 0)\n@@ -1725,7 +1738,8 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_setup, -ENOTSUP);\n+\tif (*dev->dev_ops->rx_queue_setup == NULL)\n+\t\treturn -ENOTSUP;\n \n \tret = rte_eth_dev_info_get(port_id, &dev_info);\n \tif (ret != 0)\n@@ -1928,8 +1942,8 @@ rte_eth_rx_hairpin_queue_setup(uint16_t port_id, uint16_t rx_queue_id,\n \tret = rte_eth_dev_hairpin_capability_get(port_id, &cap);\n \tif (ret != 0)\n \t\treturn ret;\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_hairpin_queue_setup,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->rx_hairpin_queue_setup == NULL)\n+\t\treturn -ENOTSUP;\n \t/* if nb_rx_desc is zero use max number of desc from the driver. */\n \tif (nb_rx_desc == 0)\n \t\tnb_rx_desc = cap.max_nb_desc;\n@@ -1990,7 +2004,8 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_queue_setup, -ENOTSUP);\n+\tif (*dev->dev_ops->tx_queue_setup == NULL)\n+\t\treturn -ENOTSUP;\n \n \tret = rte_eth_dev_info_get(port_id, &dev_info);\n \tif (ret != 0)\n@@ -2094,8 +2109,8 @@ rte_eth_tx_hairpin_queue_setup(uint16_t port_id, uint16_t tx_queue_id,\n \tret = rte_eth_dev_hairpin_capability_get(port_id, &cap);\n \tif (ret != 0)\n \t\treturn ret;\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_hairpin_queue_setup,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->tx_hairpin_queue_setup == NULL)\n+\t\treturn -ENOTSUP;\n \t/* if nb_rx_desc is zero use max number of desc from the driver. */\n \tif (nb_tx_desc == 0)\n \t\tnb_tx_desc = cap.max_nb_desc;\n@@ -2152,7 +2167,8 @@ rte_eth_hairpin_bind(uint16_t tx_port, uint16_t rx_port)\n \t\treturn -EBUSY;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->hairpin_bind, -ENOTSUP);\n+\tif (*dev->dev_ops->hairpin_bind == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->hairpin_bind)(dev, rx_port);\n \tif (ret != 0)\n \t\tRTE_ETHDEV_LOG(ERR, \"Failed to bind hairpin Tx %d\"\n@@ -2176,7 +2192,8 @@ rte_eth_hairpin_unbind(uint16_t tx_port, uint16_t rx_port)\n \t\treturn -EBUSY;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->hairpin_unbind, -ENOTSUP);\n+\tif (*dev->dev_ops->hairpin_unbind == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->hairpin_unbind)(dev, rx_port);\n \tif (ret != 0)\n \t\tRTE_ETHDEV_LOG(ERR, \"Failed to unbind hairpin Tx %d\"\n@@ -2210,8 +2227,8 @@ rte_eth_hairpin_get_peer_ports(uint16_t port_id, uint16_t *peer_ports,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->hairpin_get_peer_ports,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->hairpin_get_peer_ports == NULL)\n+\t\treturn -ENOTSUP;\n \n \tret = (*dev->dev_ops->hairpin_get_peer_ports)(dev, peer_ports,\n \t\t\t\t\t\t      len, direction);\n@@ -2282,7 +2299,8 @@ rte_eth_tx_done_cleanup(uint16_t port_id, uint16_t queue_id, uint32_t free_cnt)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_done_cleanup, -ENOTSUP);\n+\tif (*dev->dev_ops->tx_done_cleanup == NULL)\n+\t\treturn -ENOTSUP;\n \n \t/* Call driver to free pending mbufs. */\n \tret = (*dev->dev_ops->tx_done_cleanup)(dev->data->tx_queues[queue_id],\n@@ -2302,7 +2320,8 @@ rte_eth_promiscuous_enable(uint16_t port_id)\n \tif (dev->data->promiscuous == 1)\n \t\treturn 0;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->promiscuous_enable, -ENOTSUP);\n+\tif (*dev->dev_ops->promiscuous_enable == NULL)\n+\t\treturn -ENOTSUP;\n \n \tdiag = (*dev->dev_ops->promiscuous_enable)(dev);\n \tdev->data->promiscuous = (diag == 0) ? 1 : 0;\n@@ -2322,7 +2341,8 @@ rte_eth_promiscuous_disable(uint16_t port_id)\n \tif (dev->data->promiscuous == 0)\n \t\treturn 0;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->promiscuous_disable, -ENOTSUP);\n+\tif (*dev->dev_ops->promiscuous_disable == NULL)\n+\t\treturn -ENOTSUP;\n \n \tdev->data->promiscuous = 0;\n \tdiag = (*dev->dev_ops->promiscuous_disable)(dev);\n@@ -2355,7 +2375,8 @@ rte_eth_allmulticast_enable(uint16_t port_id)\n \tif (dev->data->all_multicast == 1)\n \t\treturn 0;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->allmulticast_enable, -ENOTSUP);\n+\tif (*dev->dev_ops->allmulticast_enable == NULL)\n+\t\treturn -ENOTSUP;\n \tdiag = (*dev->dev_ops->allmulticast_enable)(dev);\n \tdev->data->all_multicast = (diag == 0) ? 1 : 0;\n \n@@ -2374,7 +2395,8 @@ rte_eth_allmulticast_disable(uint16_t port_id)\n \tif (dev->data->all_multicast == 0)\n \t\treturn 0;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->allmulticast_disable, -ENOTSUP);\n+\tif (*dev->dev_ops->allmulticast_disable == NULL)\n+\t\treturn -ENOTSUP;\n \tdev->data->all_multicast = 0;\n \tdiag = (*dev->dev_ops->allmulticast_disable)(dev);\n \tif (diag != 0)\n@@ -2411,7 +2433,8 @@ rte_eth_link_get(uint16_t port_id, struct rte_eth_link *eth_link)\n \tif (dev->data->dev_conf.intr_conf.lsc && dev->data->dev_started)\n \t\trte_eth_linkstatus_get(dev, eth_link);\n \telse {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->link_update, -ENOTSUP);\n+\t\tif (*dev->dev_ops->link_update == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\t(*dev->dev_ops->link_update)(dev, 1);\n \t\t*eth_link = dev->data->dev_link;\n \t}\n@@ -2436,7 +2459,8 @@ rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *eth_link)\n \tif (dev->data->dev_conf.intr_conf.lsc && dev->data->dev_started)\n \t\trte_eth_linkstatus_get(dev, eth_link);\n \telse {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->link_update, -ENOTSUP);\n+\t\tif (*dev->dev_ops->link_update == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\t(*dev->dev_ops->link_update)(dev, 0);\n \t\t*eth_link = dev->data->dev_link;\n \t}\n@@ -2513,7 +2537,8 @@ rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats)\n \n \tmemset(stats, 0, sizeof(*stats));\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_get, -ENOTSUP);\n+\tif (*dev->dev_ops->stats_get == NULL)\n+\t\treturn -ENOTSUP;\n \tstats->rx_nombuf = dev->data->rx_mbuf_alloc_failed;\n \treturn eth_err(port_id, (*dev->dev_ops->stats_get)(dev, stats));\n }\n@@ -2527,7 +2552,8 @@ rte_eth_stats_reset(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_reset, -ENOTSUP);\n+\tif (*dev->dev_ops->stats_reset == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->stats_reset)(dev);\n \tif (ret != 0)\n \t\treturn eth_err(port_id, ret);\n@@ -3043,7 +3069,8 @@ eth_dev_set_queue_stats_mapping(uint16_t port_id, uint16_t queue_id,\n \tif (stat_idx >= RTE_ETHDEV_QUEUE_STAT_CNTRS)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_stats_mapping_set, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_stats_mapping_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->queue_stats_mapping_set) (dev, queue_id, stat_idx, is_rx);\n }\n \n@@ -3080,7 +3107,8 @@ rte_eth_dev_fw_version_get(uint16_t port_id, char *fw_version, size_t fw_size)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fw_version_get, -ENOTSUP);\n+\tif (*dev->dev_ops->fw_version_get == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->fw_version_get)(dev,\n \t\t\t\t\t\t\tfw_version, fw_size));\n }\n@@ -3121,7 +3149,8 @@ rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info)\n \t\tRTE_ETHER_CRC_LEN;\n \tdev_info->max_mtu = UINT16_MAX;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_infos_get == NULL)\n+\t\treturn -ENOTSUP;\n \tdiag = (*dev->dev_ops->dev_infos_get)(dev, dev_info);\n \tif (diag != 0) {\n \t\t/* Cleanup already filled in device information */\n@@ -3182,7 +3211,8 @@ rte_eth_dev_get_supported_ptypes(uint16_t port_id, uint32_t ptype_mask,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_supported_ptypes_get, 0);\n+\tif (*dev->dev_ops->dev_supported_ptypes_get == NULL)\n+\t\treturn 0;\n \tall_ptypes = (*dev->dev_ops->dev_supported_ptypes_get)(dev);\n \n \tif (!all_ptypes)\n@@ -3360,7 +3390,8 @@ rte_eth_dev_set_mtu(uint16_t port_id, uint16_t mtu)\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mtu_set, -ENOTSUP);\n+\tif (*dev->dev_ops->mtu_set == NULL)\n+\t\treturn -ENOTSUP;\n \n \t/*\n \t * Check if the device supports dev_infos_get, if it does not\n@@ -3413,7 +3444,8 @@ rte_eth_dev_vlan_filter(uint16_t port_id, uint16_t vlan_id, int on)\n \t\t\tport_id, vlan_id);\n \t\treturn -EINVAL;\n \t}\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_filter_set, -ENOTSUP);\n+\tif (*dev->dev_ops->vlan_filter_set == NULL)\n+\t\treturn -ENOTSUP;\n \n \tret = (*dev->dev_ops->vlan_filter_set)(dev, vlan_id, on);\n \tif (ret == 0) {\n@@ -3448,7 +3480,8 @@ rte_eth_dev_set_vlan_strip_on_queue(uint16_t port_id, uint16_t rx_queue_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_strip_queue_set, -ENOTSUP);\n+\tif (*dev->dev_ops->vlan_strip_queue_set == NULL)\n+\t\treturn -ENOTSUP;\n \t(*dev->dev_ops->vlan_strip_queue_set)(dev, rx_queue_id, on);\n \n \treturn 0;\n@@ -3464,7 +3497,8 @@ rte_eth_dev_set_vlan_ether_type(uint16_t port_id,\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_tpid_set, -ENOTSUP);\n+\tif (*dev->dev_ops->vlan_tpid_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->vlan_tpid_set)(dev, vlan_type,\n \t\t\t\t\t\t\t       tpid));\n }\n@@ -3549,7 +3583,8 @@ rte_eth_dev_set_vlan_offload(uint16_t port_id, int offload_mask)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_offload_set, -ENOTSUP);\n+\tif (*dev->dev_ops->vlan_offload_set == NULL)\n+\t\treturn -ENOTSUP;\n \tdev->data->dev_conf.rxmode.offloads = dev_offloads;\n \tret = (*dev->dev_ops->vlan_offload_set)(dev, mask);\n \tif (ret) {\n@@ -3594,7 +3629,8 @@ rte_eth_dev_set_vlan_pvid(uint16_t port_id, uint16_t pvid, int on)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->vlan_pvid_set, -ENOTSUP);\n+\tif (*dev->dev_ops->vlan_pvid_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->vlan_pvid_set)(dev, pvid, on));\n }\n \n@@ -3613,7 +3649,8 @@ rte_eth_dev_flow_ctrl_get(uint16_t port_id, struct rte_eth_fc_conf *fc_conf)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->flow_ctrl_get, -ENOTSUP);\n+\tif (*dev->dev_ops->flow_ctrl_get == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(fc_conf, 0, sizeof(*fc_conf));\n \treturn eth_err(port_id, (*dev->dev_ops->flow_ctrl_get)(dev, fc_conf));\n }\n@@ -3638,7 +3675,8 @@ rte_eth_dev_flow_ctrl_set(uint16_t port_id, struct rte_eth_fc_conf *fc_conf)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->flow_ctrl_set, -ENOTSUP);\n+\tif (*dev->dev_ops->flow_ctrl_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->flow_ctrl_set)(dev, fc_conf));\n }\n \n@@ -3899,7 +3937,8 @@ rte_eth_dev_rss_reta_update(uint16_t port_id,\n \t\treturn -ENOTSUP;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->reta_update, -ENOTSUP);\n+\tif (*dev->dev_ops->reta_update == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->reta_update)(dev, reta_conf,\n \t\t\t\t\t\t\t     reta_size));\n }\n@@ -3927,7 +3966,8 @@ rte_eth_dev_rss_reta_query(uint16_t port_id,\n \tif (ret < 0)\n \t\treturn ret;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->reta_query, -ENOTSUP);\n+\tif (*dev->dev_ops->reta_query == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->reta_query)(dev, reta_conf,\n \t\t\t\t\t\t\t    reta_size));\n }\n@@ -3971,7 +4011,8 @@ rte_eth_dev_rss_hash_update(uint16_t port_id,\n \t\treturn -ENOTSUP;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rss_hash_update, -ENOTSUP);\n+\tif (*dev->dev_ops->rss_hash_update == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->rss_hash_update)(dev,\n \t\t\t\t\t\t\t\t rss_conf));\n }\n@@ -3992,7 +4033,8 @@ rte_eth_dev_rss_hash_conf_get(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rss_hash_conf_get, -ENOTSUP);\n+\tif (*dev->dev_ops->rss_hash_conf_get == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->rss_hash_conf_get)(dev,\n \t\t\t\t\t\t\t\t   rss_conf));\n }\n@@ -4018,7 +4060,8 @@ rte_eth_dev_udp_tunnel_port_add(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->udp_tunnel_port_add, -ENOTSUP);\n+\tif (*dev->dev_ops->udp_tunnel_port_add == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->udp_tunnel_port_add)(dev,\n \t\t\t\t\t\t\t\tudp_tunnel));\n }\n@@ -4044,7 +4087,8 @@ rte_eth_dev_udp_tunnel_port_delete(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->udp_tunnel_port_del, -ENOTSUP);\n+\tif (*dev->dev_ops->udp_tunnel_port_del == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->udp_tunnel_port_del)(dev,\n \t\t\t\t\t\t\t\tudp_tunnel));\n }\n@@ -4057,7 +4101,8 @@ rte_eth_led_on(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_led_on, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_led_on == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->dev_led_on)(dev));\n }\n \n@@ -4069,7 +4114,8 @@ rte_eth_led_off(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_led_off, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_led_off == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->dev_led_off)(dev));\n }\n \n@@ -4091,7 +4137,8 @@ rte_eth_fec_get_capability(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fec_get_capability, -ENOTSUP);\n+\tif (*dev->dev_ops->fec_get_capability == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->fec_get_capability)(dev, speed_fec_capa, num);\n \n \treturn ret;\n@@ -4112,7 +4159,8 @@ rte_eth_fec_get(uint16_t port_id, uint32_t *fec_capa)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fec_get, -ENOTSUP);\n+\tif (*dev->dev_ops->fec_get == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->fec_get)(dev, fec_capa));\n }\n \n@@ -4124,7 +4172,8 @@ rte_eth_fec_set(uint16_t port_id, uint32_t fec_capa)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->fec_set, -ENOTSUP);\n+\tif (*dev->dev_ops->fec_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->fec_set)(dev, fec_capa));\n }\n \n@@ -4173,7 +4222,8 @@ rte_eth_dev_mac_addr_add(uint16_t port_id, struct rte_ether_addr *addr,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mac_addr_add, -ENOTSUP);\n+\tif (*dev->dev_ops->mac_addr_add == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (rte_is_zero_ether_addr(addr)) {\n \t\tRTE_ETHDEV_LOG(ERR, \"Port %u: Cannot add NULL MAC address\\n\",\n@@ -4231,7 +4281,8 @@ rte_eth_dev_mac_addr_remove(uint16_t port_id, struct rte_ether_addr *addr)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mac_addr_remove, -ENOTSUP);\n+\tif (*dev->dev_ops->mac_addr_remove == NULL)\n+\t\treturn -ENOTSUP;\n \n \tindex = eth_dev_get_mac_addr_index(port_id, addr);\n \tif (index == 0) {\n@@ -4273,7 +4324,8 @@ rte_eth_dev_default_mac_addr_set(uint16_t port_id, struct rte_ether_addr *addr)\n \tif (!rte_is_valid_assigned_ether_addr(addr))\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mac_addr_set, -ENOTSUP);\n+\tif (*dev->dev_ops->mac_addr_set == NULL)\n+\t\treturn -ENOTSUP;\n \n \tret = (*dev->dev_ops->mac_addr_set)(dev, addr);\n \tif (ret < 0)\n@@ -4359,7 +4411,8 @@ rte_eth_dev_uc_hash_table_set(uint16_t port_id, struct rte_ether_addr *addr,\n \t\t}\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->uc_hash_table_set, -ENOTSUP);\n+\tif (*dev->dev_ops->uc_hash_table_set == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->uc_hash_table_set)(dev, addr, on);\n \tif (ret == 0) {\n \t\t/* Update address in NIC data structure */\n@@ -4382,7 +4435,8 @@ rte_eth_dev_uc_all_hash_table_set(uint16_t port_id, uint8_t on)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->uc_all_hash_table_set, -ENOTSUP);\n+\tif (*dev->dev_ops->uc_all_hash_table_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->uc_all_hash_table_set)(dev,\n \t\t\t\t\t\t\t\t       on));\n }\n@@ -4418,7 +4472,8 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->set_queue_rate_limit, -ENOTSUP);\n+\tif (*dev->dev_ops->set_queue_rate_limit == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->set_queue_rate_limit)(dev,\n \t\t\t\t\t\t\tqueue_idx, tx_rate));\n }\n@@ -4444,7 +4499,8 @@ int rte_eth_rx_avail_thresh_set(uint16_t port_id, uint16_t queue_id,\n \t\t\tport_id);\n \t\treturn -EINVAL;\n \t}\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_avail_thresh_set, -ENOTSUP);\n+\tif (*dev->dev_ops->rx_queue_avail_thresh_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->rx_queue_avail_thresh_set)(dev,\n \t\t\t\t\t\t\t     queue_id, avail_thresh));\n }\n@@ -4462,7 +4518,8 @@ int rte_eth_rx_avail_thresh_query(uint16_t port_id, uint16_t *queue_id,\n \tif (*queue_id >= dev->data->nb_rx_queues)\n \t\t*queue_id = 0;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_avail_thresh_query, -ENOTSUP);\n+\tif (*dev->dev_ops->rx_queue_avail_thresh_query == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->rx_queue_avail_thresh_query)(dev,\n \t\t\t\t\t\t\t     queue_id, avail_thresh));\n }\n@@ -4736,7 +4793,8 @@ rte_eth_dev_rx_intr_enable(uint16_t port_id,\n \tif (ret != 0)\n \t\treturn ret;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_intr_enable, -ENOTSUP);\n+\tif (*dev->dev_ops->rx_queue_intr_enable == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->rx_queue_intr_enable)(dev, queue_id));\n }\n \n@@ -4754,7 +4812,8 @@ rte_eth_dev_rx_intr_disable(uint16_t port_id,\n \tif (ret != 0)\n \t\treturn ret;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_intr_disable, -ENOTSUP);\n+\tif (*dev->dev_ops->rx_queue_intr_disable == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->rx_queue_intr_disable)(dev, queue_id));\n }\n \n@@ -5018,7 +5077,8 @@ rte_eth_rx_queue_info_get(uint16_t port_id, uint16_t queue_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rxq_info_get, -ENOTSUP);\n+\tif (*dev->dev_ops->rxq_info_get == NULL)\n+\t\treturn -ENOTSUP;\n \n \tmemset(qinfo, 0, sizeof(*qinfo));\n \tdev->dev_ops->rxq_info_get(dev, queue_id, qinfo);\n@@ -5063,7 +5123,8 @@ rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->txq_info_get, -ENOTSUP);\n+\tif (*dev->dev_ops->txq_info_get == NULL)\n+\t\treturn -ENOTSUP;\n \n \tmemset(qinfo, 0, sizeof(*qinfo));\n \tdev->dev_ops->txq_info_get(dev, queue_id, qinfo);\n@@ -5093,7 +5154,8 @@ rte_eth_rx_burst_mode_get(uint16_t port_id, uint16_t queue_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_burst_mode_get, -ENOTSUP);\n+\tif (*dev->dev_ops->rx_burst_mode_get == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(mode, 0, sizeof(*mode));\n \treturn eth_err(port_id,\n \t\t       dev->dev_ops->rx_burst_mode_get(dev, queue_id, mode));\n@@ -5120,7 +5182,8 @@ rte_eth_tx_burst_mode_get(uint16_t port_id, uint16_t queue_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->tx_burst_mode_get, -ENOTSUP);\n+\tif (*dev->dev_ops->tx_burst_mode_get == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(mode, 0, sizeof(*mode));\n \treturn eth_err(port_id,\n \t\t       dev->dev_ops->tx_burst_mode_get(dev, queue_id, mode));\n@@ -5147,7 +5210,8 @@ rte_eth_get_monitor_addr(uint16_t port_id, uint16_t queue_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_monitor_addr, -ENOTSUP);\n+\tif (*dev->dev_ops->get_monitor_addr == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id,\n \t\tdev->dev_ops->get_monitor_addr(dev->data->rx_queues[queue_id], pmc));\n }\n@@ -5162,7 +5226,8 @@ rte_eth_dev_set_mc_addr_list(uint16_t port_id,\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->set_mc_addr_list, -ENOTSUP);\n+\tif (*dev->dev_ops->set_mc_addr_list == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, dev->dev_ops->set_mc_addr_list(dev,\n \t\t\t\t\t\tmc_addr_set, nb_mc_addr));\n }\n@@ -5175,7 +5240,8 @@ rte_eth_timesync_enable(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_enable, -ENOTSUP);\n+\tif (*dev->dev_ops->timesync_enable == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->timesync_enable)(dev));\n }\n \n@@ -5187,7 +5253,8 @@ rte_eth_timesync_disable(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_disable, -ENOTSUP);\n+\tif (*dev->dev_ops->timesync_disable == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->timesync_disable)(dev));\n }\n \n@@ -5207,7 +5274,8 @@ rte_eth_timesync_read_rx_timestamp(uint16_t port_id, struct timespec *timestamp,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_read_rx_timestamp, -ENOTSUP);\n+\tif (*dev->dev_ops->timesync_read_rx_timestamp == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->timesync_read_rx_timestamp)\n \t\t\t\t(dev, timestamp, flags));\n }\n@@ -5228,7 +5296,8 @@ rte_eth_timesync_read_tx_timestamp(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_read_tx_timestamp, -ENOTSUP);\n+\tif (*dev->dev_ops->timesync_read_tx_timestamp == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->timesync_read_tx_timestamp)\n \t\t\t\t(dev, timestamp));\n }\n@@ -5241,7 +5310,8 @@ rte_eth_timesync_adjust_time(uint16_t port_id, int64_t delta)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_adjust_time, -ENOTSUP);\n+\tif (*dev->dev_ops->timesync_adjust_time == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->timesync_adjust_time)(dev, delta));\n }\n \n@@ -5260,7 +5330,8 @@ rte_eth_timesync_read_time(uint16_t port_id, struct timespec *timestamp)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_read_time, -ENOTSUP);\n+\tif (*dev->dev_ops->timesync_read_time == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->timesync_read_time)(dev,\n \t\t\t\t\t\t\t\ttimestamp));\n }\n@@ -5280,7 +5351,8 @@ rte_eth_timesync_write_time(uint16_t port_id, const struct timespec *timestamp)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timesync_write_time, -ENOTSUP);\n+\tif (*dev->dev_ops->timesync_write_time == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->timesync_write_time)(dev,\n \t\t\t\t\t\t\t\ttimestamp));\n }\n@@ -5299,7 +5371,8 @@ rte_eth_read_clock(uint16_t port_id, uint64_t *clock)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->read_clock, -ENOTSUP);\n+\tif (*dev->dev_ops->read_clock == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->read_clock)(dev, clock));\n }\n \n@@ -5318,7 +5391,8 @@ rte_eth_dev_get_reg_info(uint16_t port_id, struct rte_dev_reg_info *info)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_reg, -ENOTSUP);\n+\tif (*dev->dev_ops->get_reg == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->get_reg)(dev, info));\n }\n \n@@ -5330,7 +5404,8 @@ rte_eth_dev_get_eeprom_length(uint16_t port_id)\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_eeprom_length, -ENOTSUP);\n+\tif (*dev->dev_ops->get_eeprom_length == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->get_eeprom_length)(dev));\n }\n \n@@ -5349,7 +5424,8 @@ rte_eth_dev_get_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_eeprom, -ENOTSUP);\n+\tif (*dev->dev_ops->get_eeprom == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->get_eeprom)(dev, info));\n }\n \n@@ -5368,7 +5444,8 @@ rte_eth_dev_set_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->set_eeprom, -ENOTSUP);\n+\tif (*dev->dev_ops->set_eeprom == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->set_eeprom)(dev, info));\n }\n \n@@ -5388,7 +5465,8 @@ rte_eth_dev_get_module_info(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_module_info, -ENOTSUP);\n+\tif (*dev->dev_ops->get_module_info == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->get_module_info)(dev, modinfo);\n }\n \n@@ -5422,7 +5500,8 @@ rte_eth_dev_get_module_eeprom(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_module_eeprom, -ENOTSUP);\n+\tif (*dev->dev_ops->get_module_eeprom == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->get_module_eeprom)(dev, info);\n }\n \n@@ -5444,7 +5523,8 @@ rte_eth_dev_get_dcb_info(uint16_t port_id,\n \n \tmemset(dcb_info, 0, sizeof(struct rte_eth_dcb_info));\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_dcb_info, -ENOTSUP);\n+\tif (*dev->dev_ops->get_dcb_info == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->get_dcb_info)(dev, dcb_info));\n }\n \n@@ -5500,7 +5580,8 @@ rte_eth_dev_hairpin_capability_get(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->hairpin_cap_get, -ENOTSUP);\n+\tif (*dev->dev_ops->hairpin_cap_get == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(cap, 0, sizeof(*cap));\n \treturn eth_err(port_id, (*dev->dev_ops->hairpin_cap_get)(dev, cap));\n }\n@@ -5775,7 +5856,8 @@ rte_eth_representor_info_get(uint16_t port_id,\n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n \tdev = &rte_eth_devices[port_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->representor_info_get, -ENOTSUP);\n+\tif (*dev->dev_ops->representor_info_get == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->representor_info_get)(dev, info));\n }\n \n@@ -5799,7 +5881,8 @@ rte_eth_rx_metadata_negotiate(uint16_t port_id, uint64_t *features)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_metadata_negotiate, -ENOTSUP);\n+\tif (*dev->dev_ops->rx_metadata_negotiate == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id,\n \t\t       (*dev->dev_ops->rx_metadata_negotiate)(dev, features));\n }\n@@ -5826,8 +5909,8 @@ rte_eth_ip_reassembly_capability_get(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->ip_reassembly_capability_get,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->ip_reassembly_capability_get == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(reassembly_capa, 0, sizeof(struct rte_eth_ip_reassembly_params));\n \n \treturn eth_err(port_id, (*dev->dev_ops->ip_reassembly_capability_get)\n@@ -5856,8 +5939,8 @@ rte_eth_ip_reassembly_conf_get(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->ip_reassembly_conf_get,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->ip_reassembly_conf_get == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(conf, 0, sizeof(struct rte_eth_ip_reassembly_params));\n \treturn eth_err(port_id,\n \t\t       (*dev->dev_ops->ip_reassembly_conf_get)(dev, conf));\n@@ -5894,8 +5977,8 @@ rte_eth_ip_reassembly_conf_set(uint16_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->ip_reassembly_conf_set,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->ip_reassembly_conf_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id,\n \t\t       (*dev->dev_ops->ip_reassembly_conf_set)(dev, conf));\n }\n@@ -5913,7 +5996,8 @@ rte_eth_dev_priv_dump(uint16_t port_id, FILE *file)\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->eth_dev_priv_dump, -ENOTSUP);\n+\tif (*dev->dev_ops->eth_dev_priv_dump == NULL)\n+\t\treturn -ENOTSUP;\n \treturn eth_err(port_id, (*dev->dev_ops->eth_dev_priv_dump)(dev, file));\n }\n \ndiff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h\nindex de9e970d4d..41d37e41b5 100644\n--- a/lib/ethdev/rte_ethdev.h\n+++ b/lib/ethdev/rte_ethdev.h\n@@ -5710,7 +5710,8 @@ rte_eth_rx_queue_count(uint16_t port_id, uint16_t queue_id)\n \tqd = p->rxq.data[queue_id];\n \n \tRTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);\n-\tRTE_FUNC_PTR_OR_ERR_RET(*p->rx_queue_count, -ENOTSUP);\n+\tif (*p->rx_queue_count == NULL)\n+\t\treturn -ENOTSUP;\n \tif (qd == NULL)\n \t\treturn -EINVAL;\n \n@@ -5784,7 +5785,8 @@ rte_eth_rx_descriptor_status(uint16_t port_id, uint16_t queue_id,\n \tif (qd == NULL)\n \t\treturn -ENODEV;\n #endif\n-\tRTE_FUNC_PTR_OR_ERR_RET(*p->rx_descriptor_status, -ENOTSUP);\n+\tif (*p->rx_descriptor_status == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*p->rx_descriptor_status)(qd, offset);\n }\n \n@@ -5854,7 +5856,8 @@ static inline int rte_eth_tx_descriptor_status(uint16_t port_id,\n \tif (qd == NULL)\n \t\treturn -ENODEV;\n #endif\n-\tRTE_FUNC_PTR_OR_ERR_RET(*p->tx_descriptor_status, -ENOTSUP);\n+\tif (*p->tx_descriptor_status == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*p->tx_descriptor_status)(qd, offset);\n }\n \ndiff --git a/lib/eventdev/rte_event_crypto_adapter.c b/lib/eventdev/rte_event_crypto_adapter.c\nindex 7c695176f4..4938b4ee07 100644\n--- a/lib/eventdev/rte_event_crypto_adapter.c\n+++ b/lib/eventdev/rte_event_crypto_adapter.c\n@@ -974,9 +974,8 @@ rte_event_crypto_adapter_queue_pair_add(uint8_t id,\n \t     adapter->mode == RTE_EVENT_CRYPTO_ADAPTER_OP_NEW) ||\n \t    (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW &&\n \t     adapter->mode == RTE_EVENT_CRYPTO_ADAPTER_OP_NEW)) {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(\n-\t\t\t*dev->dev_ops->crypto_adapter_queue_pair_add,\n-\t\t\t-ENOTSUP);\n+\t\tif (*dev->dev_ops->crypto_adapter_queue_pair_add == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\tif (dev_info->qpairs == NULL) {\n \t\t\tdev_info->qpairs =\n \t\t\t    rte_zmalloc_socket(adapter->mem_name,\n@@ -1076,9 +1075,8 @@ rte_event_crypto_adapter_queue_pair_del(uint8_t id, uint8_t cdev_id,\n \tif ((cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) ||\n \t    (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW &&\n \t     adapter->mode == RTE_EVENT_CRYPTO_ADAPTER_OP_NEW)) {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(\n-\t\t\t*dev->dev_ops->crypto_adapter_queue_pair_del,\n-\t\t\t-ENOTSUP);\n+\t\tif (*dev->dev_ops->crypto_adapter_queue_pair_del == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\tret = (*dev->dev_ops->crypto_adapter_queue_pair_del)(dev,\n \t\t\t\t\t\tdev_info->dev,\n \t\t\t\t\t\tqueue_pair_id);\ndiff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c\nindex bf8741d2ea..8e81cf774d 100644\n--- a/lib/eventdev/rte_event_eth_rx_adapter.c\n+++ b/lib/eventdev/rte_event_eth_rx_adapter.c\n@@ -2655,8 +2655,8 @@ rte_event_eth_rx_adapter_queue_add(uint8_t id,\n \tdev_info = &rx_adapter->eth_devices[eth_dev_id];\n \n \tif (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT) {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->eth_rx_adapter_queue_add,\n-\t\t\t\t\t-ENOTSUP);\n+\t\tif (*dev->dev_ops->eth_rx_adapter_queue_add == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\tif (dev_info->rx_queue == NULL) {\n \t\t\tdev_info->rx_queue =\n \t\t\t    rte_zmalloc_socket(rx_adapter->mem_name,\n@@ -2750,8 +2750,8 @@ rte_event_eth_rx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id,\n \tdev_info = &rx_adapter->eth_devices[eth_dev_id];\n \n \tif (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT) {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->eth_rx_adapter_queue_del,\n-\t\t\t\t -ENOTSUP);\n+\t\tif (*dev->dev_ops->eth_rx_adapter_queue_del == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\tret = (*dev->dev_ops->eth_rx_adapter_queue_del)(dev,\n \t\t\t\t\t\t&rte_eth_devices[eth_dev_id],\n \t\t\t\t\t\trx_queue_id);\n@@ -2861,9 +2861,8 @@ rte_event_eth_rx_adapter_vector_limits_get(\n \t}\n \n \tif (cap & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT) {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(\n-\t\t\t*dev->dev_ops->eth_rx_adapter_vector_limits_get,\n-\t\t\t-ENOTSUP);\n+\t\tif (*dev->dev_ops->eth_rx_adapter_vector_limits_get == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\tret = dev->dev_ops->eth_rx_adapter_vector_limits_get(\n \t\t\tdev, &rte_eth_devices[eth_port_id], limits);\n \t} else {\ndiff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c\nindex 1dc4f966be..79b905e9fc 100644\n--- a/lib/eventdev/rte_eventdev.c\n+++ b/lib/eventdev/rte_eventdev.c\n@@ -92,7 +92,8 @@ rte_event_dev_info_get(uint8_t dev_id, struct rte_event_dev_info *dev_info)\n \n \tmemset(dev_info, 0, sizeof(struct rte_event_dev_info));\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_infos_get == NULL)\n+\t\treturn -ENOTSUP;\n \t(*dev->dev_ops->dev_infos_get)(dev, dev_info);\n \n \tdev_info->dequeue_timeout_ns = dev->data->dev_conf.dequeue_timeout_ns;\n@@ -216,7 +217,8 @@ event_dev_queue_config(struct rte_eventdev *dev, uint8_t nb_queues)\n \n \tif (nb_queues != 0) {\n \t\tqueues_cfg = dev->data->queues_cfg;\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_release, -ENOTSUP);\n+\t\tif (*dev->dev_ops->queue_release == NULL)\n+\t\t\treturn -ENOTSUP;\n \n \t\tfor (i = nb_queues; i < old_nb_queues; i++)\n \t\t\t(*dev->dev_ops->queue_release)(dev, i);\n@@ -229,7 +231,8 @@ event_dev_queue_config(struct rte_eventdev *dev, uint8_t nb_queues)\n \t\t\t\tsizeof(queues_cfg[0]) * new_qs);\n \t\t}\n \t} else {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_release, -ENOTSUP);\n+\t\tif (*dev->dev_ops->queue_release == NULL)\n+\t\t\treturn -ENOTSUP;\n \n \t\tfor (i = nb_queues; i < old_nb_queues; i++)\n \t\t\t(*dev->dev_ops->queue_release)(dev, i);\n@@ -254,7 +257,8 @@ event_dev_port_config(struct rte_eventdev *dev, uint8_t nb_ports)\n \t\t\t dev->data->dev_id);\n \n \tif (nb_ports != 0) { /* re-config */\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->port_release, -ENOTSUP);\n+\t\tif (*dev->dev_ops->port_release == NULL)\n+\t\t\treturn -ENOTSUP;\n \n \t\tports = dev->data->ports;\n \t\tports_cfg = dev->data->ports_cfg;\n@@ -279,7 +283,8 @@ event_dev_port_config(struct rte_eventdev *dev, uint8_t nb_ports)\n \t\t\t\t\tEVENT_QUEUE_SERVICE_PRIORITY_INVALID;\n \t\t}\n \t} else {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->port_release, -ENOTSUP);\n+\t\tif (*dev->dev_ops->port_release == NULL)\n+\t\t\treturn -ENOTSUP;\n \n \t\tports = dev->data->ports;\n \t\tfor (i = nb_ports; i < old_nb_ports; i++) {\n@@ -303,8 +308,10 @@ rte_event_dev_configure(uint8_t dev_id,\n \tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_eventdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_infos_get, -ENOTSUP);\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_infos_get == NULL)\n+\t\treturn -ENOTSUP;\n+\tif (*dev->dev_ops->dev_configure == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (dev->data->dev_started) {\n \t\tRTE_EDEV_LOG_ERR(\n@@ -509,7 +516,8 @@ rte_event_queue_default_conf_get(uint8_t dev_id, uint8_t queue_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_def_conf, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_def_conf == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(queue_conf, 0, sizeof(struct rte_event_queue_conf));\n \t(*dev->dev_ops->queue_def_conf)(dev, queue_id, queue_conf);\n \treturn 0;\n@@ -595,11 +603,12 @@ rte_event_queue_setup(uint8_t dev_id, uint8_t queue_id,\n \t\treturn -EBUSY;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_setup, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_setup == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (queue_conf == NULL) {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_def_conf,\n-\t\t\t\t\t-ENOTSUP);\n+\t\tif (*dev->dev_ops->queue_def_conf == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\t(*dev->dev_ops->queue_def_conf)(dev, queue_id, &def_conf);\n \t\tqueue_conf = &def_conf;\n \t}\n@@ -635,7 +644,8 @@ rte_event_port_default_conf_get(uint8_t dev_id, uint8_t port_id,\n \t\treturn -EINVAL;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->port_def_conf, -ENOTSUP);\n+\tif (*dev->dev_ops->port_def_conf == NULL)\n+\t\treturn -ENOTSUP;\n \tmemset(port_conf, 0, sizeof(struct rte_event_port_conf));\n \t(*dev->dev_ops->port_def_conf)(dev, port_id, port_conf);\n \treturn 0;\n@@ -706,11 +716,12 @@ rte_event_port_setup(uint8_t dev_id, uint8_t port_id,\n \t\treturn -EBUSY;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->port_setup, -ENOTSUP);\n+\tif (*dev->dev_ops->port_setup == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (port_conf == NULL) {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->port_def_conf,\n-\t\t\t\t\t-ENOTSUP);\n+\t\tif (*dev->dev_ops->port_def_conf == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\t(*dev->dev_ops->port_def_conf)(dev, port_id, &def_conf);\n \t\tport_conf = &def_conf;\n \t}\n@@ -896,7 +907,8 @@ rte_event_queue_attr_set(uint8_t dev_id, uint8_t queue_id, uint32_t attr_id,\n \t\treturn -ENOTSUP;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_attr_set, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_attr_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->queue_attr_set)(dev, queue_id, attr_id,\n \t\t\t\t\t       attr_value);\n }\n@@ -1045,7 +1057,8 @@ rte_event_port_unlinks_in_progress(uint8_t dev_id, uint8_t port_id)\n \t * This allows PMDs which handle unlink synchronously to not implement\n \t * this function at all.\n \t */\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->port_unlinks_in_progress, 0);\n+\tif (*dev->dev_ops->port_unlinks_in_progress == NULL)\n+\t\treturn 0;\n \n \treturn (*dev->dev_ops->port_unlinks_in_progress)(dev,\n \t\t\tdev->data->ports[port_id]);\n@@ -1087,7 +1100,8 @@ rte_event_dequeue_timeout_ticks(uint8_t dev_id, uint64_t ns,\n \n \tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_eventdevs[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->timeout_ticks, -ENOTSUP);\n+\tif (*dev->dev_ops->timeout_ticks == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (timeout_ticks == NULL)\n \t\treturn -EINVAL;\n@@ -1119,7 +1133,8 @@ rte_event_dev_dump(uint8_t dev_id, FILE *f)\n \n \tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_eventdevs[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dump, -ENOTSUP);\n+\tif (*dev->dev_ops->dump == NULL)\n+\t\treturn -ENOTSUP;\n \tif (f == NULL)\n \t\treturn -EINVAL;\n \n@@ -1285,7 +1300,8 @@ rte_event_dev_start(uint8_t dev_id)\n \n \tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_eventdevs[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_start, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_start == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (dev->data->dev_started != 0) {\n \t\tRTE_EDEV_LOG_ERR(\"Device with dev_id=%\" PRIu8 \"already started\",\n@@ -1331,7 +1347,8 @@ rte_event_dev_stop(uint8_t dev_id)\n \n \tRTE_EVENTDEV_VALID_DEVID_OR_RET(dev_id);\n \tdev = &rte_eventdevs[dev_id];\n-\tRTE_FUNC_PTR_OR_RET(*dev->dev_ops->dev_stop);\n+\tif (*dev->dev_ops->dev_stop == NULL)\n+\t\treturn;\n \n \tif (dev->data->dev_started == 0) {\n \t\tRTE_EDEV_LOG_ERR(\"Device with dev_id=%\" PRIu8 \"already stopped\",\n@@ -1352,7 +1369,8 @@ rte_event_dev_close(uint8_t dev_id)\n \n \tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_eventdevs[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_close == NULL)\n+\t\treturn -ENOTSUP;\n \n \t/* Device must be stopped before it can be closed */\n \tif (dev->data->dev_started == 1) {\ndiff --git a/lib/mempool/rte_mempool_ops.c b/lib/mempool/rte_mempool_ops.c\nindex 2d36dee8f0..ac32c4bb72 100644\n--- a/lib/mempool/rte_mempool_ops.c\n+++ b/lib/mempool/rte_mempool_ops.c\n@@ -154,7 +154,8 @@ rte_mempool_ops_get_info(const struct rte_mempool *mp,\n \n \tops = rte_mempool_get_ops(mp->ops_index);\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(ops->get_info, -ENOTSUP);\n+\tif (ops->get_info == NULL)\n+\t\treturn -ENOTSUP;\n \treturn ops->get_info(mp, info);\n }\n \ndiff --git a/lib/rawdev/rte_rawdev.c b/lib/rawdev/rte_rawdev.c\nindex 2f0a4f132e..e157d65332 100644\n--- a/lib/rawdev/rte_rawdev.c\n+++ b/lib/rawdev/rte_rawdev.c\n@@ -71,12 +71,14 @@ rte_rawdev_info_get(uint16_t dev_id, struct rte_rawdev_info *dev_info,\n \tint ret = 0;\n \n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n-\tRTE_FUNC_PTR_OR_ERR_RET(dev_info, -EINVAL);\n+\tif (dev_info == NULL)\n+\t\treturn -EINVAL;\n \n \trawdev = &rte_rawdevs[dev_id];\n \n \tif (dev_info->dev_private != NULL) {\n-\t\tRTE_FUNC_PTR_OR_ERR_RET(*rawdev->dev_ops->dev_info_get, -ENOTSUP);\n+\t\tif (*rawdev->dev_ops->dev_info_get == NULL)\n+\t\t\treturn -ENOTSUP;\n \t\tret = (*rawdev->dev_ops->dev_info_get)(rawdev,\n \t\t\t\tdev_info->dev_private,\n \t\t\t\tdev_private_size);\n@@ -97,11 +99,13 @@ rte_rawdev_configure(uint16_t dev_id, struct rte_rawdev_info *dev_conf,\n \tint diag;\n \n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n-\tRTE_FUNC_PTR_OR_ERR_RET(dev_conf, -EINVAL);\n+\tif (dev_conf == NULL)\n+\t\treturn -EINVAL;\n \n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_configure == NULL)\n+\t\treturn -ENOTSUP;\n \n \tif (dev->started) {\n \t\tRTE_RDEV_ERR(\n@@ -131,7 +135,8 @@ rte_rawdev_queue_conf_get(uint16_t dev_id,\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_def_conf, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_def_conf == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->queue_def_conf)(dev, queue_id, queue_conf,\n \t\t\tqueue_conf_size);\n }\n@@ -147,7 +152,8 @@ rte_rawdev_queue_setup(uint16_t dev_id,\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_setup, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_setup == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->queue_setup)(dev, queue_id, queue_conf,\n \t\t\tqueue_conf_size);\n }\n@@ -160,7 +166,8 @@ rte_rawdev_queue_release(uint16_t dev_id, uint16_t queue_id)\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_release, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_release == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->queue_release)(dev, queue_id);\n }\n \n@@ -172,7 +179,8 @@ rte_rawdev_queue_count(uint16_t dev_id)\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->queue_count, -ENOTSUP);\n+\tif (*dev->dev_ops->queue_count == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->queue_count)(dev);\n }\n \n@@ -186,7 +194,8 @@ rte_rawdev_get_attr(uint16_t dev_id,\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->attr_get, -ENOTSUP);\n+\tif (*dev->dev_ops->attr_get == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->attr_get)(dev, attr_name, attr_value);\n }\n \n@@ -200,7 +209,8 @@ rte_rawdev_set_attr(uint16_t dev_id,\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->attr_set, -ENOTSUP);\n+\tif (*dev->dev_ops->attr_set == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->attr_set)(dev, attr_name, attr_value);\n }\n \n@@ -215,7 +225,8 @@ rte_rawdev_enqueue_buffers(uint16_t dev_id,\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->enqueue_bufs, -ENOTSUP);\n+\tif (*dev->dev_ops->enqueue_bufs == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->enqueue_bufs)(dev, buffers, count, context);\n }\n \n@@ -230,7 +241,8 @@ rte_rawdev_dequeue_buffers(uint16_t dev_id,\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dequeue_bufs, -ENOTSUP);\n+\tif (*dev->dev_ops->dequeue_bufs == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->dequeue_bufs)(dev, buffers, count, context);\n }\n \n@@ -242,7 +254,8 @@ rte_rawdev_dump(uint16_t dev_id, FILE *f)\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dump, -ENOTSUP);\n+\tif (*dev->dev_ops->dump == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->dump)(dev, f);\n }\n \n@@ -251,7 +264,8 @@ xstats_get_count(uint16_t dev_id)\n {\n \tstruct rte_rawdev *dev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->xstats_get_names, -ENOTSUP);\n+\tif (*dev->dev_ops->xstats_get_names == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->xstats_get_names)(dev, NULL, 0);\n }\n \n@@ -273,7 +287,8 @@ rte_rawdev_xstats_names_get(uint16_t dev_id,\n \n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->xstats_get_names, -ENOTSUP);\n+\tif (*dev->dev_ops->xstats_get_names == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->xstats_get_names)(dev, xstats_names, size);\n }\n \n@@ -287,7 +302,8 @@ rte_rawdev_xstats_get(uint16_t dev_id,\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -ENODEV);\n \tconst struct rte_rawdev *dev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->xstats_get, -ENOTSUP);\n+\tif (*dev->dev_ops->xstats_get == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->xstats_get)(dev, ids, values, n);\n }\n \n@@ -306,7 +322,8 @@ rte_rawdev_xstats_by_name_get(uint16_t dev_id,\n \t\tid = &temp; /* driver never gets a NULL value */\n \n \t/* implemented by driver */\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->xstats_get_by_name, -ENOTSUP);\n+\tif (*dev->dev_ops->xstats_get_by_name == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->xstats_get_by_name)(dev, name, id);\n }\n \n@@ -317,7 +334,8 @@ rte_rawdev_xstats_reset(uint16_t dev_id,\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tstruct rte_rawdev *dev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->xstats_reset, -ENOTSUP);\n+\tif (*dev->dev_ops->xstats_reset == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->xstats_reset)(dev, ids, nb_ids);\n }\n \n@@ -327,7 +345,8 @@ rte_rawdev_firmware_status_get(uint16_t dev_id, rte_rawdev_obj_t status_info)\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tstruct rte_rawdev *dev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->firmware_status_get, -ENOTSUP);\n+\tif (*dev->dev_ops->firmware_status_get == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->firmware_status_get)(dev, status_info);\n }\n \n@@ -337,7 +356,8 @@ rte_rawdev_firmware_version_get(uint16_t dev_id, rte_rawdev_obj_t version_info)\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tstruct rte_rawdev *dev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->firmware_version_get, -ENOTSUP);\n+\tif (*dev->dev_ops->firmware_version_get == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->firmware_version_get)(dev, version_info);\n }\n \n@@ -350,7 +370,8 @@ rte_rawdev_firmware_load(uint16_t dev_id, rte_rawdev_obj_t firmware_image)\n \tif (!firmware_image)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->firmware_load, -ENOTSUP);\n+\tif (*dev->dev_ops->firmware_load == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->firmware_load)(dev, firmware_image);\n }\n \n@@ -360,7 +381,8 @@ rte_rawdev_firmware_unload(uint16_t dev_id)\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tstruct rte_rawdev *dev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->firmware_load, -ENOTSUP);\n+\tif (*dev->dev_ops->firmware_load == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->firmware_unload)(dev);\n }\n \n@@ -370,7 +392,8 @@ rte_rawdev_selftest(uint16_t dev_id)\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tstruct rte_rawdev *dev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_selftest, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_selftest == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->dev_selftest)(dev_id);\n }\n \n@@ -435,7 +458,8 @@ rte_rawdev_close(uint16_t dev_id)\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_close == NULL)\n+\t\treturn -ENOTSUP;\n \t/* Device must be stopped before it can be closed */\n \tif (dev->started == 1) {\n \t\tRTE_RDEV_ERR(\"Device %u must be stopped before closing\",\n@@ -454,7 +478,8 @@ rte_rawdev_reset(uint16_t dev_id)\n \tRTE_RAWDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_rawdevs[dev_id];\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_reset, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_reset == NULL)\n+\t\treturn -ENOTSUP;\n \t/* Reset is not dependent on state of the device */\n \treturn (*dev->dev_ops->dev_reset)(dev);\n }\ndiff --git a/lib/regexdev/rte_regexdev.c b/lib/regexdev/rte_regexdev.c\nindex 02a388bc5d..caec069182 100644\n--- a/lib/regexdev/rte_regexdev.c\n+++ b/lib/regexdev/rte_regexdev.c\n@@ -189,7 +189,8 @@ regexdev_info_get(uint8_t dev_id, struct rte_regexdev_info *dev_info)\n \tif (dev_info == NULL)\n \t\treturn -EINVAL;\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_info_get, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_info_get == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->dev_info_get)(dev, dev_info);\n \n }\n@@ -211,7 +212,8 @@ rte_regexdev_configure(uint8_t dev_id, const struct rte_regexdev_config *cfg)\n \tif (cfg == NULL)\n \t\treturn -EINVAL;\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_configure, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_configure == NULL)\n+\t\treturn -ENOTSUP;\n \tif (dev->data->dev_started) {\n \t\tRTE_REGEXDEV_LOG\n \t\t\t(ERR, \"Dev %u must be stopped to allow configuration\\n\",\n@@ -301,7 +303,8 @@ rte_regexdev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_qp_setup, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_qp_setup == NULL)\n+\t\treturn -ENOTSUP;\n \tif (dev->data->dev_started) {\n \t\tRTE_REGEXDEV_LOG\n \t\t\t(ERR, \"Dev %u must be stopped to allow configuration\\n\",\n@@ -332,7 +335,8 @@ rte_regexdev_start(uint8_t dev_id)\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_start, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_start == NULL)\n+\t\treturn -ENOTSUP;\n \tret = (*dev->dev_ops->dev_start)(dev);\n \tif (ret == 0)\n \t\tdev->data->dev_started = 1;\n@@ -346,7 +350,8 @@ rte_regexdev_stop(uint8_t dev_id)\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_stop, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_stop == NULL)\n+\t\treturn -ENOTSUP;\n \t(*dev->dev_ops->dev_stop)(dev);\n \tdev->data->dev_started = 0;\n \treturn 0;\n@@ -359,7 +364,8 @@ rte_regexdev_close(uint8_t dev_id)\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_close, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_close == NULL)\n+\t\treturn -ENOTSUP;\n \t(*dev->dev_ops->dev_close)(dev);\n \tdev->data->dev_started = 0;\n \tdev->state = RTE_REGEXDEV_UNUSED;\n@@ -374,7 +380,8 @@ rte_regexdev_attr_get(uint8_t dev_id, enum rte_regexdev_attr_id attr_id,\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_attr_get, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_attr_get == NULL)\n+\t\treturn -ENOTSUP;\n \tif (attr_value == NULL) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Dev %d attribute value can't be NULL\\n\",\n \t\t\t\t dev_id);\n@@ -391,7 +398,8 @@ rte_regexdev_attr_set(uint8_t dev_id, enum rte_regexdev_attr_id attr_id,\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_attr_set, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_attr_set == NULL)\n+\t\treturn -ENOTSUP;\n \tif (attr_value == NULL) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Dev %d attribute value can't be NULL\\n\",\n \t\t\t\t dev_id);\n@@ -409,7 +417,8 @@ rte_regexdev_rule_db_update(uint8_t dev_id,\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_rule_db_update, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_rule_db_update == NULL)\n+\t\treturn -ENOTSUP;\n \tif (rules == NULL) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Dev %d rules can't be NULL\\n\",\n \t\t\t\t dev_id);\n@@ -425,8 +434,8 @@ rte_regexdev_rule_db_compile_activate(uint8_t dev_id)\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_rule_db_compile_activate,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->dev_rule_db_compile_activate == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->dev_rule_db_compile_activate)(dev);\n }\n \n@@ -438,8 +447,8 @@ rte_regexdev_rule_db_import(uint8_t dev_id, const char *rule_db,\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_db_import,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->dev_db_import == NULL)\n+\t\treturn -ENOTSUP;\n \tif (rule_db == NULL) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Dev %d rules can't be NULL\\n\",\n \t\t\t\t dev_id);\n@@ -455,8 +464,8 @@ rte_regexdev_rule_db_export(uint8_t dev_id, char *rule_db)\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_db_export,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->dev_db_export == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->dev_db_export)(dev, rule_db);\n }\n \n@@ -468,8 +477,8 @@ rte_regexdev_xstats_names_get(uint8_t dev_id,\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_xstats_names_get,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->dev_xstats_names_get == NULL)\n+\t\treturn -ENOTSUP;\n \tif (xstats_map == NULL) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Dev %d xstats map can't be NULL\\n\",\n \t\t\t\t dev_id);\n@@ -486,7 +495,8 @@ rte_regexdev_xstats_get(uint8_t dev_id, const uint16_t *ids,\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_xstats_get, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_xstats_get == NULL)\n+\t\treturn -ENOTSUP;\n \tif (ids == NULL) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Dev %d ids can't be NULL\\n\", dev_id);\n \t\treturn -EINVAL;\n@@ -506,8 +516,8 @@ rte_regexdev_xstats_by_name_get(uint8_t dev_id, const char *name,\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_xstats_by_name_get,\n-\t\t\t\t-ENOTSUP);\n+\tif (*dev->dev_ops->dev_xstats_by_name_get == NULL)\n+\t\treturn -ENOTSUP;\n \tif (name == NULL) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Dev %d name can't be NULL\\n\", dev_id);\n \t\treturn -EINVAL;\n@@ -531,7 +541,8 @@ rte_regexdev_xstats_reset(uint8_t dev_id, const uint16_t *ids,\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_xstats_reset, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_xstats_reset == NULL)\n+\t\treturn -ENOTSUP;\n \tif (ids == NULL) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Dev %d ids can't be NULL\\n\", dev_id);\n \t\treturn -EINVAL;\n@@ -546,7 +557,8 @@ rte_regexdev_selftest(uint8_t dev_id)\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_selftest, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_selftest == NULL)\n+\t\treturn -ENOTSUP;\n \treturn (*dev->dev_ops->dev_selftest)(dev);\n }\n \n@@ -557,7 +569,8 @@ rte_regexdev_dump(uint8_t dev_id, FILE *f)\n \n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n \tdev = &rte_regex_devices[dev_id];\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->dev_dump, -ENOTSUP);\n+\tif (*dev->dev_ops->dev_dump == NULL)\n+\t\treturn -ENOTSUP;\n \tif (f == NULL) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Dev %d file can't be NULL\\n\", dev_id);\n \t\treturn -EINVAL;\ndiff --git a/lib/regexdev/rte_regexdev.h b/lib/regexdev/rte_regexdev.h\nindex 3bce8090f6..6061e648b1 100644\n--- a/lib/regexdev/rte_regexdev.h\n+++ b/lib/regexdev/rte_regexdev.h\n@@ -1473,7 +1473,8 @@ rte_regexdev_enqueue_burst(uint8_t dev_id, uint16_t qp_id,\n \tstruct rte_regexdev *dev = &rte_regex_devices[dev_id];\n #ifdef RTE_LIBRTE_REGEXDEV_DEBUG\n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->enqueue, -ENOTSUP);\n+\tif (*dev->enqueue == NULL)\n+\t\treturn -ENOTSUP;\n \tif (qp_id >= dev->data->dev_conf.nb_queue_pairs) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Invalid queue %d\\n\", qp_id);\n \t\treturn -EINVAL;\n@@ -1532,7 +1533,8 @@ rte_regexdev_dequeue_burst(uint8_t dev_id, uint16_t qp_id,\n \tstruct rte_regexdev *dev = &rte_regex_devices[dev_id];\n #ifdef RTE_LIBRTE_REGEXDEV_DEBUG\n \tRTE_REGEXDEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dequeue, -ENOTSUP);\n+\tif (*dev->dequeue == NULL)\n+\t\treturn -ENOTSUP;\n \tif (qp_id >= dev->data->dev_conf.nb_queue_pairs) {\n \t\tRTE_REGEXDEV_LOG(ERR, \"Invalid queue %d\\n\", qp_id);\n \t\treturn -EINVAL;\ndiff --git a/lib/security/rte_security.c b/lib/security/rte_security.c\nindex 4f5e4b4d49..1a2a408f0e 100644\n--- a/lib/security/rte_security.c\n+++ b/lib/security/rte_security.c\n@@ -131,7 +131,8 @@ __rte_security_set_pkt_metadata(struct rte_security_ctx *instance,\n \tRTE_PTR_OR_ERR_RET(instance, -EINVAL);\n \tRTE_PTR_OR_ERR_RET(instance->ops, -EINVAL);\n #endif\n-\tRTE_FUNC_PTR_OR_ERR_RET(*instance->ops->set_pkt_metadata, -ENOTSUP);\n+\tif (*instance->ops->set_pkt_metadata == NULL)\n+\t\treturn -ENOTSUP;\n \treturn instance->ops->set_pkt_metadata(instance->device,\n \t\t\t\t\t       sess, m, params);\n }\n@@ -145,7 +146,8 @@ __rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md)\n \tRTE_PTR_OR_ERR_RET(instance, NULL);\n \tRTE_PTR_OR_ERR_RET(instance->ops, NULL);\n #endif\n-\tRTE_FUNC_PTR_OR_ERR_RET(*instance->ops->get_userdata, NULL);\n+\tif (*instance->ops->get_userdata == NULL)\n+\t\treturn NULL;\n \tif (instance->ops->get_userdata(instance->device, md, &userdata))\n \t\treturn NULL;\n \ndiff --git a/lib/vhost/vdpa.c b/lib/vhost/vdpa.c\nindex b2a2919fc0..a6ca785b29 100644\n--- a/lib/vhost/vdpa.c\n+++ b/lib/vhost/vdpa.c\n@@ -266,7 +266,8 @@ rte_vdpa_get_stats_names(struct rte_vdpa_device *dev,\n \tif (!dev)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev->ops->get_stats_names, -ENOTSUP);\n+\tif (dev->ops->get_stats_names == NULL)\n+\t\treturn -ENOTSUP;\n \n \treturn dev->ops->get_stats_names(dev, stats_names, size);\n }\n@@ -278,7 +279,8 @@ rte_vdpa_get_stats(struct rte_vdpa_device *dev, uint16_t qid,\n \tif (!dev || !stats || !n)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev->ops->get_stats, -ENOTSUP);\n+\tif (dev->ops->get_stats == NULL)\n+\t\treturn -ENOTSUP;\n \n \treturn dev->ops->get_stats(dev, qid, stats, n);\n }\n@@ -289,7 +291,8 @@ rte_vdpa_reset_stats(struct rte_vdpa_device *dev, uint16_t qid)\n \tif (!dev)\n \t\treturn -EINVAL;\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(dev->ops->reset_stats, -ENOTSUP);\n+\tif (dev->ops->reset_stats == NULL)\n+\t\treturn -ENOTSUP;\n \n \treturn dev->ops->reset_stats(dev, qid);\n }\ndiff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c\nindex 4ad28bac45..0ae059ad29 100644\n--- a/lib/vhost/vhost_user.c\n+++ b/lib/vhost/vhost_user.c\n@@ -3381,8 +3381,10 @@ int rte_vhost_host_notifier_ctrl(int vid, uint16_t qid, bool enable)\n \t\tq_last = qid;\n \t}\n \n-\tRTE_FUNC_PTR_OR_ERR_RET(vdpa_dev->ops->get_vfio_device_fd, -ENOTSUP);\n-\tRTE_FUNC_PTR_OR_ERR_RET(vdpa_dev->ops->get_notify_area, -ENOTSUP);\n+\tif (vdpa_dev->ops->get_vfio_device_fd == NULL)\n+\t\treturn -ENOTSUP;\n+\tif (vdpa_dev->ops->get_notify_area == NULL)\n+\t\treturn -ENOTSUP;\n \n \tvfio_device_fd = vdpa_dev->ops->get_vfio_device_fd(vid);\n \tif (vfio_device_fd < 0)\n",
    "prefixes": [
        "v5",
        "08/27"
    ]
}