From: Simon Horman <horms@kernel.org>
To: jtornosm@redhat.com
Cc: 'Simon Horman' <horms@kernel.org>,
netdev@vger.kernel.org, intel-wired-lan@lists.osuosl.org,
jesse.brandeburg@intel.com, anthony.l.nguyen@intel.com,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, przemyslaw.kitszel@intel.com
Subject: Re: [Intel-wired-lan] [PATCH net v3 5/5] iavf: refactor virtchnl polling into single function
Date: Fri, 17 Apr 2026 12:45:04 +0100 [thread overview]
Message-ID: <20260417114503.95952-2-horms@kernel.org> (raw)
In-Reply-To: <20260414110006.124286-6-jtornosm@redhat.com>
From: 'Simon Horman' <horms@kernel.org>
This is an AI-generated review of your patch. The human sending this
email has considered the AI review valid, or at least plausible.
Full review at: https://sashiko.dev
---
iavf: refactor virtchnl polling into single function
This commit consolidates the init-time and runtime virtchnl message polling
logic into a single enhanced iavf_poll_virtchnl_msg() function.
diff --git a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
--- a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
[ ... ]
> +int iavf_poll_virtchnl_msg(struct iavf_hw *hw, struct iavf_arq_event_info *event,
> + enum virtchnl_ops op_to_poll, unsigned int timeout_ms,
> + bool (*condition)(struct iavf_adapter *, const void *),
> + const void *cond_data)
> {
[ ... ]
> + do {
> + if (timeout_ms && iavf_virtchnl_completion_done(adapter, condition,
> + cond_data, op_to_poll))
> + return 0;
>
> + status = iavf_clean_arq_element(hw, event, &pending);
> + if (status == IAVF_SUCCESS) {
> + received_op = (enum virtchnl_ops)le32_to_cpu(event->desc.cookie_high);
>
> + /* Handle reset events specially */
> + if (received_op == VIRTCHNL_OP_EVENT) {
> + struct virtchnl_pf_event *vpe =
> + (struct virtchnl_pf_event *)event->msg_buf;
>
> + if (vpe->event != VIRTCHNL_EVENT_RESET_IMPENDING)
> + continue;
If received_op is VIRTCHNL_OP_EVENT but not VIRTCHNL_EVENT_RESET_IMPENDING,
the loop executes continue. Does this mean that during runtime polling (when
timeout_ms > 0), other asynchronous events like VIRTCHNL_EVENT_LINK_CHANGE
bypass iavf_virtchnl_completion() entirely and get discarded?
> +
> + dev_info(&adapter->pdev->dev,
> + "Reset indication received from the PF\n");
> + if (!(adapter->flags & IAVF_FLAG_RESET_PENDING))
> + iavf_schedule_reset(adapter,
> + IAVF_FLAG_RESET_PENDING);
> +
> + return -EIO;
> + }
> +
> + v_retval = le32_to_cpu(event->desc.cookie_low);
> +
> + if (!timeout_ms) {
> + if (received_op == op_to_poll)
> + return virtchnl_status_to_errno((enum virtchnl_status_code)
> + v_retval);
> + } else {
> + iavf_virtchnl_completion(adapter, received_op,
> + (enum iavf_status)v_retval,
> + event->msg_buf, event->msg_len);
> + }
> +
> + if (pending)
> + continue;
When pending is true, the loop proceeds to the next iteration before executing
the memset buffer clearing code below. Might this leave stale data in
event->msg_buf for the next iavf_clean_arq_element() call if the subsequent
message is smaller than the previous one? The original implementation zeroed
the buffer before checking pending.
> + } else if (!timeout_ms) {
> + return iavf_status_to_errno(status);
> + }
>
> + if (timeout_ms) {
> + memset(event->msg_buf, 0, IAVF_MAX_AQ_BUF_SIZE);
The size passed to memset is hardcoded to IAVF_MAX_AQ_BUF_SIZE. If a caller
ever provides a timeout but passes a smaller buffer in the event structure,
could this write out of bounds?
For example, other callers like iavf_get_vf_supported_rxdids() use an 8-byte
stack variable for event->msg_buf with event->buf_len set to 8. Would it be
safer to use event->buf_len here instead of the hardcoded macro?
> + usleep_range(50, 75);
> }
>
> + } while (!timeout_ms || time_before(jiffies, timeout));
WARNING: multiple messages have this Message-ID (diff)
From: Simon Horman <horms@kernel.org>
To: jtornosm@redhat.com
Cc: 'Simon Horman' <horms@kernel.org>,
netdev@vger.kernel.org, intel-wired-lan@lists.osuosl.org,
jesse.brandeburg@intel.com, anthony.l.nguyen@intel.com,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, przemyslaw.kitszel@intel.com
Subject: Re: [PATCH net v3 5/5] iavf: refactor virtchnl polling into single function
Date: Fri, 17 Apr 2026 12:45:04 +0100 [thread overview]
Message-ID: <20260417114503.95952-2-horms@kernel.org> (raw)
In-Reply-To: <20260414110006.124286-6-jtornosm@redhat.com>
From: 'Simon Horman' <horms@kernel.org>
This is an AI-generated review of your patch. The human sending this
email has considered the AI review valid, or at least plausible.
Full review at: https://sashiko.dev
---
iavf: refactor virtchnl polling into single function
This commit consolidates the init-time and runtime virtchnl message polling
logic into a single enhanced iavf_poll_virtchnl_msg() function.
diff --git a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
--- a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
[ ... ]
> +int iavf_poll_virtchnl_msg(struct iavf_hw *hw, struct iavf_arq_event_info *event,
> + enum virtchnl_ops op_to_poll, unsigned int timeout_ms,
> + bool (*condition)(struct iavf_adapter *, const void *),
> + const void *cond_data)
> {
[ ... ]
> + do {
> + if (timeout_ms && iavf_virtchnl_completion_done(adapter, condition,
> + cond_data, op_to_poll))
> + return 0;
>
> + status = iavf_clean_arq_element(hw, event, &pending);
> + if (status == IAVF_SUCCESS) {
> + received_op = (enum virtchnl_ops)le32_to_cpu(event->desc.cookie_high);
>
> + /* Handle reset events specially */
> + if (received_op == VIRTCHNL_OP_EVENT) {
> + struct virtchnl_pf_event *vpe =
> + (struct virtchnl_pf_event *)event->msg_buf;
>
> + if (vpe->event != VIRTCHNL_EVENT_RESET_IMPENDING)
> + continue;
If received_op is VIRTCHNL_OP_EVENT but not VIRTCHNL_EVENT_RESET_IMPENDING,
the loop executes continue. Does this mean that during runtime polling (when
timeout_ms > 0), other asynchronous events like VIRTCHNL_EVENT_LINK_CHANGE
bypass iavf_virtchnl_completion() entirely and get discarded?
> +
> + dev_info(&adapter->pdev->dev,
> + "Reset indication received from the PF\n");
> + if (!(adapter->flags & IAVF_FLAG_RESET_PENDING))
> + iavf_schedule_reset(adapter,
> + IAVF_FLAG_RESET_PENDING);
> +
> + return -EIO;
> + }
> +
> + v_retval = le32_to_cpu(event->desc.cookie_low);
> +
> + if (!timeout_ms) {
> + if (received_op == op_to_poll)
> + return virtchnl_status_to_errno((enum virtchnl_status_code)
> + v_retval);
> + } else {
> + iavf_virtchnl_completion(adapter, received_op,
> + (enum iavf_status)v_retval,
> + event->msg_buf, event->msg_len);
> + }
> +
> + if (pending)
> + continue;
When pending is true, the loop proceeds to the next iteration before executing
the memset buffer clearing code below. Might this leave stale data in
event->msg_buf for the next iavf_clean_arq_element() call if the subsequent
message is smaller than the previous one? The original implementation zeroed
the buffer before checking pending.
> + } else if (!timeout_ms) {
> + return iavf_status_to_errno(status);
> + }
>
> + if (timeout_ms) {
> + memset(event->msg_buf, 0, IAVF_MAX_AQ_BUF_SIZE);
The size passed to memset is hardcoded to IAVF_MAX_AQ_BUF_SIZE. If a caller
ever provides a timeout but passes a smaller buffer in the event structure,
could this write out of bounds?
For example, other callers like iavf_get_vf_supported_rxdids() use an 8-byte
stack variable for event->msg_buf with event->buf_len set to 8. Would it be
safer to use event->buf_len here instead of the hardcoded macro?
> + usleep_range(50, 75);
> }
>
> + } while (!timeout_ms || time_before(jiffies, timeout));
next prev parent reply other threads:[~2026-04-17 11:47 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-14 11:00 [Intel-wired-lan] [PATCH net v3 0/5] Fix i40e/ice/iavf VF bonding after netdev lock changes Jose Ignacio Tornos Martinez
2026-04-14 11:00 ` Jose Ignacio Tornos Martinez
2026-04-14 11:00 ` [Intel-wired-lan] [PATCH net v3 1/5] iavf: return EBUSY if reset in progress or not ready during MAC change Jose Ignacio Tornos Martinez
2026-04-14 11:00 ` Jose Ignacio Tornos Martinez
2026-04-17 14:38 ` [Intel-wired-lan] " Przemek Kitszel
2026-04-14 11:00 ` [Intel-wired-lan] [PATCH net v3 2/5] i40e: skip unnecessary VF reset when setting trust Jose Ignacio Tornos Martinez
2026-04-14 11:00 ` Jose Ignacio Tornos Martinez
2026-04-14 11:41 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-04-14 11:41 ` Loktionov, Aleksandr
2026-04-16 15:31 ` Simon Horman
2026-04-16 15:31 ` Simon Horman
2026-04-14 11:00 ` [Intel-wired-lan] [PATCH net v3 3/5] iavf: send MAC change request synchronously Jose Ignacio Tornos Martinez
2026-04-14 11:00 ` Jose Ignacio Tornos Martinez
2026-04-17 9:31 ` [Intel-wired-lan] " Simon Horman
2026-04-17 9:31 ` Simon Horman
2026-04-17 13:05 ` [Intel-wired-lan] " Przemek Kitszel
2026-04-17 13:05 ` Przemek Kitszel
2026-04-21 10:45 ` [Intel-wired-lan] " Jose Ignacio Tornos Martinez
2026-04-14 11:00 ` [Intel-wired-lan] [PATCH net v3 4/5] ice: skip unnecessary VF reset when setting trust Jose Ignacio Tornos Martinez
2026-04-14 11:00 ` Jose Ignacio Tornos Martinez
2026-04-16 13:55 ` [Intel-wired-lan] " Simon Horman
2026-04-16 13:55 ` Simon Horman
2026-04-14 11:00 ` [Intel-wired-lan] [PATCH net v3 5/5] iavf: refactor virtchnl polling into single function Jose Ignacio Tornos Martinez
2026-04-14 11:00 ` Jose Ignacio Tornos Martinez
2026-04-14 11:43 ` [Intel-wired-lan] " Loktionov, Aleksandr
2026-04-14 11:43 ` Loktionov, Aleksandr
2026-04-16 5:51 ` Jose Ignacio Tornos Martinez
2026-04-16 5:51 ` Jose Ignacio Tornos Martinez
2026-04-16 23:09 ` Jacob Keller
2026-04-17 10:30 ` Jose Ignacio Tornos Martinez
2026-04-17 11:45 ` Simon Horman [this message]
2026-04-17 11:45 ` Simon Horman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260417114503.95952-2-horms@kernel.org \
--to=horms@kernel.org \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jesse.brandeburg@intel.com \
--cc=jtornosm@redhat.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=przemyslaw.kitszel@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.