Hi Thomas:

> -----Original Message-----
> From: Thomas Monjalon [mailto:thomas.monja...@6wind.com]
> Sent: Friday, February 10, 2017 6:19 PM
> To: Zhang, Qi Z <qi.z.zh...@intel.com>
> Cc: dev@dpdk.org; Wu, Jingjing <jingjing...@intel.com>
> Subject: Re: [PATCH] eal: fix max number of interrupt request
> 
> 2017-02-09 14:59, Qi Zhang:
> > The max number of interrupt request is possible be changed after
> > rte_intr_callback_register, so in get_max_intr, we need to check if
> > nessesary to update the max_intr.
> 
> So you are using rte_intr_enable() to update the max_intr field in the case of
> VFIO_MSIX.
> What about MSI, INTX and UIO cases?

My thought is, even without my fix, VFIO_MSIX is already the only case that try 
to modify max_intr field 
In get_max_intr, we have:
                                if (!src->intr_handle.max_intr)
                        src->intr_handle.max_intr = 1;
                else if (src->intr_handle.max_intr > RTE_MAX_RXTX_INTR_VEC_ID)
                        src->intr_handle.max_intr
                                = RTE_MAX_RXTX_INTR_VEC_ID + 1;
So my patch just follow this and fix some problem.

Another option is I can use a local variable that assigned by max_intr with 
boundary check, so get_max_intr can be totally removed and max_intr in 
intr_source will not be modified.

To me both fix are not perfect, I think the problem is in 
rte_intr_callback_register we just save a copy of the pci_dev->intr_handle but 
not the address point, so we are missing some mechanism to sync them.
But since we have tight schedule on the 17.02 release and this issue does cause 
some example code can't work, so we need to a fix it first, we may consider 
improve the mechanism later.

Thanks
Qi

Reply via email to