Thanks Cunming, I'll send out v2 patch. > -----Original Message----- > From: Liang, Cunming > Sent: Monday, October 26, 2015 3:36 PM > To: Liu, Yong; dev at dpdk.org > Subject: Re: [dpdk-dev] [PATCH v1 1/7] e1000: add rx interrupt support > > Hi Yong, > > On 9/25/2015 4:28 PM, Yong Liu wrote: > > From: Marvin Liu <yong.liu at intel.com> > > > > Enable rx interrupt support on e1000 PF non-IOV mode. > As I know, e1000 hasn't IOV mode. It's not necessary to mention PF > non-IOV mode or not. > In addition, it's necessary to mention the patch series is to support > uio/vfio or both? To allow physical/emulation or both? > > The patch work with uio and vfio+msi mode. It support both physical device and qemu emulated device. This information will be added into cover letter.
> > Signed-off-by: Marvin Liu <yong.liu at intel.com> > > > > diff --git a/drivers/net/e1000/em_ethdev.c > b/drivers/net/e1000/em_ethdev.c > > index 912f5dd..99beb9c 100644 > > --- a/drivers/net/e1000/em_ethdev.c > > +++ b/drivers/net/e1000/em_ethdev.c > > @@ -81,6 +81,7 @@ static int eth_em_flow_ctrl_get(struct rte_eth_dev > *dev, > > static int eth_em_flow_ctrl_set(struct rte_eth_dev *dev, > > struct rte_eth_fc_conf *fc_conf); > > static int eth_em_interrupt_setup(struct rte_eth_dev *dev); > > +static int eth_em_rxq_interrupt_setup(struct rte_eth_dev *dev); > > static int eth_em_interrupt_get_status(struct rte_eth_dev *dev); > > static int eth_em_interrupt_action(struct rte_eth_dev *dev); > > static void eth_em_interrupt_handler(struct rte_intr_handle *handle, > > @@ -107,6 +108,7 @@ static void em_vlan_hw_strip_disable(struct > rte_eth_dev *dev); > > static void eth_em_vlan_filter_set(struct rte_eth_dev *dev, > > uint16_t vlan_id, int on); > > */ > > +static void em_rxq_intr_enable(struct e1000_hw *hw); > > static int eth_em_led_on(struct rte_eth_dev *dev); > > static int eth_em_led_off(struct rte_eth_dev *dev); > > > > @@ -608,6 +610,9 @@ eth_em_start(struct rte_eth_dev *dev) > > return ret; > > } > > } > > + /* check if rxq interrupt is enabled */ > > + if (dev->data->dev_conf.intr_conf.rxq != 0) > > + eth_em_rxq_interrupt_setup(dev); > > > > adapter->stopped = 0; > > > > @@ -1276,6 +1281,39 @@ eth_em_interrupt_setup(struct rte_eth_dev *dev) > > return (0); > > } > > > > +/* It clears the interrupt causes and enables the interrupt. > Comments start from next line of '/*' or '/**'? > > + * It will be called once only during nic initialized. > > + * > > + * @param dev > > + * Pointer to struct rte_eth_dev. > > + * > > + * @return > > + * - On success, zero. > > + * - On failure, a negative value. > > + */ > > +static int > > +eth_em_rxq_interrupt_setup(struct rte_eth_dev *dev) > > +{ > > + struct e1000_hw *hw = > > + E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > + > > + E1000_READ_REG(hw, E1000_ICR); > > + em_rxq_intr_enable(hw); > > + return 0; > > +} > > + > > +/* It enable receive packet interrupt. > The same. > > + * @param hw > > + * Pointer to struct e1000_hw > > + * > > + * @return > > + */ > > +static void > > +em_rxq_intr_enable(struct e1000_hw *hw) > > +{ > > + E1000_WRITE_REG(hw, E1000_IMS, E1000_IMS_RXT0); > To make sure post-write be finished immediately, E1000_WRITE_FLUSH() > shall add behind. Thanks, will added into v2 patch. > > +} > > + > > /* > > * It reads ICR and gets interrupt causes, check it and set a bit flag > > * to update link status.