diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ice/ice_irq.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ice/ice_irq.c | 25 | 
1 files changed, 13 insertions, 12 deletions
diff --git a/drivers/net/ethernet/intel/ice/ice_irq.c b/drivers/net/ethernet/intel/ice/ice_irq.c index 80c9ee2e64c1..d466d29b2ef1 100644 --- a/drivers/net/ethernet/intel/ice/ice_irq.c +++ b/drivers/net/ethernet/intel/ice/ice_irq.c @@ -45,7 +45,7 @@ static void ice_free_irq_res(struct ice_pf *pf, u16 index)  /**   * ice_get_irq_res - get an interrupt resource   * @pf: board private structure - * @dyn_only: force entry to be dynamically allocated + * @dyn_allowed: allow entry to be dynamically allocated   *   * Allocate new irq entry in the free slot of the tracker. Since xarray   * is used, always allocate new entry at the lowest possible index. Set @@ -53,11 +53,12 @@ static void ice_free_irq_res(struct ice_pf *pf, u16 index)   *   * Returns allocated irq entry or NULL on failure.   */ -static struct ice_irq_entry *ice_get_irq_res(struct ice_pf *pf, bool dyn_only) +static struct ice_irq_entry *ice_get_irq_res(struct ice_pf *pf, +					     bool dyn_allowed)  { -	struct xa_limit limit = { .max = pf->irq_tracker.num_entries, +	struct xa_limit limit = { .max = pf->irq_tracker.num_entries - 1,  				  .min = 0 }; -	unsigned int num_static = pf->irq_tracker.num_static; +	unsigned int num_static = pf->irq_tracker.num_static - 1;  	struct ice_irq_entry *entry;  	unsigned int index;  	int ret; @@ -66,9 +67,9 @@ static struct ice_irq_entry *ice_get_irq_res(struct ice_pf *pf, bool dyn_only)  	if (!entry)  		return NULL; -	/* skip preallocated entries if the caller says so */ -	if (dyn_only) -		limit.min = num_static; +	/* only already allocated if the caller says so */ +	if (!dyn_allowed) +		limit.max = num_static;  	ret = xa_alloc(&pf->irq_tracker.entries, &index, entry, limit,  		       GFP_KERNEL); @@ -78,7 +79,7 @@ static struct ice_irq_entry *ice_get_irq_res(struct ice_pf *pf, bool dyn_only)  		entry = NULL;  	} else {  		entry->index = index; -		entry->dynamic = index >= num_static; +		entry->dynamic = index > num_static;  	}  	return entry; @@ -137,7 +138,7 @@ int ice_init_interrupt_scheme(struct ice_pf *pf)  /**   * ice_alloc_irq - Allocate new interrupt vector   * @pf: board private structure - * @dyn_only: force dynamic allocation of the interrupt + * @dyn_allowed: allow dynamic allocation of the interrupt   *   * Allocate new interrupt vector for a given owner id.   * return struct msi_map with interrupt details and track @@ -150,20 +151,20 @@ int ice_init_interrupt_scheme(struct ice_pf *pf)   * interrupt will be allocated with pci_msix_alloc_irq_at.   *   * Some callers may only support dynamically allocated interrupts. - * This is indicated with dyn_only flag. + * This is indicated with dyn_allowed flag.   *   * On failure, return map with negative .index. The caller   * is expected to check returned map index.   *   */ -struct msi_map ice_alloc_irq(struct ice_pf *pf, bool dyn_only) +struct msi_map ice_alloc_irq(struct ice_pf *pf, bool dyn_allowed)  {  	int sriov_base_vector = pf->sriov_base_vector;  	struct msi_map map = { .index = -ENOENT };  	struct device *dev = ice_pf_to_dev(pf);  	struct ice_irq_entry *entry; -	entry = ice_get_irq_res(pf, dyn_only); +	entry = ice_get_irq_res(pf, dyn_allowed);  	if (!entry)  		return map;  | 
