netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Duyck <alexander.duyck@gmail.com>
To: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>,
	"Skidmore, Donald C" <donald.c.skidmore@intel.com>,
	"Rose, Gregory V" <gregory.v.rose@intel.com>,
	"Kirsher, Jeffrey T" <jeffrey.t.kirsher@intel.com>,
	"intel-wired-lan@lists.osuosl.org"
	<intel-wired-lan@lists.osuosl.org>
Cc: "nhorman@redhat.com" <nhorman@redhat.com>,
	"jogreene@redhat.com" <jogreene@redhat.com>,
	Linux Netdev List <netdev@vger.kernel.org>,
	"Choi, Sy Jong" <sy.jong.choi@intel.com>,
	Rony Efraim <ronye@mellanox.com>,
	David Miller <davem@davemloft.net>,
	Edward Cree <ecree@solarflare.com>,
	Or Gerlitz <gerlitz.or@gmail.com>,
	"sassmann@redhat.com" <sassmann@redhat.com>
Subject: Re: [Intel-wired-lan] [PATCH v6 2/3] ixgbe: Add new ndo to trust VF
Date: Wed, 17 Jun 2015 09:22:09 -0700	[thread overview]
Message-ID: <55819EB1.5090203@gmail.com> (raw)
In-Reply-To: <7F861DC0615E0C47A872E6F3C5FCDDBD05EE18AA@BPXM14GP.gisp.nec.co.jp>

On 06/17/2015 04:43 AM, Hiroshi Shimamoto wrote:
> From: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
>
> Implements the new netdev op to trust VF in ixgbe.
>
> The administrator can turn on and off VF trusted by ip command which
> supports trust message.
>   # ip link set dev eth0 vf 1 trust on
> or
>   # ip link set dev eth0 vf 1 trust off
>
> Send a ping to reset VF on changing the status of trusting.
> VF driver will reconfigure its features on reset.
>
> Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
> ---
>   drivers/net/ethernet/intel/ixgbe/ixgbe.h       |  1 +
>   drivers/net/ethernet/intel/ixgbe/ixgbe_main.c  |  1 +
>   drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c | 45 ++++++++++++++++++++++----
>   drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h |  1 +
>   4 files changed, 41 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
> index 8830c0f..7f76c12 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
> @@ -152,6 +152,7 @@ struct vf_data_storage {
>   	u16 vlan_count;
>   	u8 spoofchk_enabled;
>   	bool rss_query_enabled;
> +	u8 trusted;
>   	unsigned int vf_api;
>   };
>

At some point these boolean values should be converted to bit flags to 
save space.  At this point it looks like you have something like 5 
boolean values now in this structure.  If you converted them to a u8 
field of bit flags you could save about 4 bytes per instance.

> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> index 5f1b06a..376b49b 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
> @@ -8349,6 +8349,7 @@ static const struct net_device_ops ixgbe_netdev_ops = {
>   	.ndo_set_vf_rate	= ixgbe_ndo_set_vf_bw,
>   	.ndo_set_vf_spoofchk	= ixgbe_ndo_set_vf_spoofchk,
>   	.ndo_set_vf_rss_query_en = ixgbe_ndo_set_vf_rss_query_en,
> +	.ndo_set_vf_trust	= ixgbe_ndo_set_vf_trust,
>   	.ndo_get_vf_config	= ixgbe_ndo_get_vf_config,
>   	.ndo_get_stats64	= ixgbe_get_stats64,
>   #ifdef CONFIG_IXGBE_DCB
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> index 1d17b58..826f88e 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
> @@ -116,6 +116,9 @@ static int __ixgbe_enable_sriov(struct ixgbe_adapter *adapter)
>   			 * we want to disable the querying by default.
>   			 */
>   			adapter->vfinfo[i].rss_query_enabled = 0;
> +
> +			/* Untrust all VFs */
> +			adapter->vfinfo[i].trusted = false;
>   		}
>
>   		return 0;
> @@ -1124,18 +1127,23 @@ void ixgbe_disable_tx_rx(struct ixgbe_adapter *adapter)
>   	IXGBE_WRITE_REG(hw, IXGBE_VFRE(1), 0);
>   }
>
> -void ixgbe_ping_all_vfs(struct ixgbe_adapter *adapter)
> +static inline void ixgbe_ping_vf(struct ixgbe_adapter *adapter, int vf)
>   {
>   	struct ixgbe_hw *hw = &adapter->hw;
>   	u32 ping;
> +
> +	ping = IXGBE_PF_CONTROL_MSG;
> +	if (adapter->vfinfo[vf].clear_to_send)
> +		ping |= IXGBE_VT_MSGTYPE_CTS;
> +	ixgbe_write_mbx(hw, &ping, 1, vf);
> +}
> +
> +void ixgbe_ping_all_vfs(struct ixgbe_adapter *adapter)
> +{
>   	int i;
>
> -	for (i = 0 ; i < adapter->num_vfs; i++) {
> -		ping = IXGBE_PF_CONTROL_MSG;
> -		if (adapter->vfinfo[i].clear_to_send)
> -			ping |= IXGBE_VT_MSGTYPE_CTS;
> -		ixgbe_write_mbx(hw, &ping, 1, i);
> -	}
> +	for (i = 0 ; i < adapter->num_vfs; i++)
> +		ixgbe_ping_vf(adapter, i);
>   }
>

