netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jacob Keller <jacob.e.keller@intel.com>
To: Simon Horman <simon.horman@corigine.com>,
	Tony Nguyen <anthony.l.nguyen@intel.com>
Cc: <davem@davemloft.net>, <kuba@kernel.org>, <pabeni@redhat.com>,
	<edumazet@google.com>, <netdev@vger.kernel.org>,
	Piotr Raczynski <piotr.raczynski@intel.com>,
	Michal Swiatkowski <michal.swiatkowski@linux.intel.com>,
	Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com>
Subject: Re: [PATCH net-next 6/8] ice: add individual interrupt allocation
Date: Wed, 10 May 2023 11:33:33 -0700	[thread overview]
Message-ID: <85bdedf5-930d-c47c-fee0-bb4fee480e42@intel.com> (raw)
In-Reply-To: <ZFtb1Uyr2j+wEM+g@corigine.com>



On 5/10/2023 1:54 AM, Simon Horman wrote:
> On Tue, May 09, 2023 at 10:00:46AM -0700, Tony Nguyen wrote:
>> From: Piotr Raczynski <piotr.raczynski@intel.com>
>>
>> Currently interrupt allocations, depending on a feature are distributed
>> in batches. Also, after allocation there is a series of operations that
>> distributes per irq settings through that batch of interrupts.
>>
>> Although driver does not yet support dynamic interrupt allocation, keep
>> allocated interrupts in a pool and add allocation abstraction logic to
>> make code more flexible. Keep per interrupt information in the
>> ice_q_vector structure, which yields ice_vsi::base_vector redundant.
>> Also, as a result there are a few functions that can be removed.
>>
>> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
>> Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
>> Reviewed-by: Simon Horman <simon.horman@corigine.com>
>> Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
>> Signed-off-by: Piotr Raczynski <piotr.raczynski@intel.com>
>> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
> 
> ...
> 
>> diff --git a/drivers/net/ethernet/intel/ice/ice_base.c b/drivers/net/ethernet/intel/ice/ice_base.c
>> index 1911d644dfa8..7dd7a0f32471 100644
>> --- a/drivers/net/ethernet/intel/ice/ice_base.c
>> +++ b/drivers/net/ethernet/intel/ice/ice_base.c
>> @@ -105,8 +105,7 @@ static int ice_vsi_alloc_q_vector(struct ice_vsi *vsi, u16 v_idx)
>>  	struct ice_q_vector *q_vector;
>>  
>>  	/* allocate q_vector */
>> -	q_vector = devm_kzalloc(ice_pf_to_dev(pf), sizeof(*q_vector),
>> -				GFP_KERNEL);
>> +	q_vector = kzalloc(sizeof(*q_vector), GFP_KERNEL);

Especially since we moved away from devm_kzalloc here so it won't
automatically get released at driver unload. (Which is fine, I think
we're slowly moving away from devm here because we didn't really commit
to using it properly and had devm_kfree a lot anyways...).

>>  	if (!q_vector)
>>  		return -ENOMEM;
>>  
>> @@ -118,9 +117,31 @@ static int ice_vsi_alloc_q_vector(struct ice_vsi *vsi, u16 v_idx)
>>  	q_vector->rx.itr_mode = ITR_DYNAMIC;
>>  	q_vector->tx.type = ICE_TX_CONTAINER;
>>  	q_vector->rx.type = ICE_RX_CONTAINER;
>> +	q_vector->irq.index = -ENOENT;
>>  
>> -	if (vsi->type == ICE_VSI_VF)
>> +	if (vsi->type == ICE_VSI_VF) {
>> +		q_vector->reg_idx = ice_calc_vf_reg_idx(vsi->vf, q_vector);
>>  		goto out;
>> +	} else if (vsi->type == ICE_VSI_CTRL && vsi->vf) {
>> +		struct ice_vsi *ctrl_vsi = ice_get_vf_ctrl_vsi(pf, vsi);
>> +
>> +		if (ctrl_vsi) {
>> +			if (unlikely(!ctrl_vsi->q_vectors))
>> +				return -ENOENT;
> 
> q_vector appears to be leaked here.

Yea that seems like a leak to me too. We allocate q_vector near the
start of the function then perform some lookup checks here per VSI type
to get the index. We wanted to obtain the irq value from the CTRL VSI. I
bet this case is very rare since it would be unlikely that we have a
ctrl_vsi pointer but do *not* have the q_vectors array setup yet.

Probably best if this was refactored a bit to have a cleanup exit label
so that it was more difficult to miss the cleanup.

> 
>> +			q_vector->irq = ctrl_vsi->q_vectors[0]->irq;
>> +			goto skip_alloc;
>> +		}
>> +	}
>> +
>> +	q_vector->irq = ice_alloc_irq(pf);
>> +	if (q_vector->irq.index < 0) {
>> +		kfree(q_vector);
>> +		return -ENOMEM;
>> +	}
>> +
>> +skip_alloc:
>> +	q_vector->reg_idx = q_vector->irq.index;
>> +
>>  	/* only set affinity_mask if the CPU is online */
>>  	if (cpu_online(v_idx))
>>  		cpumask_set_cpu(v_idx, &q_vector->affinity_mask);
> 
> ...

  reply	other threads:[~2023-05-10 18:36 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-09 17:00 [PATCH net-next 0/8][pull request] ice: support dynamic interrupt allocation Tony Nguyen
2023-05-09 17:00 ` [PATCH net-next 1/8] ice: move interrupt related code to separate file Tony Nguyen
2023-05-09 17:00 ` [PATCH net-next 2/8] ice: use pci_irq_vector helper function Tony Nguyen
2023-05-09 17:00 ` [PATCH net-next 3/8] ice: use preferred MSIX allocation api Tony Nguyen
2023-05-09 17:00 ` [PATCH net-next 4/8] ice: refactor VF control VSI interrupt handling Tony Nguyen
2023-05-09 17:00 ` [PATCH net-next 5/8] ice: remove redundant SRIOV code Tony Nguyen
2023-05-09 17:00 ` [PATCH net-next 6/8] ice: add individual interrupt allocation Tony Nguyen
2023-05-10  8:54   ` Simon Horman
2023-05-10 18:33     ` Jacob Keller [this message]
2023-05-11  7:34       ` Simon Horman
2023-05-09 17:00 ` [PATCH net-next 7/8] ice: track interrupt vectors with xarray Tony Nguyen
2023-05-09 17:00 ` [PATCH net-next 8/8] ice: add dynamic interrupt allocation Tony Nguyen

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=85bdedf5-930d-c47c-fee0-bb4fee480e42@intel.com \
    --to=jacob.e.keller@intel.com \
    --cc=anthony.l.nguyen@intel.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=himasekharx.reddy.pucha@intel.com \
    --cc=kuba@kernel.org \
    --cc=michal.swiatkowski@linux.intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=piotr.raczynski@intel.com \
    --cc=simon.horman@corigine.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).