All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hauke Mehrtens <hauke@hauke-m.de>
To: Stefan Assmann <sassmann@kpanic.de>, mcgrof@kernel.org
Cc: backports@vger.kernel.org
Subject: Re: [PATCH RFC v2 06/11] backports: igb fixes for linux-3.5
Date: Wed, 18 Dec 2013 21:35:05 +0100	[thread overview]
Message-ID: <52B206F9.3020702@hauke-m.de> (raw)
In-Reply-To: <1387382905-14274-7-git-send-email-sassmann@kpanic.de>

On 12/18/2013 05:08 PM, Stefan Assmann wrote:
> - add EEE defines
> - add struct ethtool_eee
> - backport __skb_alloc_page and __skb_alloc_pages
> - add patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch
> 
> Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
> ---
>  backport/backport-include/linux/ethtool.h          | 31 +++++++++++++++
>  backport/backport-include/linux/gfp.h              | 10 +++++
>  backport/backport-include/linux/mdio.h             | 23 ++++++++++-
>  backport/backport-include/linux/skbuff.h           | 46 ++++++++++++++++++++++
>  .../network/82-ethernet/0006-igb_eee.patch         | 15 +++++++
>  5 files changed, 124 insertions(+), 1 deletion(-)
>  create mode 100644 backport/backport-include/linux/gfp.h
>  create mode 100644 patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch
> 
> diff --git a/backport/backport-include/linux/ethtool.h b/backport/backport-include/linux/ethtool.h
> index 647fbf6..4f13cb9 100644
> --- a/backport/backport-include/linux/ethtool.h
> +++ b/backport/backport-include/linux/ethtool.h
> @@ -42,4 +42,35 @@ static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
>  }
>  #endif
>  
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
> +/**
> + * struct ethtool_eee - Energy Efficient Ethernet information
> + * @cmd: ETHTOOL_{G,S}EEE
> + * @supported: Mask of %SUPPORTED_* flags for the speed/duplex combinations
> + *	for which there is EEE support.
> + * @advertised: Mask of %ADVERTISED_* flags for the speed/duplex combinations
> + *	advertised as eee capable.
> + * @lp_advertised: Mask of %ADVERTISED_* flags for the speed/duplex
> + *	combinations advertised by the link partner as eee capable.
> + * @eee_active: Result of the eee auto negotiation.
> + * @eee_enabled: EEE configured mode (enabled/disabled).
> + * @tx_lpi_enabled: Whether the interface should assert its tx lpi, given
> + *	that eee was negotiated.
> + * @tx_lpi_timer: Time in microseconds the interface delays prior to asserting
> + *	its tx lpi (after reaching 'idle' state). Effective only when eee
> + *	was negotiated and tx_lpi_enabled was set.
> + */
> +struct ethtool_eee {
> +	__u32	cmd;
> +	__u32	supported;
> +	__u32	advertised;
> +	__u32	lp_advertised;
> +	__u32	eee_active;
> +	__u32	eee_enabled;
> +	__u32	tx_lpi_enabled;
> +	__u32	tx_lpi_timer;
> +	__u32	reserved[2];
> +};
> +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0) */

The get_eee and set_eee callbacks in struct ethtool_ops are not
available on this kernel, you could also add a #ifdef <kernel version>
around igb_get_eee() and igb_set_eee() and remove the struct here.

> +
>  #endif /* __BACKPORT_LINUX_ETHTOOL_H */
> diff --git a/backport/backport-include/linux/gfp.h b/backport/backport-include/linux/gfp.h
> new file mode 100644
> index 0000000..2962290
> --- /dev/null
> +++ b/backport/backport-include/linux/gfp.h
> @@ -0,0 +1,10 @@
> +#ifndef __BACKPORT_LINUX_GFP_H
> +#define __BACKPORT_LINUX_GFP_H
> +#include_next <linux/gfp.h>
> +
> +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
> +#define ___GFP_MEMALLOC		0x2000u
> +#define __GFP_MEMALLOC	((__force gfp_t)___GFP_MEMALLOC)/* Allow access to emergency reserves */
> +#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) */
> +
> +#endif /* __BACKPORT_LINUX_GFP_H */
> diff --git a/backport/backport-include/linux/mdio.h b/backport/backport-include/linux/mdio.h
> index 2a38121..838958a 100644
> --- a/backport/backport-include/linux/mdio.h
> +++ b/backport/backport-include/linux/mdio.h
> @@ -2,6 +2,28 @@
>  #define __BACKPORT_LINUX_MDIO_H
>  #include_next <linux/mdio.h>
>  
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
> +/* EEE Supported/Advertisement/LP Advertisement registers.
> + *
> + * EEE capability Register (3.20), Advertisement (7.60) and
> + * Link partner ability (7.61) registers have and can use the same identical
> + * bit masks.
> + */
> +#define MDIO_AN_EEE_ADV_100TX	0x0002	/* Advertise 100TX EEE cap */
> +#define MDIO_AN_EEE_ADV_1000T	0x0004	/* Advertise 1000T EEE cap */
> +/* Note: the two defines above can be potentially used by the user-land
> + * and cannot remove them now.
> + * So, we define the new generic MDIO_EEE_100TX and MDIO_EEE_1000T macros
> + * using the previous ones (that can be considered obsolete).
> + */
> +#define MDIO_EEE_100TX		MDIO_AN_EEE_ADV_100TX	/* 100TX EEE cap */
> +#define MDIO_EEE_1000T		MDIO_AN_EEE_ADV_1000T	/* 1000T EEE cap */
> +#define MDIO_EEE_10GT		0x0008	/* 10GT EEE cap */
> +#define MDIO_EEE_1000KX		0x0010	/* 1000KX EEE cap */
> +#define MDIO_EEE_10GKX4		0x0020	/* 10G KX4 EEE cap */
> +#define MDIO_EEE_10GKR		0x0040	/* 10G KR EEE cap */
> +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0) */
> +
>  #if LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)
>  /**
>   * mmd_eee_adv_to_ethtool_adv_t
> @@ -31,5 +53,4 @@ static inline u32 mmd_eee_adv_to_ethtool_adv_t(u16 eee_adv)
>  	return adv;
>  }
>  #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0) */
> -
>  #endif /* __BACKPORT_LINUX_MDIO_H */
> diff --git a/backport/backport-include/linux/skbuff.h b/backport/backport-include/linux/skbuff.h
> index 7d04b54..c1b2753 100644
> --- a/backport/backport-include/linux/skbuff.h
> +++ b/backport/backport-include/linux/skbuff.h
> @@ -224,6 +224,52 @@ static inline void skb_queue_splice_tail(const struct sk_buff_head *list,
>  		     skb = skb->next)
>  #endif /* < 2.6.28 */
>  
> +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
> +/**
> + *	__skb_alloc_pages - allocate pages for ps-rx on a skb and preserve pfmemalloc data
> + *	@gfp_mask: alloc_pages_node mask. Set __GFP_NOMEMALLOC if not for network packet RX
> + *	@skb: skb to set pfmemalloc on if __GFP_MEMALLOC is used
> + *	@order: size of the allocation
> + *
> + * 	Allocate a new page.
> + *
> + * 	%NULL is returned if there is no free memory.
> +*/
> +static inline struct page *__skb_alloc_pages(gfp_t gfp_mask,
> +					      struct sk_buff *skb,
> +					      unsigned int order)
> +{
> +	struct page *page;
> +
> +	gfp_mask |= __GFP_COLD;
> +#if 0
> +	if (!(gfp_mask & __GFP_NOMEMALLOC))
> +		gfp_mask |= __GFP_MEMALLOC;
> +#endif
> +	page = alloc_pages_node(NUMA_NO_NODE, gfp_mask, order);
> +#if 0
> +	if (skb && page && page->pfmemalloc)
> +		skb->pfmemalloc = true;
> +#endif
> +	return page;
> +}
> +
> +/**
> + *	__skb_alloc_page - allocate a page for ps-rx for a given skb and preserve pfmemalloc data
> + *	@gfp_mask: alloc_pages_node mask. Set __GFP_NOMEMALLOC if not for network packet RX
> + *	@skb: skb to set pfmemalloc on if __GFP_MEMALLOC is used
> + *
> + * 	Allocate a new page.
> + *
> + * 	%NULL is returned if there is no free memory.
> + */
> +static inline struct page *__skb_alloc_page(gfp_t gfp_mask,
> +					     struct sk_buff *skb)
> +{
> +	return __skb_alloc_pages(gfp_mask, skb, 0);
> +}
> +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0) */
> +
>  #if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
>  #ifndef NETDEV_FRAG_PAGE_MAX_ORDER
>  #define NETDEV_FRAG_PAGE_MAX_ORDER get_order(32768)
> diff --git a/patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch b/patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch
> new file mode 100644
> index 0000000..67068f5
> --- /dev/null
> +++ b/patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch
> @@ -0,0 +1,15 @@
> +diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
> +index 05fd6f8..43ee8d0 100644
> +--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
> ++++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
> +@@ -3002,8 +3002,10 @@ static const struct ethtool_ops igb_ethtool_ops = {
> + 	.get_ts_info		= igb_get_ts_info,
> + 	.get_rxnfc		= igb_get_rxnfc,
> + 	.set_rxnfc		= igb_set_rxnfc,
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)
> + 	.get_eee		= igb_get_eee,
> + 	.set_eee		= igb_set_eee,
> ++#endif
> + 	.get_module_info	= igb_get_module_info,
> + 	.get_module_eeprom	= igb_get_module_eeprom,
> + 	.get_rxfh_indir_size	= igb_get_rxfh_indir_size,
> 


  reply	other threads:[~2013-12-18 20:35 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-18 16:08 [PATCH RFC v2 00/11] backports: add igb driver Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 01/11] backports: igb fixes for linux-3.12 Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 02/11] backports: igb fixes for linux-3.9 Stefan Assmann
2013-12-18 20:19   ` Hauke Mehrtens
2013-12-19  8:56     ` Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 03/11] backports: igb fixes for linux-3.8 Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 04/11] backports: igb fixes for linux-3.7 Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 05/11] backports: igb fixes for linux-3.6 Stefan Assmann
2013-12-18 20:27   ` Hauke Mehrtens
2013-12-19  9:50     ` Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 06/11] backports: igb fixes for linux-3.5 Stefan Assmann
2013-12-18 20:35   ` Hauke Mehrtens [this message]
2013-12-19  9:55     ` Stefan Assmann
2013-12-22 18:56       ` Hauke Mehrtens
2013-12-18 16:08 ` [PATCH RFC v2 07/11] backports: igb fixes for linux-3.4 Stefan Assmann
2013-12-18 22:28   ` Hauke Mehrtens
2013-12-19 10:37     ` Stefan Assmann
2013-12-23 13:58       ` Hauke Mehrtens
2013-12-24 11:19         ` Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 08/11] backports: igb fixes for linux-3.3 Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 09/11] backports: igb fixes for linux-3.2 Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 10/11] backports: igb fixes for linux-3.1 Stefan Assmann
2013-12-18 16:08 ` [PATCH RFC v2 11/11] backports: enable igb and add defconfig Stefan Assmann

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=52B206F9.3020702@hauke-m.de \
    --to=hauke@hauke-m.de \
    --cc=backports@vger.kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=sassmann@kpanic.de \
    /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.