RE: [Intel-wired-lan] [PATCH net-next V2 2/2] intel: ixgbevf: Support Windows hosts (Hyper-V)

2016-04-18 Thread KY Srinivasan


> -Original Message-
> From: Joe Perches [mailto:j...@perches.com]
> Sent: Monday, April 18, 2016 10:00 AM
> To: KY Srinivasan ; Alexander Duyck
> 
> Cc: David Miller ; Netdev
> ; linux-ker...@vger.kernel.org;
> de...@linuxdriverproject.org; o...@aepfle.de; Robo Bot
> ; Jason Wang ;
> e...@mellanox.com; ja...@mellanox.com; yevge...@mellanox.com; John
> Ronciak ; intel-wired-lan  l...@lists.osuosl.org>
> Subject: Re: [Intel-wired-lan] [PATCH net-next V2 2/2] intel: ixgbevf: Support
> Windows hosts (Hyper-V)
> 
> On Mon, 2016-04-18 at 16:52 +, KY Srinivasan wrote:
> []
> > > > +bool ixgbevf_on_hyperv(struct ixgbe_hw *hw)
> > > > +{
> > > > +   if (hw->mbx.ops.check_for_msg == NULL)
> > > > +   return true;
> > > > +   else
> > > > +   return false;
> > > > +}
> 
> trivia:
> 
> bool func(...)
> {
>   if ()
>   return true;
>   else
>   return false;
> }
> 
> can generally be written as:
> 
> bool func(...)
> {
>   return ;
> }

Thanks Joe; will update.

K. Y


Re: [Intel-wired-lan] [PATCH net-next V2 2/2] intel: ixgbevf: Support Windows hosts (Hyper-V)

2016-04-18 Thread Joe Perches
On Mon, 2016-04-18 at 16:52 +, KY Srinivasan wrote:
[]
> > > +bool ixgbevf_on_hyperv(struct ixgbe_hw *hw)
> > > +{
> > > +   if (hw->mbx.ops.check_for_msg == NULL)
> > > +   return true;
> > > +   else
> > > +   return false;
> > > +}

trivia:

bool func(...)
{
if ()
return true;
else
return false;
}

can generally be written as:

bool func(...)
{
return ;
}


RE: [Intel-wired-lan] [PATCH net-next V2 2/2] intel: ixgbevf: Support Windows hosts (Hyper-V)

2016-04-18 Thread KY Srinivasan


