Re: [PATCH net 2/2] macvtap: limit head length of skb allocated

2013-11-12 Thread Jason Wang
On 11/13/2013 01:45 AM, Greg Rose wrote:
> On Tue, 12 Nov 2013 18:02:57 +0800
> Jason Wang  wrote:
>
>> We currently use hdr_len as a hint of head length which is advertised
>> by guest. But when guest advertise a very big value, it can lead to
>> an 64K+ allocating of kmalloc() which has a very high possibility of
>> failure when host memory is fragmented or under heavy stress. The
>> huge hdr_len also reduce the effect of zerocopy or even disable if a
>> gso skb is linearized in guest.
>>
>> To solves those issues, this patch introduces an upper limit
>> (PAGE_SIZE) of the head, which guarantees an order 0 allocation each
>> time.
>>
>> Cc: Stefan Hajnoczi 
>> Cc: Michael S. Tsirkin 
>> Signed-off-by: Jason Wang 
>> ---
>> The patch was needed for stable.
>> ---
>>  drivers/net/macvtap.c | 5 +
>>  1 file changed, 5 insertions(+)
>>
>> diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
>> index 9dccb1e..7ee6f9d 100644
>> --- a/drivers/net/macvtap.c
>> +++ b/drivers/net/macvtap.c
>> @@ -523,6 +523,11 @@ static inline struct sk_buff
>> *macvtap_alloc_skb(struct sock *sk, size_t prepad, int noblock, int
>> *err) {
>>  struct sk_buff *skb;
>> +int good_linear = SKB_MAX_HEAD(prepad);
>> +
>> +/* Don't use huge linear part */
>> +if (linear > good_linear)
>> +linear = good_linear;
>>  
>>  /* Under a page?  Don't bother with paged skb. */
>>  if (prepad + len < PAGE_SIZE || !linear)
> I see no problem with this or the tuntap patch except that in both
> cases kernel coding style would prefer that you align the local
> variable declarations in a reverse pyramid, longest at the beginning,
> shortest at the end.
>
> - Greg

Sure, will do it in V2.
Thanks
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net 2/2] macvtap: limit head length of skb allocated

2013-11-12 Thread Greg Rose
On Tue, 12 Nov 2013 18:02:57 +0800
Jason Wang  wrote:

> We currently use hdr_len as a hint of head length which is advertised
> by guest. But when guest advertise a very big value, it can lead to
> an 64K+ allocating of kmalloc() which has a very high possibility of
> failure when host memory is fragmented or under heavy stress. The
> huge hdr_len also reduce the effect of zerocopy or even disable if a
> gso skb is linearized in guest.
> 
> To solves those issues, this patch introduces an upper limit
> (PAGE_SIZE) of the head, which guarantees an order 0 allocation each
> time.
> 
> Cc: Stefan Hajnoczi 
> Cc: Michael S. Tsirkin 
> Signed-off-by: Jason Wang 
> ---
> The patch was needed for stable.
> ---
>  drivers/net/macvtap.c | 5 +
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
> index 9dccb1e..7ee6f9d 100644
> --- a/drivers/net/macvtap.c
> +++ b/drivers/net/macvtap.c
> @@ -523,6 +523,11 @@ static inline struct sk_buff
> *macvtap_alloc_skb(struct sock *sk, size_t prepad, int noblock, int
> *err) {
>   struct sk_buff *skb;
> + int good_linear = SKB_MAX_HEAD(prepad);
> +
> + /* Don't use huge linear part */
> + if (linear > good_linear)
> + linear = good_linear;
>  
>   /* Under a page?  Don't bother with paged skb. */
>   if (prepad + len < PAGE_SIZE || !linear)

I see no problem with this or the tuntap patch except that in both
cases kernel coding style would prefer that you align the local
variable declarations in a reverse pyramid, longest at the beginning,
shortest at the end.

- Greg
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net 2/2] macvtap: limit head length of skb allocated

2013-11-12 Thread Michael S. Tsirkin
On Tue, Nov 12, 2013 at 06:02:57PM +0800, Jason Wang wrote:
> We currently use hdr_len as a hint of head length which is advertised by
> guest. But when guest advertise a very big value, it can lead to an 64K+
> allocating of kmalloc() which has a very high possibility of failure when host
> memory is fragmented or under heavy stress. The huge hdr_len also reduce the
> effect of zerocopy or even disable if a gso skb is linearized in guest.
> 
> To solves those issues, this patch introduces an upper limit (PAGE_SIZE) of 
> the
> head, which guarantees an order 0 allocation each time.
> 
> Cc: Stefan Hajnoczi 
> Cc: Michael S. Tsirkin 
> Signed-off-by: Jason Wang 

Acked-by: Michael S. Tsirkin 

> ---
> The patch was needed for stable.
> ---
>  drivers/net/macvtap.c | 5 +
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
> index 9dccb1e..7ee6f9d 100644
> --- a/drivers/net/macvtap.c
> +++ b/drivers/net/macvtap.c
> @@ -523,6 +523,11 @@ static inline struct sk_buff *macvtap_alloc_skb(struct 
> sock *sk, size_t prepad,
>   int noblock, int *err)
>  {
>   struct sk_buff *skb;
> + int good_linear = SKB_MAX_HEAD(prepad);
> +
> + /* Don't use huge linear part */
> + if (linear > good_linear)
> + linear = good_linear;
>  
>   /* Under a page?  Don't bother with paged skb. */
>   if (prepad + len < PAGE_SIZE || !linear)
> -- 
> 1.8.3.2
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net 2/2] macvtap: limit head length of skb allocated

