10 Dec, 2013

2 commits

  • If CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is set,
    several is__ether_addr functions can be slightly
    improved by using u32 dereferences.

    I believe all current uses of is_zero_ether_addr and
    is_broadcast_ether_addr are u16 aligned, so always use
    u16 references to improve those functions performance.

    Document the u16 alignment requirements.

    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     
  • Add a generic routine to test if possibly unaligned
    to u16 Ethernet addresses are equal.

    If CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is set,
    this uses the slightly faster generic routine
    ether_addr_equal, otherwise this uses memcmp.

    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     

07 Dec, 2013

1 commit

  • Add a new check for CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS to reduce
    the number of or's used in the ether_addr_equal comparison to very
    slightly improve function performance.

    Simplify the ether_addr_equal_64bits implementation.
    Integrate and remove the zap_last_2bytes helper as it's now
    used only once.

    Remove the now unused compare_ether_addr function.

    Update the unaligned-memory-access documentation to remove the
    compare_ether_addr description and show how unaligned accesses
    could occur with ether_addr_equal.

    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     

27 Sep, 2013

1 commit

  • There are a mix of function prototypes with and without extern
    in the kernel sources. Standardize on not using extern for
    function prototypes.

    Function prototypes don't need to be written with extern.
    extern is assumed by the compiler. Its use is as unnecessary as
    using auto to declare automatic/local variables in a block.

    Signed-off-by: Joe Perches

    Joe Perches
     

04 Sep, 2013

1 commit


22 Jan, 2013

1 commit

  • When we set mac address, software mac address in system and hardware mac
    address all need to be updated. Current eth_mac_addr() doesn't allow
    callers to implement error handling nicely.

    This patch split eth_mac_addr() to prepare part and real commit part,
    then we can prepare first, and try to change hardware address, then do
    the real commit if hardware address is set successfully.

    Signed-off-by: Stefan Hajnoczi
    Signed-off-by: Amos Kong
    Signed-off-by: David S. Miller

    Stefan Hajnoczi
     

04 Jan, 2013

1 commit


03 Nov, 2012

2 commits


30 Oct, 2012

1 commit


11 Sep, 2012

1 commit

  • a lot of code has either the memset or an inefficient copy
    from a static array that contains the all-zeros Ethernet address.
    Introduce help function eth_zero_addr() to fill an address with
    all zeros, making the code clearer and allowing us to get rid of
    some constant arrays.

    Signed-off-by: Duan Jiong
    Signed-off-by: David S. Miller

    Duan Jiong
     

17 Jul, 2012

1 commit


11 Jul, 2012

1 commit

  • A lot of code has either the memset or an inefficient copy
    from a static array that contains the all-ones broadcast
    address. Introduce eth_broadcast_addr() to fill an address
    with all ones, making the code clearer and allowing us to
    get rid of some constant arrays.

    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     

18 May, 2012

1 commit

  • Fix some minor problems in comments of etherdevice.h
    * Warning is out dated, file hasn't moved or disappeared in many years and
    is unlikely to do so soon.
    * Capitalize Ethernet consistently since it is a proper name
    * Fix descriptive comment of padding
    * Spelling and grammar fix for alignment comment

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    stephen hemminger
     

13 May, 2012

1 commit


11 May, 2012

1 commit

  • Add an optimized boolean function to check if
    2 ethernet addresses are the same.

    This is to avoid any confusion about compare_ether_addr_64bits
    returning an unsigned, and not being able to use the
    compare_ether_addr_64bits function for sorting ala memcmp.

    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     

10 May, 2012

1 commit

  • Add a boolean function to check if 2 ethernet addresses
    are the same.

    This is to avoid any confusion about compare_ether_addr
    returning an unsigned, and not being able to use the
    compare_ether_addr function for sorting ala memcmp.

    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     

09 May, 2012

1 commit


08 May, 2012

1 commit

  • Neither compare_ether_addr() nor compare_ether_addr_64bits()
    (as it can fall back to the former) have comparison semantics
    like memcmp() where the sign of the return value indicates sort
    order. We had a bug in the wireless code due to a blind memcmp
    replacement because of this.

    A cursory look suggests that the wireless bug was the only one
    due to this semantic difference.

    Signed-off-by: Johannes Berg
    Signed-off-by: David S. Miller

    Johannes Berg
     

13 Feb, 2012

1 commit

  • Renamed dev_hw_addr_random to eth_hw_addr_random() to reflect that
    this function only assign a random ethernet address (MAC). Removed
    the second parameter (u8 *hwaddr), it's redundant since the also
    given net_device already contains net_device->dev_addr.
    Set it directly.

    Adapt igbvf and ixgbevf to the changed function.

    Small fix for ixgbevf_probe(): if ixgbevf_sw_init() fails
    (which means the device got no dev_addr) handle the error and
    jump to err_sw_init as already done by igbvf in similar case.

    Signed-off-by: Danny Kukawka
    Signed-off-by: David S. Miller

    Danny Kukawka
     

13 Jul, 2011

1 commit


14 Jan, 2011

1 commit


11 Jan, 2011

1 commit

  • Added alloc_netdev_mqs function which allows the number of transmit and
    receive queues to be specified independenty. alloc_netdev_mq was
    changed to a macro to call the new function. Also added
    alloc_etherdev_mqs with same purpose.

    Signed-off-by: Tom Herbert
    Signed-off-by: David S. Miller

    Tom Herbert
     

24 Sep, 2010

