From: Alexander Duyck <alexander.duyck@gmail.com>
To: intel-wired-lan@osuosl.org
Subject: [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);
>
WARNING: multiple messages have this Message-ID (diff)
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);
>
next prev parent reply other threads:[~2015-06-17 16:22 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-17 11:43 [Intel-wired-lan] [PATCH v6 2/3] ixgbe: Add new ndo to trust VF Hiroshi Shimamoto
2015-06-17 11:43 ` Hiroshi Shimamoto
2015-06-17 16:22 ` Alexander Duyck [this message]
2015-06-17 16:22 ` [Intel-wired-lan] " Alexander Duyck
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=intel-wired-lan@osuosl.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.