2013-11-12 Thread Michael S. Tsirkin
On Tue, Nov 12, 2013 at 06:02:57PM +0800, Jason Wang wrote:
 We currently use hdr_len as a hint of head length which is advertised by
 guest. But when guest advertise a very big value, it can lead to an 64K+
 allocating of kmalloc() which has a very high possibility of failure when host
 memory is fragmented or under heavy stress. The huge hdr_len also reduce the
 effect of zerocopy or even disable if a gso skb is linearized in guest.
 
 To solves those issues, this patch introduces an upper limit (PAGE_SIZE) of 
 the
 head, which guarantees an order 0 allocation each time.
 
 Cc: Stefan Hajnoczi stefa...@redhat.com
 Cc: Michael S. Tsirkin m...@redhat.com
 Signed-off-by: Jason Wang jasow...@redhat.com

Acked-by: Michael S. Tsirkin m...@redhat.com

 ---
 The patch was needed for stable.
 ---
  drivers/net/macvtap.c | 5 +
  1 file changed, 5 insertions(+)
 
 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
 index 9dccb1e..7ee6f9d 100644
 --- a/drivers/net/macvtap.c
 +++ b/drivers/net/macvtap.c
 @@ -523,6 +523,11 @@ static inline struct sk_buff *macvtap_alloc_skb(struct 
 sock *sk, size_t prepad,
   int noblock, int *err)
  {
   struct sk_buff *skb;
 + int good_linear = SKB_MAX_HEAD(prepad);
 +
 + /* Don't use huge linear part */
 + if (linear  good_linear)
 + linear = good_linear;
  
   /* Under a page?  Don't bother with paged skb. */
   if (prepad + len  PAGE_SIZE || !linear)
 -- 
 1.8.3.2
 
 --
 To unsubscribe from this list: send the line unsubscribe linux-kernel in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net 2/2] macvtap: limit head length of skb allocated

2013-11-12 Thread Greg Rose
On Tue, 12 Nov 2013 18:02:57 +0800
Jason Wang jasow...@redhat.com wrote:

 We currently use hdr_len as a hint of head length which is advertised
 by guest. But when guest advertise a very big value, it can lead to
 an 64K+ allocating of kmalloc() which has a very high possibility of
 failure when host memory is fragmented or under heavy stress. The
 huge hdr_len also reduce the effect of zerocopy or even disable if a
 gso skb is linearized in guest.
 
 To solves those issues, this patch introduces an upper limit
 (PAGE_SIZE) of the head, which guarantees an order 0 allocation each
 time.
 
 Cc: Stefan Hajnoczi stefa...@redhat.com
 Cc: Michael S. Tsirkin m...@redhat.com
 Signed-off-by: Jason Wang jasow...@redhat.com
 ---
 The patch was needed for stable.
 ---
  drivers/net/macvtap.c | 5 +
  1 file changed, 5 insertions(+)
 
 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
 index 9dccb1e..7ee6f9d 100644
 --- a/drivers/net/macvtap.c
 +++ b/drivers/net/macvtap.c
 @@ -523,6 +523,11 @@ static inline struct sk_buff
 *macvtap_alloc_skb(struct sock *sk, size_t prepad, int noblock, int
 *err) {
   struct sk_buff *skb;
 + int good_linear = SKB_MAX_HEAD(prepad);
 +
 + /* Don't use huge linear part */
 + if (linear  good_linear)
 + linear = good_linear;
  
   /* Under a page?  Don't bother with paged skb. */
   if (prepad + len  PAGE_SIZE || !linear)

I see no problem with this or the tuntap patch except that in both
cases kernel coding style would prefer that you align the local
variable declarations in a reverse pyramid, longest at the beginning,
shortest at the end.

- Greg
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH net 2/2] macvtap: limit head length of skb allocated

2013-11-12 Thread Jason Wang
On 11/13/2013 01:45 AM, Greg Rose wrote:
 On Tue, 12 Nov 2013 18:02:57 +0800
 Jason Wang jasow...@redhat.com wrote:

 We currently use hdr_len as a hint of head length which is advertised
 by guest. But when guest advertise a very big value, it can lead to
 an 64K+ allocating of kmalloc() which has a very high possibility of
 failure when host memory is fragmented or under heavy stress. The
 huge hdr_len also reduce the effect of zerocopy or even disable if a
 gso skb is linearized in guest.

 To solves those issues, this patch introduces an upper limit
 (PAGE_SIZE) of the head, which guarantees an order 0 allocation each
 time.

 Cc: Stefan Hajnoczi stefa...@redhat.com
 Cc: Michael S. Tsirkin m...@redhat.com
 Signed-off-by: Jason Wang jasow...@redhat.com
 ---
 The patch was needed for stable.
 ---
  drivers/net/macvtap.c | 5 +
  1 file changed, 5 insertions(+)

 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
 index 9dccb1e..7ee6f9d 100644
 --- a/drivers/net/macvtap.c
 +++ b/drivers/net/macvtap.c
 @@ -523,6 +523,11 @@ static inline struct sk_buff
 *macvtap_alloc_skb(struct sock *sk, size_t prepad, int noblock, int
 *err) {
  struct sk_buff *skb;
 +int good_linear = SKB_MAX_HEAD(prepad);
 +
 +/* Don't use huge linear part */
 +if (linear  good_linear)
 +linear = good_linear;
  
  /* Under a page?  Don't bother with paged skb. */
  if (prepad + len  PAGE_SIZE || !linear)
 I see no problem with this or the tuntap patch except that in both
 cases kernel coding style would prefer that you align the local
 variable declarations in a reverse pyramid, longest at the beginning,
 shortest at the end.

 - Greg

Sure, will do it in V2.
Thanks
 --
 To unsubscribe from this list: send the line unsubscribe linux-kernel in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 Please read the FAQ at  http://www.tux.org/lkml/

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/