> -Original Message-
> From: Alexander Duyck [mailto:alexander.du...@gmail.com]
> Sent: Monday, April 18, 2016 9:18 AM
> To: KY Srinivasan 
> Cc: David Miller ; Netdev
> ; linux-ker...@vger.kernel.org;
> de...@linuxdriverproject.org; o...@aepfle.de; Robo Bot
> ; Jason Wang ;
> e...@mellanox.com; ja...@mellanox.com; yevge...@mellanox.com; John
> Ronciak ; intel-wired-lan  l...@lists.osuosl.org>
> Subject: Re: [Intel-wired-lan] [PATCH net-next V2 2/2] intel: ixgbevf: Support
> Windows hosts (Hyper-V)
> 
> On Sun, Apr 17, 2016 at 10:22 PM, K. Y. Srinivasan 
> wrote:
> > On Hyper-V, the VF/PF communication is a via software mediated path
> > as opposed to the hardware mailbox. Make the necessary
> > adjustments to support Hyper-V.
> >
> > Signed-off-by: K. Y. Srinivasan 
> > ---
> > V2: Addressed most of the comments from
> > Alexander Duyck 
> > and Rustad, Mark D .
> >
> >  drivers/net/ethernet/intel/ixgbevf/ixgbevf.h  |   12 ++
> >  drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   16 ++-
> >  drivers/net/ethernet/intel/ixgbevf/mbx.c  |   12 ++
> >  drivers/net/ethernet/intel/ixgbevf/vf.c   |  201
> +
> >  4 files changed, 237 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> > index 5ac60ee..3296d27 100644
> > --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> > +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> > @@ -460,9 +460,13 @@ enum ixbgevf_state_t {
> >
> >  enum ixgbevf_boards {
> > board_82599_vf,
> > +   board_82599_vf_hv,
> > board_X540_vf,
> > +   board_X540_vf_hv,
> > board_X550_vf,
> > +   board_X550_vf_hv,
> > board_X550EM_x_vf,
> > +   board_X550EM_x_vf_hv,
> >  };
> >
> >  enum ixgbevf_xcast_modes {
> > @@ -477,6 +481,13 @@ extern const struct ixgbevf_info
> ixgbevf_X550_vf_info;
> >  extern const struct ixgbevf_info ixgbevf_X550EM_x_vf_info;
> >  extern const struct ixgbe_mbx_operations ixgbevf_mbx_ops;
> >
> > +
> > +extern const struct ixgbevf_info ixgbevf_82599_vf_hv_info;
> > +extern const struct ixgbevf_info ixgbevf_X540_vf_hv_info;
> > +extern const struct ixgbevf_info ixgbevf_X550_vf_hv_info;
> > +extern const struct ixgbevf_info ixgbevf_X550EM_x_vf_hv_info;
> > +extern const struct ixgbe_mbx_operations ixgbevf_hv_mbx_ops;
> > +
> >  /* needed by ethtool.c */
> >  extern const char ixgbevf_driver_name[];
> >  extern const char ixgbevf_driver_version[];
> > @@ -494,6 +505,7 @@ void ixgbevf_free_rx_resources(struct ixgbevf_ring
> *);
> >  void ixgbevf_free_tx_resources(struct ixgbevf_ring *);
> >  void ixgbevf_update_stats(struct ixgbevf_adapter *adapter);
> >  int ethtool_ioctl(struct ifreq *ifr);
> > +bool ixgbevf_on_hyperv(struct ixgbe_hw *hw);
> >
> >  extern void ixgbevf_write_eitr(struct ixgbevf_q_vector *q_vector);
> >
> > diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
> b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
> > index 007cbe0..c761d80 100644
> > --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
> > +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
> > @@ -62,10 +62,14 @@ static char ixgbevf_copyright[] =
> > "Copyright (c) 2009 - 2015 Intel Corporation.";
> >
> >  static const struct ixgbevf_info *ixgbevf_info_tbl[] = {
> > -   [board_82599_vf] = &ixgbevf_82599_vf_info,
> > -   [board_X540_vf]  = &ixgbevf_X540_vf_info,
> > -   [board_X550_vf]  = &ixgbevf_X550_vf_info,
> > -   [board_X550EM_x_vf] = &ixgbevf_X550EM_x_vf_info,
> > +   [board_82599_vf]= &ixgbevf_82599_vf_info,
> > +   [board_82599_vf_hv] = &ixgbevf_82599_vf_hv_info,
> > +   [board_X540_vf] = &ixgbevf_X540_vf_info,
> > +   [board_X540_vf_hv]  = &ixgbevf_X540_vf_hv_info,
> > +   [board_X550_vf] = &ixgbevf_X550_vf_info,
> > +   [board_X550_vf_hv]  = &ixgbevf_X550_vf_hv_info,
> > +   [board_X550EM_x_vf] = &ixgbevf_X550EM_x_vf_info,
> > +   [board_X550EM_x_vf_hv]  = &ixgbevf_X550EM_x_vf_hv_info,
> >  };
> >
> >  /* ixgbevf_pci_tbl - PCI Device ID Table
> > @@ -78,9 +82,13 @@ static const struct ixgbevf_info *ixgbevf_info_tbl[] =
> {
> >   */
> >  static const struct pci_device_id ixgbevf_pci_tbl[] = {
> > {PCI_VDEVICE(INTEL, IXG

Re: [Intel-wired-lan] [PATCH net-next V2 2/2] intel: ixgbevf: Support Windows hosts (Hyper-V)

2016-04-18 Thread Alexander Duyck
On Sun, Apr 17, 2016 at 10:22 PM, K. Y. Srinivasan  wrote:
> On Hyper-V, the VF/PF communication is a via software mediated path
> as opposed to the hardware mailbox. Make the necessary
> adjustments to support Hyper-V.
>
> Signed-off-by: K. Y. Srinivasan 
> ---
> V2: Addressed most of the comments from
> Alexander Duyck 
> and Rustad, Mark D .
>
>  drivers/net/ethernet/intel/ixgbevf/ixgbevf.h  |   12 ++
>  drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |   16 ++-
>  drivers/net/ethernet/intel/ixgbevf/mbx.c  |   12 ++
>  drivers/net/ethernet/intel/ixgbevf/vf.c   |  201 
> +
>  4 files changed, 237 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h 
> b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> index 5ac60ee..3296d27 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
> @@ -460,9 +460,13 @@ enum ixbgevf_state_t {
>
>  enum ixgbevf_boards {
> board_82599_vf,
> +   board_82599_vf_hv,
> board_X540_vf,
> +   board_X540_vf_hv,
> board_X550_vf,
> +   board_X550_vf_hv,
> board_X550EM_x_vf,
> +   board_X550EM_x_vf_hv,
>  };
>
>  enum ixgbevf_xcast_modes {
> @@ -477,6 +481,13 @@ extern const struct ixgbevf_info ixgbevf_X550_vf_info;
>  extern const struct ixgbevf_info ixgbevf_X550EM_x_vf_info;
>  extern const struct ixgbe_mbx_operations ixgbevf_mbx_ops;
>
> +
> +extern const struct ixgbevf_info ixgbevf_82599_vf_hv_info;
> +extern const struct ixgbevf_info ixgbevf_X540_vf_hv_info;
> +extern const struct ixgbevf_info ixgbevf_X550_vf_hv_info;
> +extern const struct ixgbevf_info ixgbevf_X550EM_x_vf_hv_info;
> +extern const struct ixgbe_mbx_operations ixgbevf_hv_mbx_ops;
> +
>  /* needed by ethtool.c */
>  extern const char ixgbevf_driver_name[];
>  extern const char ixgbevf_driver_version[];
> @@ -494,6 +505,7 @@ void ixgbevf_free_rx_resources(struct ixgbevf_ring *);
>  void ixgbevf_free_tx_resources(struct ixgbevf_ring *);
>  void ixgbevf_update_stats(struct ixgbevf_adapter *adapter);
>  int ethtool_ioctl(struct ifreq *ifr);
> +bool ixgbevf_on_hyperv(struct ixgbe_hw *hw);
>
>  extern void ixgbevf_write_eitr(struct ixgbevf_q_vector *q_vector);
>
> diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c 
> b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
> index 007cbe0..c761d80 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
> +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
> @@ -62,10 +62,14 @@ static char ixgbevf_copyright[] =
> "Copyright (c) 2009 - 2015 Intel Corporation.";
>
>  static const struct ixgbevf_info *ixgbevf_info_tbl[] = {
> -   [board_82599_vf] = &ixgbevf_82599_vf_info,
> -   [board_X540_vf]  = &ixgbevf_X540_vf_info,
> -   [board_X550_vf]  = &ixgbevf_X550_vf_info,
> -   [board_X550EM_x_vf] = &ixgbevf_X550EM_x_vf_info,
> +   [board_82599_vf]= &ixgbevf_82599_vf_info,
> +   [board_82599_vf_hv] = &ixgbevf_82599_vf_hv_info,
> +   [board_X540_vf] = &ixgbevf_X540_vf_info,
> +   [board_X540_vf_hv]  = &ixgbevf_X540_vf_hv_info,
> +   [board_X550_vf] = &ixgbevf_X550_vf_info,
> +   [board_X550_vf_hv]  = &ixgbevf_X550_vf_hv_info,
> +   [board_X550EM_x_vf] = &ixgbevf_X550EM_x_vf_info,
> +   [board_X550EM_x_vf_hv]  = &ixgbevf_X550EM_x_vf_hv_info,
>  };
>
>  /* ixgbevf_pci_tbl - PCI Device ID Table
> @@ -78,9 +82,13 @@ static const struct ixgbevf_info *ixgbevf_info_tbl[] = {
>   */
>  static const struct pci_device_id ixgbevf_pci_tbl[] = {
> {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_VF), board_82599_vf },
> +   {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82599_VF_HV), board_82599_vf_hv },
> {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X540_VF), board_X540_vf },
> +   {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X540_VF_HV), board_X540_vf_hv },
> {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550_VF), board_X550_vf },
> +   {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550_VF_HV), board_X550_vf_hv },
> {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_X_VF), board_X550EM_x_vf },
> +   {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_X_VF_HV), 
> board_X550EM_x_vf_hv},
> /* required last entry */
> {0, }
>  };
> diff --git a/drivers/net/ethernet/intel/ixgbevf/mbx.c 
> b/drivers/net/ethernet/intel/ixgbevf/mbx.c
> index dc68fea..298a0da 100644
> --- a/drivers/net/ethernet/intel/ixgbevf/mbx.c
> +++ b/drivers/net/ethernet/intel/ixgbevf/mbx.c
> @@ -346,3 +346,15 @@ const struct ixgbe_mbx_operations ixgbevf_mbx_ops = {
> .check_for_rst  = ixgbevf_check_for_rst_vf,
>  };
>
> +/**
> + * Mailbox operations when running on Hyper-V.
> + * On Hyper-V, PF/VF communiction is not through the
> + * hardware mailbox; this communication is through
> + * a software mediated path.
> + * Most mail box operations are noop while running on
> + * Hyper-V.
> + */
> +const struct ixgbe_mbx_operations i