1 commit


27 Aug, 2010

1 commit

  • compare_ether_header() can have a special implementation on 64 bit
    arches if CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is defined.

    __napi_gro_receive() and vlan_gro_common() can avoid a conditional
    branch to perform device match.

    On x86_64, __napi_gro_receive() has now 38 instructions instead of 53

    As gcc-4.4.3 still choose to not inline it, add inline keyword to this
    performance critical function.

    Signed-off-by: Eric Dumazet
    CC: Herbert Xu
    Signed-off-by: David S. Miller

    Eric Dumazet
     

10 Aug, 2010

1 commit

  • Fix etherdevice.h parameter name typo in kernel-doc:

    Warning(include/linux/etherdevice.h:138): No description found for parameter 'hwaddr'
    Warning(include/linux/etherdevice.h:138): Excess function parameter 'addr' description in 'dev_hw_addr_random'

    Signed-off-by: Randy Dunlap
    Signed-off-by: David S. Miller

    Randy Dunlap
     

25 Jul, 2010

1 commit

  • Add addr_assign_type to struct net_device and expose it via sysfs.
    This new attribute has the purpose of giving user-space the ability to
    distinguish between different assignment types of MAC addresses.

    For example user-space can treat NICs with randomly generated MAC
    addresses differently than NICs that have permanent (locally assigned)
    MAC addresses.
    For the former udev could write a persistent net rule by matching the
    device path instead of the MAC address.
    There's also the case of devices that 'steal' MAC addresses from slave
    devices. In which it is also be beneficial for user-space to be aware
    of the fact.

    This patch also introduces a helper function to assist adoption of
    drivers that generate MAC addresses randomly.

    Signed-off-by: Stefan Assmann
    Signed-off-by: David S. Miller

    Stefan Assmann
     

06 May, 2009

1 commit

  • v5 -> v6 (current):
    -removed so far unused static functions
    -corrected dev_addr_del_multiple to call del instead of add

    v4 -> v5:
    -added device address type (suggested by davem)
    -removed refcounting (better to have simplier code then safe potentially few
    bytes)

    v3 -> v4:
    -changed kzalloc to kmalloc in __hw_addr_add_ii()
    -ASSERT_RTNL() avoided in dev_addr_flush() and dev_addr_init()

    v2 -> v3:
    -removed unnecessary rcu read locking
    -moved dev_addr_flush() calling to ensure no null dereference of dev_addr

    v1 -> v2:
    -added forgotten ASSERT_RTNL to dev_addr_init and dev_addr_flush
    -removed unnecessary rcu_read locking in dev_addr_init
    -use compare_ether_addr_64bits instead of compare_ether_addr
    -use L1_CACHE_BYTES as size for allocating struct netdev_hw_addr
    -use call_rcu instead of rcu_synchronize
    -moved is_etherdev_addr into __KERNEL__ ifdef

    This patch introduces a new list in struct net_device and brings a set of
    functions to handle the work with device address list. The list is a replacement
    for the original dev_addr field and because in some situations there is need to
    carry several device addresses with the net device. To be backward compatible,
    dev_addr is made to point to the first member of the list so original drivers
    sees no difference.

    Signed-off-by: Jiri Pirko
    Signed-off-by: David S. Miller

    Jiri Pirko
     

09 Feb, 2009

1 commit

  • This patch optimises the Ethernet header comparison to use 2-byte
    and 4-byte xors instead of memcmp. In order to facilitate this,
    the actual comparison is now carried out by the callers of the
    shared dev_gro_receive function.

    This has a significant impact when receiving 1500B packets through
    10GbE.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     

24 Nov, 2008

1 commit

  • Linus mentioned we could try to perform long word operations, even
    on potentially unaligned addresses, on x86 at least. David mentioned
    the HAVE_EFFICIENT_UNALIGNED_ACCESS test to handle this on all
    arches that have efficient unailgned accesses.

    I tried this idea and got nice assembly on 32 bits:

    158: 33 82 38 01 00 00 xor 0x138(%edx),%eax
    15e: 33 8a 34 01 00 00 xor 0x134(%edx),%ecx
    164: c1 e0 10 shl $0x10,%eax
    167: 09 c1 or %eax,%ecx
    169: 74 0b je 176

    And very nice assembly on 64 bits of course (one xor, one shl)

    Nice oprofile improvement in eth_type_trans(), 0.17 % instead of 0.41 %,
    expected since we remove 8 instructions on a fast path.

    This patch implements a compare_ether_addr_64bits() function, that
    uses the CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS ifdef to efficiently
    perform the 6 bytes comparison on all capable arches.

    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

20 Nov, 2008

1 commit


14 Feb, 2008

1 commit

  • Move networking (core and drivers) docbook to its own networking book.
    Fix a few kernel-doc errors in header and source files.

    Signed-off-by: Randy Dunlap
    Cc: Trond Myklebust
    Cc: "J. Bruce Fields"
    Cc: Neil Brown
    Cc: "David S. Miller"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     

11 Oct, 2007

1 commit


11 Jul, 2007

2 commits


08 May, 2007

1 commit


04 Jan, 2006

1 commit


03 Nov, 2005

2 commits


29 Oct, 2005

1 commit

  • Expose faster ether compare for use by protocols and other
    driver. And change name to be more consistent with other ether
    address manipulation routines in same file

    Signed-off-by: Stephen Hemminger
    Signed-off-by: Arnaldo Carvalho de Melo

    Stephen Hemminger