This ping_all_vfs/ping_vf change doesn't really have anything to do with 
the ndo_trust part and should probably be a separate patch.

>   int ixgbe_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
> @@ -1416,6 +1424,28 @@ int ixgbe_ndo_set_vf_rss_query_en(struct net_device *netdev, int vf,
>   	return 0;
>   }
>
> +int ixgbe_ndo_set_vf_trust(struct net_device *netdev, int vf, bool setting)
> +{
> +	struct ixgbe_adapter *adapter = netdev_priv(netdev);
> +
> +	if (vf >= adapter->num_vfs)
> +		return -EINVAL;
> +
> +	/* nothing to do */
> +	if (adapter->vfinfo[vf].trusted == setting)
> +		return 0;
> +
> +	adapter->vfinfo[vf].trusted = setting;
> +
> +	/* reset VF to reconfigure features */
> +	adapter->vfinfo[vf].clear_to_send = false;
> +	ixgbe_ping_vf(adapter, vf);
> +
> +	e_info(drv, "VF %u is %strusted\n", vf, setting ? "" : "not ");
> +
> +	return 0;
> +}
> +
>   int ixgbe_ndo_get_vf_config(struct net_device *netdev,
>   			    int vf, struct ifla_vf_info *ivi)
>   {
> @@ -1430,5 +1460,6 @@ int ixgbe_ndo_get_vf_config(struct net_device *netdev,
>   	ivi->qos = adapter->vfinfo[vf].pf_qos;
>   	ivi->spoofchk = adapter->vfinfo[vf].spoofchk_enabled;
>   	ivi->rss_query_en = adapter->vfinfo[vf].rss_query_enabled;
> +	ivi->trusted = adapter->vfinfo[vf].trusted;
>   	return 0;
>   }
> diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h
> index 2c197e6..dad9257 100644
> --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h
> +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.h
> @@ -49,6 +49,7 @@ int ixgbe_ndo_set_vf_bw(struct net_device *netdev, int vf, int min_tx_rate,
>   int ixgbe_ndo_set_vf_spoofchk(struct net_device *netdev, int vf, bool setting);
>   int ixgbe_ndo_set_vf_rss_query_en(struct net_device *netdev, int vf,
>   				  bool setting);
> +int ixgbe_ndo_set_vf_trust(struct net_device *netdev, int vf, bool setting);
>   int ixgbe_ndo_get_vf_config(struct net_device *netdev,
>   			    int vf, struct ifla_vf_info *ivi);
>   void ixgbe_check_vf_rate_limit(struct ixgbe_adapter *adapter);
>

      reply	other threads:[~2015-06-17 16:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-17 11:43 [PATCH v6 2/3] ixgbe: Add new ndo to trust VF Hiroshi Shimamoto
2015-06-17 16:22 ` Alexander Duyck [this message]

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=55819EB1.5090203@gmail.com \
    --to=alexander.duyck@gmail.com \
    --cc=davem@davemloft.net \
    --cc=donald.c.skidmore@intel.com \
    --cc=ecree@solarflare.com \
    --cc=gerlitz.or@gmail.com \
    --cc=gregory.v.rose@intel.com \
    --cc=h-shimamoto@ct.jp.nec.com \
    --cc=intel-wired-lan@lists.osuosl.org \
    --cc=jeffrey.t.kirsher@intel.com \
    --cc=jogreene@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=nhorman@redhat.com \
    --cc=ronye@mellanox.com \
    --cc=sassmann@redhat.com \
    --cc=sy.jong.choi@intel.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).