Re: [PATCH 1/5] pid: Implement task references.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Eric Dumazet <[email protected]> writes:

> This function is not inlined.
>
> Adding a test and a branch is a matter of 7 bytes.
>
>   'Bloating the icache' is a litle bit off :)

The size all depends on your architecture.  But I agree it
is not much of a size increase in general.

> Avoiding an atomic is important. This is already done elsewhere in the kernel,
> in a inlined function with *many* call sites :
>
> (See kfree_skb() in include/linux//skbuff.h )
>
> /*
>   * If users == 1, we are the only owner and are can avoid redundant
>   * atomic change.
>   */
>
> /**
>   *      kfree_skb - free an sk_buff
>   *      @skb: buffer to free
>   *
>   *      Drop a reference to the buffer and free it if the usage count has
>   *      hit zero.
>   */
> static inline void kfree_skb(struct sk_buff *skb)
> {
>          if (likely(atomic_read(&skb->users) == 1))
>                  smp_rmb();
>          else if (likely(!atomic_dec_and_test(&skb->users)))
>                  return;
>          __kfree_skb(skb);
> }
>
>
> This is a valid optimization : an atomic_dec_and_test() is very expensive.

It is a valid optimization if you will normally have only one user
like a skb.  For other structures that frequently have many users I'm
not at all certain it is a useful optimization.

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

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux