get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 798909,
    "url": "http://patchwork.ozlabs.org/api/patches/798909/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170807131812.86747-8-alice.michael@intel.com/",
    "project": {
        "id": 46,
        "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api",
        "name": "Intel Wired Ethernet development",
        "link_name": "intel-wired-lan",
        "list_id": "intel-wired-lan.osuosl.org",
        "list_email": "intel-wired-lan@osuosl.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170807131812.86747-8-alice.michael@intel.com>",
    "list_archive_url": null,
    "date": "2017-08-07T13:18:08",
    "name": "[next,S78-V5,08/12] i40evf: Enable VF to request an alternate queue allocation",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "be1ca277b338a7debf888b65b083965e27a6cc6a",
    "submitter": {
        "id": 71123,
        "url": "http://patchwork.ozlabs.org/api/people/71123/?format=api",
        "name": "Michael, Alice",
        "email": "alice.michael@intel.com"
    },
    "delegate": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/users/68/?format=api",
        "username": "jtkirshe",
        "first_name": "Jeff",
        "last_name": "Kirsher",
        "email": "jeffrey.t.kirsher@intel.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170807131812.86747-8-alice.michael@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/798909/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/798909/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@osuosl.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Authentication-Results": "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=osuosl.org\n\t(client-ip=140.211.166.138; helo=whitealder.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)",
        "Received": [
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xR9VP3dRtz9sPs\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue,  8 Aug 2017 07:22:53 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id AF44284F5C;\n\tMon,  7 Aug 2017 21:22:51 +0000 (UTC)",
            "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id bi85UgEtsLDQ; Mon,  7 Aug 2017 21:22:49 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 234C384F00;\n\tMon,  7 Aug 2017 21:22:49 +0000 (UTC)",
            "from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\tby ash.osuosl.org (Postfix) with ESMTP id 7C4641C415B\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon,  7 Aug 2017 21:22:47 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id 792112A29E\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon,  7 Aug 2017 21:22:47 +0000 (UTC)",
            "from silver.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id WinCuWb99Eex for <intel-wired-lan@lists.osuosl.org>;\n\tMon,  7 Aug 2017 21:22:45 +0000 (UTC)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n\tby silver.osuosl.org (Postfix) with ESMTPS id 7CD182475B\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon,  7 Aug 2017 21:22:45 +0000 (UTC)",
            "from orsmga004.jf.intel.com ([10.7.209.38])\n\tby fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t07 Aug 2017 14:22:44 -0700",
            "from unknown (HELO localhost.jf.intel.com) ([10.166.16.121])\n\tby orsmga004.jf.intel.com with ESMTP; 07 Aug 2017 14:22:43 -0700"
        ],
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.41,339,1498546800\"; d=\"scan'208\";a=\"116660475\"",
        "From": "Alice Michael <alice.michael@intel.com>",
        "To": "alice.michael@intel.com,\n\tintel-wired-lan@lists.osuosl.org",
        "Date": "Mon,  7 Aug 2017 09:18:08 -0400",
        "Message-Id": "<20170807131812.86747-8-alice.michael@intel.com>",
        "X-Mailer": "git-send-email 2.9.4",
        "In-Reply-To": "<20170807131812.86747-1-alice.michael@intel.com>",
        "References": "<20170807131812.86747-1-alice.michael@intel.com>",
        "Subject": "[Intel-wired-lan] [next PATCH S78-V5 08/12] i40evf: Enable VF to\n\trequest an alternate queue allocation",
        "X-BeenThere": "intel-wired-lan@osuosl.org",
        "X-Mailman-Version": "2.1.18-1",
        "Precedence": "list",
        "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.osuosl.org>",
        "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>",
        "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "intel-wired-lan-bounces@osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>"
    },
    "content": "From: Alan Brady <alan.brady@intel.com>\n\nCurrently the VF gets a default number of allocated queues from HW on\ninit and it could choose to enable or disable those allocated queues.\nThis makes it such that the VF can request more or less underlying\nallocated queues from the PF.\n\nFirst the VF negotiates the number of queues it wants that can be\nsupported by the PF and if successful asks for a reset.  During reset\nthe PF will reallocate the HW queues for the VF and will then remap the\nnew queues.\n\nSigned-off-by: Alan Brady <alan.brady@intel.com>\n---\n drivers/net/ethernet/intel/i40evf/i40evf.h         |  4 +\n drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c | 38 ++++++++-\n drivers/net/ethernet/intel/i40evf/i40evf_main.c    | 94 ++++++++++++++++++++--\n .../net/ethernet/intel/i40evf/i40evf_virtchnl.c    | 44 +++++++++-\n 4 files changed, 173 insertions(+), 7 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/i40evf/i40evf.h b/drivers/net/ethernet/intel/i40evf/i40evf.h\nindex a1af9b1..de0af52 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40evf.h\n+++ b/drivers/net/ethernet/intel/i40evf/i40evf.h\n@@ -102,6 +102,7 @@ struct i40e_vsi {\n #define I40E_TX_CTXTDESC(R, i) \\\n \t(&(((struct i40e_tx_context_desc *)((R)->desc))[i]))\n #define MAX_QUEUES 16\n+#define I40EVF_MAX_REQ_QUEUES 4\n \n #define I40EVF_HKEY_ARRAY_SIZE ((I40E_VFQF_HKEY_MAX_INDEX + 1) * 4)\n #define I40EVF_HLUT_ARRAY_SIZE ((I40E_VFQF_HLUT_MAX_INDEX + 1) * 4)\n@@ -200,6 +201,7 @@ struct i40evf_adapter {\n \tstruct list_head vlan_filter_list;\n \tchar misc_vector_name[IFNAMSIZ + 9];\n \tint num_active_queues;\n+\tint num_req_queues;\n \n \t/* TX */\n \tstruct i40e_ring *tx_rings;\n@@ -235,6 +237,7 @@ struct i40evf_adapter {\n #define I40EVF_FLAG_PROMISC_ON\t\t\tBIT(13)\n #define I40EVF_FLAG_ALLMULTI_ON\t\t\tBIT(14)\n #define I40EVF_FLAG_LEGACY_RX\t\t\tBIT(15)\n+#define I40EVF_FLAG_REINIT_ITR_NEEDED\t\tBIT(16)\n /* duplicates for common code */\n #define I40E_FLAG_DCB_ENABLED\t\t\t0\n #define I40E_FLAG_RX_CSUM_ENABLED\t\tI40EVF_FLAG_RX_CSUM_ENABLED\n@@ -349,6 +352,7 @@ void i40evf_deconfigure_queues(struct i40evf_adapter *adapter);\n void i40evf_enable_queues(struct i40evf_adapter *adapter);\n void i40evf_disable_queues(struct i40evf_adapter *adapter);\n void i40evf_map_queues(struct i40evf_adapter *adapter);\n+int i40evf_request_queues(struct i40evf_adapter *adapter, int num);\n void i40evf_add_ether_addrs(struct i40evf_adapter *adapter);\n void i40evf_del_ether_addrs(struct i40evf_adapter *adapter);\n void i40evf_add_vlans(struct i40evf_adapter *adapter);\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c b/drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c\nindex 65874d6..da006fa 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c\n+++ b/drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c\n@@ -669,7 +669,7 @@ static void i40evf_get_channels(struct net_device *netdev,\n \tstruct i40evf_adapter *adapter = netdev_priv(netdev);\n \n \t/* Report maximum channels */\n-\tch->max_combined = adapter->num_active_queues;\n+\tch->max_combined = I40EVF_MAX_REQ_QUEUES;\n \n \tch->max_other = NONQ_VECS;\n \tch->other_count = NONQ_VECS;\n@@ -678,6 +678,41 @@ static void i40evf_get_channels(struct net_device *netdev,\n }\n \n /**\n+ * i40evf_set_channels: set the new channel count\n+ * @netdev: network interface device structure\n+ * @ch: channel information structure\n+ *\n+ * Negotiate a new number of channels with the PF then do a reset.  During\n+ * reset we'll realloc queues and fix the RSS table.  Returns 0 on success,\n+ * negative on failure.\n+ **/\n+static int i40evf_set_channels(struct net_device *netdev,\n+\t\t\t       struct ethtool_channels *ch)\n+{\n+\tstruct i40evf_adapter *adapter = netdev_priv(netdev);\n+\tint num_req = ch->combined_count;\n+\n+\tif (num_req != adapter->num_active_queues &&\n+\t    !(adapter->vf_res->vf_cap_flags &\n+\t      VIRTCHNL_VF_OFFLOAD_REQ_QUEUES)) {\n+\t\tdev_info(&adapter->pdev->dev, \"PF is not capable of queue negotiation.\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/* All of these should have already been checked by ethtool before this\n+\t * even gets to us, but just to be sure.\n+\t */\n+\tif (num_req <= 0 || num_req > I40EVF_MAX_REQ_QUEUES)\n+\t\treturn -EINVAL;\n+\n+\tif (ch->rx_count || ch->tx_count || ch->other_count != NONQ_VECS)\n+\t\treturn -EINVAL;\n+\n+\tadapter->num_req_queues = num_req;\n+\treturn i40evf_request_queues(adapter, num_req);\n+}\n+\n+/**\n  * i40evf_get_rxfh_key_size - get the RSS hash key size\n  * @netdev: network interface device structure\n  *\n@@ -785,6 +820,7 @@ static const struct ethtool_ops i40evf_ethtool_ops = {\n \t.get_rxfh\t\t= i40evf_get_rxfh,\n \t.set_rxfh\t\t= i40evf_set_rxfh,\n \t.get_channels\t\t= i40evf_get_channels,\n+\t.set_channels\t\t= i40evf_set_channels,\n \t.get_rxfh_key_size\t= i40evf_get_rxfh_key_size,\n \t.get_link_ksettings\t= i40evf_get_link_ksettings,\n };\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c\nindex a216fd2..a803c6b 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c\n+++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c\n@@ -1189,9 +1189,18 @@ static int i40evf_alloc_queues(struct i40evf_adapter *adapter)\n {\n \tint i, num_active_queues;\n \n-\tnum_active_queues = min_t(int,\n-\t\t\t\t  adapter->vsi_res->num_queue_pairs,\n-\t\t\t\t  (int)(num_online_cpus()));\n+\t/* If we're in reset reallocating queues we don't actually know yet for\n+\t * certain the PF gave us the number of queues we asked for but we'll\n+\t * assume it did.  Once basic reset is finished we'll confirm once we\n+\t * start negotiating config with PF.\n+\t */\n+\tif (adapter->num_req_queues)\n+\t\tnum_active_queues = adapter->num_req_queues;\n+\telse\n+\t\tnum_active_queues = min_t(int,\n+\t\t\t\t\t  adapter->vsi_res->num_queue_pairs,\n+\t\t\t\t\t  (int)(num_online_cpus()));\n+\n \n \tadapter->tx_rings = kcalloc(num_active_queues,\n \t\t\t\t    sizeof(struct i40e_ring), GFP_KERNEL);\n@@ -1540,6 +1549,48 @@ static void i40evf_free_rss(struct i40evf_adapter *adapter)\n }\n \n /**\n+ * i40evf_reinit_interrupt_scheme - Reallocate queues and vectors\n+ * @adapter: board private structure\n+ *\n+ * Returns 0 on success, negative on failure\n+ **/\n+static int i40evf_reinit_interrupt_scheme(struct i40evf_adapter *adapter)\n+{\n+\tstruct net_device *netdev = adapter->netdev;\n+\tint err;\n+\n+\tif (netif_running(netdev))\n+\t\ti40evf_free_traffic_irqs(adapter);\n+\ti40evf_free_misc_irq(adapter);\n+\ti40evf_reset_interrupt_capability(adapter);\n+\ti40evf_free_q_vectors(adapter);\n+\ti40evf_free_queues(adapter);\n+\n+\terr =  i40evf_init_interrupt_scheme(adapter);\n+\tif (err)\n+\t\tgoto err;\n+\n+\tnetif_tx_stop_all_queues(netdev);\n+\n+\terr = i40evf_request_misc_irq(adapter);\n+\tif (err)\n+\t\tgoto err;\n+\n+\tset_bit(__I40E_VSI_DOWN, adapter->vsi.state);\n+\n+\terr = i40evf_map_rings_to_vectors(adapter);\n+\tif (err)\n+\t\tgoto err;\n+\n+\tif (RSS_AQ(adapter))\n+\t\tadapter->aq_required |= I40EVF_FLAG_AQ_CONFIGURE_RSS;\n+\telse\n+\t\terr = i40evf_init_rss(adapter);\n+err:\n+\treturn err;\n+}\n+\n+/**\n  * i40evf_watchdog_timer - Periodic call-back timer\n  * @data: pointer to adapter disguised as unsigned long\n  **/\n@@ -1885,8 +1936,15 @@ static void i40evf_reset_task(struct work_struct *work)\n \tif (err)\n \t\tdev_info(&adapter->pdev->dev, \"Failed to init adminq: %d\\n\",\n \t\t\t err);\n+\tadapter->aq_required = 0;\n \n-\tadapter->aq_required = I40EVF_FLAG_AQ_GET_CONFIG;\n+\tif (adapter->flags & I40EVF_FLAG_REINIT_ITR_NEEDED) {\n+\t\terr = i40evf_reinit_interrupt_scheme(adapter);\n+\t\tif (err)\n+\t\t\tgoto reset_err;\n+\t}\n+\n+\tadapter->aq_required |= I40EVF_FLAG_AQ_GET_CONFIG;\n \tadapter->aq_required |= I40EVF_FLAG_AQ_MAP_VECTORS;\n \n \t/* re-add all MAC filters */\n@@ -1916,6 +1974,15 @@ static void i40evf_reset_task(struct work_struct *work)\n \t\tif (err)\n \t\t\tgoto reset_err;\n \n+\t\tif (adapter->flags & I40EVF_FLAG_REINIT_ITR_NEEDED) {\n+\t\t\terr = i40evf_request_traffic_irqs(adapter,\n+\t\t\t\t\t\t\t  netdev->name);\n+\t\t\tif (err)\n+\t\t\t\tgoto reset_err;\n+\n+\t\t\tadapter->flags &= ~I40EVF_FLAG_REINIT_ITR_NEEDED;\n+\t\t}\n+\n \t\ti40evf_configure(adapter);\n \n \t\ti40evf_up_complete(adapter);\n@@ -2432,9 +2499,9 @@ static int i40evf_check_reset_complete(struct i40e_hw *hw)\n int i40evf_process_config(struct i40evf_adapter *adapter)\n {\n \tstruct virtchnl_vf_resource *vfres = adapter->vf_res;\n+\tint i, num_req_queues = adapter->num_req_queues;\n \tstruct net_device *netdev = adapter->netdev;\n \tstruct i40e_vsi *vsi = &adapter->vsi;\n-\tint i;\n \tnetdev_features_t hw_enc_features;\n \tnetdev_features_t hw_features;\n \n@@ -2448,6 +2515,23 @@ int i40evf_process_config(struct i40evf_adapter *adapter)\n \t\treturn -ENODEV;\n \t}\n \n+\tif (num_req_queues &&\n+\t    num_req_queues != adapter->vsi_res->num_queue_pairs) {\n+\t\t/* Problem.  The PF gave us fewer queues than what we had\n+\t\t * negotiated in our request.  Need a reset to see if we can't\n+\t\t * get back to a working state.\n+\t\t */\n+\t\tdev_err(&adapter->pdev->dev,\n+\t\t\t\"Requested %d queues, but PF only gave us %d.\\n\",\n+\t\t\tnum_req_queues,\n+\t\t\tadapter->vsi_res->num_queue_pairs);\n+\t\tadapter->flags |= I40EVF_FLAG_REINIT_ITR_NEEDED;\n+\t\tadapter->num_req_queues = adapter->vsi_res->num_queue_pairs;\n+\t\ti40evf_schedule_reset(adapter);\n+\t\treturn -ENODEV;\n+\t}\n+\tadapter->num_req_queues = 0;\n+\n \thw_enc_features = NETIF_F_SG\t\t\t|\n \t\t\t  NETIF_F_IP_CSUM\t\t|\n \t\t\t  NETIF_F_IPV6_CSUM\t\t|\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c\nindex 2bb0fe0..2bb81c3 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c\n+++ b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c\n@@ -160,7 +160,8 @@ int i40evf_send_vf_config_msg(struct i40evf_adapter *adapter)\n \t       VIRTCHNL_VF_OFFLOAD_WB_ON_ITR |\n \t       VIRTCHNL_VF_OFFLOAD_RSS_PCTYPE_V2 |\n \t       VIRTCHNL_VF_OFFLOAD_ENCAP |\n-\t       VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM;\n+\t       VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM |\n+\t       VIRTCHNL_VF_OFFLOAD_REQ_QUEUES;\n \n \tadapter->current_op = VIRTCHNL_OP_GET_VF_RESOURCES;\n \tadapter->aq_required &= ~I40EVF_FLAG_AQ_GET_CONFIG;\n@@ -385,6 +386,32 @@ void i40evf_map_queues(struct i40evf_adapter *adapter)\n }\n \n /**\n+ * i40evf_request_queues\n+ * @adapter: adapter structure\n+ * @num: number of requested queues\n+ *\n+ * We get a default number of queues from the PF.  This enables us to request a\n+ * different number.  Returns 0 on success, negative on failure\n+ **/\n+int i40evf_request_queues(struct i40evf_adapter *adapter, int num)\n+{\n+\tstruct virtchnl_vf_res_request vfres;\n+\n+\tif (adapter->current_op != VIRTCHNL_OP_UNKNOWN) {\n+\t\t/* bail because we already have a command pending */\n+\t\tdev_err(&adapter->pdev->dev, \"Cannot request queues, command %d pending\\n\",\n+\t\t\tadapter->current_op);\n+\t\treturn -EBUSY;\n+\t}\n+\n+\tvfres.num_queue_pairs = num;\n+\n+\tadapter->current_op = VIRTCHNL_OP_REQUEST_QUEUES;\n+\treturn i40evf_send_pf_msg(adapter, VIRTCHNL_OP_REQUEST_QUEUES,\n+\t\t\t\t  (u8 *)&vfres, sizeof(vfres));\n+}\n+\n+/**\n  * i40evf_add_ether_addrs\n  * @adapter: adapter structure\n  * @addrs: the MAC address filters to add (contiguous)\n@@ -1068,6 +1095,21 @@ void i40evf_virtchnl_completion(struct i40evf_adapter *adapter,\n \t\t\t\t \"Invalid message %d from PF\\n\", v_opcode);\n \t\t}\n \t\tbreak;\n+\tcase VIRTCHNL_OP_REQUEST_QUEUES: {\n+\t\tstruct virtchnl_vf_res_request *vfres =\n+\t\t\t(struct virtchnl_vf_res_request *)msg;\n+\t\tif (vfres->num_queue_pairs == adapter->num_req_queues) {\n+\t\t\tadapter->flags |= I40EVF_FLAG_REINIT_ITR_NEEDED;\n+\t\t\ti40evf_schedule_reset(adapter);\n+\t\t} else {\n+\t\t\tdev_info(&adapter->pdev->dev,\n+\t\t\t\t \"Requested %d queues, PF can support %d\\n\",\n+\t\t\t\t adapter->num_req_queues,\n+\t\t\t\t vfres->num_queue_pairs);\n+\t\t\tadapter->num_req_queues = 0;\n+\t\t}\n+\t\t}\n+\t\tbreak;\n \tdefault:\n \t\tif (adapter->current_op && (v_opcode != adapter->current_op))\n \t\t\tdev_warn(&adapter->pdev->dev, \"Expected response %d from PF, received %d\\n\",\n",
    "prefixes": [
        "next",
        "S78-V5",
        "08/12"
    ]
}