31 Mar, 2014

6 commits

  • For the ppp driver, there are currently two open-coded BPF filters in use,
    that is, pass_filter and active_filter. Migrate both to make proper use
    of sk_unattached_filter_{create,destroy} API so that the actual BPF code
    is decoupled from direct access, and filters can be jited as a side-effect
    by the internal filter compiler.

    Joint work with Alexei Starovoitov.

    Signed-off-by: Daniel Borkmann
    Signed-off-by: Alexei Starovoitov
    Cc: Paul Mackerras
    Cc: linux-ppp@vger.kernel.org
    Signed-off-by: David S. Miller

    Daniel Borkmann
     
  • There are currently pch_gbe, cpts, and ixp4xx_eth drivers that open-code
    and reimplement a BPF classifier for the PTP protocol. Since all of them
    effectively do the very same thing and load the very same PTP/BPF filter,
    we can just consolidate that code by introducing ptp_classify_raw() in
    the time-stamping core framework which can be used in drivers.

    As drivers get initialized after bootstrapping the core networking
    subsystem, they can make use of ptp_insns wrapped through
    ptp_classify_raw(), which allows to simplify and remove PTP classifier
    setup code in drivers.

    Joint work with Alexei Starovoitov.

    Signed-off-by: Daniel Borkmann
    Signed-off-by: Alexei Starovoitov
    Cc: Richard Cochran
    Cc: Jiri Benc
    Signed-off-by: David S. Miller

    Daniel Borkmann
     
  • This patch migrates an open-coded sk_run_filter() implementation with
    proper use of the BPF API, that is, sk_unattached_filter_create(). This
    migration is needed, as we will be internally transforming the filter
    to a different representation, and therefore needs to be decoupled.

    It is okay to do so as skb_timestamping_init() is called during
    initialization of the network stack in core initcall via sock_init().
    This would effectively also allow for PTP filters to be jit compiled if
    bpf_jit_enable is set.

    For better readability, there are also some newlines introduced, also
    ptp_classify.h is only in kernel space.

    Joint work with Alexei Starovoitov.

    Signed-off-by: Daniel Borkmann
    Signed-off-by: Alexei Starovoitov
    Cc: Richard Cochran
    Cc: Jiri Benc
    Signed-off-by: David S. Miller

    Daniel Borkmann
     
  • This patch basically does two things, i) removes the extern keyword
    from the include/linux/filter.h file to be more consistent with the
    rest of Joe's changes, and ii) moves filter accounting into the filter
    core framework.

    Filter accounting mainly done through sk_filter_{un,}charge() take
    care of the case when sockets are being cloned through sk_clone_lock()
    so that removal of the filter on one socket won't result in eviction
    as it's still referenced by the other.

    These functions actually belong to net/core/filter.c and not
    include/net/sock.h as we want to keep all that in a central place.
    It's also not in fast-path so uninlining them is fine and even allows
    us to get rd of sk_filter_release_rcu()'s EXPORT_SYMBOL and a forward
    declaration.

    Joint work with Alexei Starovoitov.

    Signed-off-by: Daniel Borkmann
    Signed-off-by: Alexei Starovoitov
    Cc: Pavel Emelyanov
    Signed-off-by: David S. Miller

    Daniel Borkmann
     
  • In order to open up the possibility to internally transform a BPF program
    into an alternative and possibly non-trivial reversible representation, we
    need to keep the original BPF program around, so that it can be passed back
    to user space w/o the need of a complex decoder.

    The reason for that use case resides in commit a8fc92778080 ("sk-filter:
    Add ability to get socket filter program (v2)"), that is, the ability
    to retrieve the currently attached BPF filter from a given socket used
    mainly by the checkpoint-restore project, for example.

    Therefore, we add two helpers sk_{store,release}_orig_filter for taking
    care of that. In the sk_unattached_filter_create() case, there's no such
    possibility/requirement to retrieve a loaded BPF program. Therefore, we
    can spare us the work in that case.

    This approach will simplify and slightly speed up both, sk_get_filter()
    and sock_diag_put_filterinfo() handlers as we won't need to successively
    decode filters anymore through sk_decode_filter(). As we still need
    sk_decode_filter() later on, we're keeping it around.

    Joint work with Alexei Starovoitov.

    Signed-off-by: Alexei Starovoitov
    Signed-off-by: Daniel Borkmann
    Cc: Pavel Emelyanov
    Signed-off-by: David S. Miller

    Daniel Borkmann
     
  • This patch adds a jited flag into sk_filter struct in order to indicate
    whether a filter is currently jited or not. The size of sk_filter is
    not being expanded as the 32 bit 'len' member allows upper bits to be
    reused since a filter can currently only grow as large as BPF_MAXINSNS.

    Therefore, there's enough room also for other in future needed flags to
    reuse 'len' field if necessary. The jited flag also allows for having
    alternative interpreter functions running as currently, we can only
    detect jit compiled filters by testing fp->bpf_func to not equal the
    address of sk_run_filter().

    Joint work with Alexei Starovoitov.

    Signed-off-by: Alexei Starovoitov
    Signed-off-by: Daniel Borkmann
    Cc: Pablo Neira Ayuso
    Signed-off-by: David S. Miller

    Daniel Borkmann
     

30 Mar, 2014

22 commits

  • Conflicts:
    drivers/net/ethernet/marvell/mvneta.c

    The mvneta.c conflict is a case of overlapping changes,
    a conversion to devm_ioremap_resource() vs. a conversion
    to netdev_alloc_pcpu_stats.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • The at8031 can work on polling mode and interrupt mode.
    Add ack_interrupt and config intr funcs to enable
    interrupt mode for it.

    Signed-off-by: Zhao Qiang
    Signed-off-by: David S. Miller

    Zhao Qiang
     
  • ERROR: "(foo*)" should be "(foo *)"
    ERROR: "foo * bar" should be "foo *bar"

    Suggested-by: Sergei Shtylyov
    Signed-off-by: Wang Yufen
    Acked-by: Sergei Shtylyov
    Signed-off-by: David S. Miller

    Wang Yufen
     
  • ERROR: open brace '{' following enum go on the same line
    ERROR: open brace '{' following struct go on the same line
    ERROR: trailing statements should be on next line

    Signed-off-by: Wang Yufen
    Signed-off-by: David S. Miller

    Wang Yufen
     
  • WARNING: please, no space before tabs
    WARNING: please, no spaces at the start of a line
    ERROR: spaces required around that ':' (ctx:VxW)
    ERROR: spaces required around that '>' (ctx:VxV)
    ERROR: spaces required around that '>=' (ctx:VxV)

    Signed-off-by: Wang Yufen
    Signed-off-by: David S. Miller

    Wang Yufen
     
  • Eric W. Biederman says:

    ====================
    netpoll: Cleanups and fixes

    This should be a small set of safe cleanups and fixes to netpoll.

    The fixes are vlan headers are now always inserted when needed, and
    napi polling is always avoided when network devices are closed.

    There are a bunch of little cleanups removing unnecessary code, fixing
    function naming, not taking unnecessary locks and removing general
    silliness.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Stop taking the transmit lock when a network device has specified
    NETIF_F_LLTX.

    If no locks needed to trasnmit a packet this is the ideal scenario for
    netpoll as all packets can be trasnmitted immediately.

    Even if some locks are needed in ndo_start_xmit skipping any unnecessary
    serialization is desirable for netpoll as it makes it more likely a
    debugging packet may be trasnmitted immediately instead of being
    deferred until later.

    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: David S. Miller

    Eric W. Biederman
     
  • Remove the assumption that the skbs that make it to
    netpoll_send_skb_on_dev are allocated with find_skb, such that
    skb->users == 1 and nothing is attached that would prevent the skbs from
    being freed from hard irq context.

    Remove this assumption by replacing __kfree_skb on error paths with
    dev_kfree_skb_irq (in hard irq context) and kfree_skb (in process
    context).

    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: David S. Miller

    Eric W. Biederman
     
  • The netpoll_rx_enable and netpoll_rx_disable functions have always
    controlled polling the network drivers transmit and receive queues.

    Rename them to netpoll_poll_enable and netpoll_poll_disable to make
    their functionality clear.

    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: David S. Miller

    Eric W. Biederman
     
  • Today netpoll_rx_enable and netpoll_rx_disable are called from
    dev_close and and __dev_close, and not from dev_close_many.

    Move the calls into __dev_close_many so that we have a single call
    site to maintain, and so that dev_close_many gains this protection as
    well. Which importantly makes batched network device deletes safe.

    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: David S. Miller

    Eric W. Biederman
     
  • Factor out the code that needs to surround ndo_start_xmit
    from netpoll_send_skb_on_dev into netpoll_start_xmit.

    It is an unfortunate fact that as the netpoll code has been maintained
    the primary call site ndo_start_xmit learned how to handle vlans
    and timestamps but the second call of ndo_start_xmit in queue_process
    did not.

    With the introduction of netpoll_start_xmit this associated logic now
    happens at both call sites of ndo_start_xmit and should make it easy
    for that to continue into the future.

    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: David S. Miller

    Eric W. Biederman
     
  • The gfp parameter was added in:
    commit 47be03a28cc6c80e3aa2b3e8ed6d960ff0c5c0af
    Author: Amerigo Wang
    Date: Fri Aug 10 01:24:37 2012 +0000

    netpoll: use GFP_ATOMIC in slave_enable_netpoll() and __netpoll_setup()

    slave_enable_netpoll() and __netpoll_setup() may be called
    with read_lock() held, so should use GFP_ATOMIC to allocate
    memory. Eric suggested to pass gfp flags to __netpoll_setup().

    Cc: Eric Dumazet
    Cc: "David S. Miller"
    Reported-by: Dan Carpenter
    Signed-off-by: Eric Dumazet
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    The reason for the gfp parameter was removed in:
    commit c4cdef9b7183159c23c7302aaf270d64c549f557
    Author: dingtianhong
    Date: Tue Jul 23 15:25:27 2013 +0800

    bonding: don't call slave_xxx_netpoll under spinlocks

    The slave_xxx_netpoll will call synchronize_rcu_bh(),
    so the function may schedule and sleep, it should't be
    called under spinlocks.

    bond_netpoll_setup() and bond_netpoll_cleanup() are always
    protected by rtnl lock, it is no need to take the read lock,
    as the slave list couldn't be changed outside rtnl lock.

    Signed-off-by: Ding Tianhong
    Cc: Jay Vosburgh
    Cc: Andy Gospodarek
    Signed-off-by: David S. Miller

    Nothing else that calls __netpoll_setup or ndo_netpoll_setup
    requires a gfp paramter, so remove the gfp parameter from both
    of these functions making the code clearer.

    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: David S. Miller

    Eric W. Biederman
     
  • Francois Romieu says:

    ====================
    remove open-coded skb_cow_head.

    As per http://marc.info/?l=linux-netdev&m=139440579104701.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Signed-off-by: Francois Romieu
    Cc: Inaky Perez-Gonzalez
    Signed-off-by: David S. Miller

    françois romieu
     
  • Signed-off-by: Francois Romieu
    Cc: Nithin Nayak Sujir
    Cc: Michael Chan
    Signed-off-by: David S. Miller

    françois romieu
     
  • Signed-off-by: Francois Romieu
    Cc: Rasesh Mody
    Signed-off-by: David S. Miller

    françois romieu
     
  • Signed-off-by: Francois Romieu
    Cc: Jitendra Kalsaria
    Cc: Shahed Shaikh
    Cc: Ron Mercer
    Signed-off-by: David S. Miller

    françois romieu
     
  • Signed-off-by: Francois Romieu
    Cc: Guo-Fu Tseng
    Signed-off-by: David S. Miller

    françois romieu
     
  • Signed-off-by: Francois Romieu
    Cc: Chris Snook
    Cc: Jay Cliburn
    Signed-off-by: David S. Miller

    françois romieu
     
  • Signed-off-by: Francois Romieu
    Cc: Jay Cliburn
    Cc: Chris Snook
    Signed-off-by: David S. Miller

    françois romieu
     
  • Signed-off-by: Francois Romieu
    Cc: Chris Snook
    Cc: Jay Cliburn
    Signed-off-by: David S. Miller

    françois romieu
     
  • The mvneta driver currently uses of_iomap(), which has two drawbacks:
    it doesn't request the resource, and it isn't devm-style so some error
    handling is needed.

    This commit switches to use devm_ioremap_resource() instead, which
    automatically requests the resource (so the I/O registers region shows
    up properly in /proc/iomem), and also is devm-style, which allows to
    get rid of some error handling to unmap the I/O registers region.

    Signed-off-by: Thomas Petazzoni
    Signed-off-by: David S. Miller

    Thomas Petazzoni
     

29 Mar, 2014

12 commits

  • Pull networking fixes from David Miller:

    1) We've discovered a common error in several networking drivers, they
    put VLAN offload features into ->vlan_features, which would suggest
    that they support offloading 2 or more levels of VLAN encapsulation.
    Not only do these devices not do that, but we don't have the
    infrastructure yet to handle that at all.

    Fixes from Vlad Yasevich.

    2) Fix tcpdump crash with bridging and vlans, also from Vlad.

    3) Some MAINTAINERS updates for random32 and bonding.

    4) Fix late reseeds of prandom generator, from Sasha Levin.

    5) Bridge doesn't handle stacked vlans properly, fix from Toshiaki
    Makita.

    6) Fix deadlock in openvswitch, from Flavio Leitner.

    7) get_timewait4_sock() doesn't report delay times correctly, fix from
    Eric Dumazet.

    8) Duplicate address detection and addrconf verification need to run in
    contexts where RTNL can be obtained. Move them to run from a
    workqueue. From Hannes Frederic Sowa.

    9) Fix route refcount leaking in ip tunnels, from Pravin B Shelar.

    10) Don't return -EINTR from non-blocking recvmsg() on AF_UNIX sockets,
    from Eric Dumazet.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (28 commits)
    vlan: Warn the user if lowerdev has bad vlan features.
    veth: Turn off vlan rx acceleration in vlan_features
    ifb: Remove vlan acceleration from vlan_features
    qlge: Do not propaged vlan tag offloads to vlans
    bridge: Fix crash with vlan filtering and tcpdump
    net: Account for all vlan headers in skb_mac_gso_segment
    MAINTAINERS: bonding: change email address
    MAINTAINERS: bonding: change email address
    ipv6: move DAD and addrconf_verify processing to workqueue
    tcp: fix get_timewait4_sock() delay computation on 64bit
    openvswitch: fix a possible deadlock and lockdep warning
    bridge: Fix handling stacked vlan tags
    bridge: Fix inabillity to retrieve vlan tags when tx offload is disabled
    vhost: validate vhost_get_vq_desc return value
    vhost: fix total length when packets are too short
    random32: avoid attempt to late reseed if in the middle of seeding
    random32: assign to network folks in MAINTAINERS
    net/mlx4_core: pass pci_device_id.driver_data to __mlx4_init_one during reset
    core, nfqueue, openvswitch: Orphan frags in skb_zerocopy and handle errors
    vlan: Set hard_header_len according to available acceleration
    ...

    Linus Torvalds
     
  • Vlad Yasevich says:

    ====================
    Audit all drivers for correct vlan_features.

    Some drivers set vlan acceleration features in vlan_features. This causes
    issues with Q-in-Q/802.1ad configurations.

    Audit all the drivers for correct vlan_features. Fix broken ones.
    Add a warning to vlan code to help catch future offenders.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Some drivers incorrectly assign vlan acceleration features to
    vlan_features thus causing issues for Q-in-Q vlan configurations.
    Warn the user of such cases.

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • For completeness, turn off vlan rx acceleration in vlan_features so
    that it doesn't show up on q-in-q setups.

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • Do not include vlan acceleration features in vlan_features as that
    precludes correct Q-in-Q operation.

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • qlge driver turns off NETIF_F_HW_CTAG_FILTER, but forgets to
    turn off HW_CTAG_TX and HW_CTAG_RX on vlan devices. With the
    current settings, q-in-q will only generate a single vlan header.
    Remember to mask off CTAG_TX and CTAG_RX features in vlan_features.

    CC: Shahed Shaikh
    CC: Jitendra Kalsaria
    CC: Ron Mercer
    Signed-off-by: Vlad Yasevich
    Acked-by: Jitendra Kalsaria
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • When the vlan filtering is enabled on the bridge, but
    the filter is not configured on the bridge device itself,
    running tcpdump on the bridge device will result in a
    an Oops with NULL pointer dereference. The reason
    is that br_pass_frame_up() will bypass the vlan
    check because promisc flag is set. It will then try
    to get the table pointer and process the packet based
    on the table. Since the table pointer is NULL, we oops.
    Catch this special condition in br_handle_vlan().

    Reported-by: Toshiaki Makita
    CC: Toshiaki Makita
    Signed-off-by: Vlad Yasevich
    Acked-by: Toshiaki Makita
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • skb_network_protocol() already accounts for multiple vlan
    headers that may be present in the skb. However, skb_mac_gso_segment()
    doesn't know anything about it and assumes that skb->mac_len
    is set correctly to skip all mac headers. That may not
    always be the case. If we are simply forwarding the packet (via
    bridge or macvtap), all vlan headers may not be accounted for.

    A simple solution is to allow skb_network_protocol to return
    the vlan depth it has calculated. This way skb_mac_gso_segment
    will correctly skip all mac headers.

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • Signed-off-by: Veaceslav Falico
    Signed-off-by: David S. Miller

    Veaceslav Falico
     
  • Update my email address.

    Signed-off-by: Jay Vosburgh
    Signed-off-by: David S. Miller

    Jay Vosburgh
     
  • Merge two fixes from Andrew Morton:
    "The x86 fix should come from x86 guys but they appear to be
    conferencing or otherwise distracted.

    The ocfs2 fix is a bit of a mess - the code runs into an immediate
    NULL deref and we're trying to work out how this got through test and
    review, but we haven't heard from Goldwyn in the past few days.
    Sasha's patch fixes the oops, but the feature as a whole is probably
    broken. So this is a stopgap for 3.14 - I'll aim to get the real
    fixes into 3.14.x"

    * emailed patches from Andrew Morton akpm@linux-foundation.org>:
    x86: fix boot on uniprocessor systems
    ocfs2: check if cluster name exists before deref

    Linus Torvalds
     
  • On x86 uniprocessor systems topology_physical_package_id() returns -1
    which causes rapl_cpu_prepare() to leave rapl_pmu variable uninitialized
    which leads to GPF in rapl_pmu_init().

    See arch/x86/kernel/cpu/perf_event_intel_rapl.c.

    It turns out that physical_package_id and core_id can actually be
    retreived for uniprocessor systems too. Enabling them also fixes
    rapl_pmu code.

    Signed-off-by: Artem Fetishev
    Cc: Stephane Eranian
    Cc: Ingo Molnar
    Cc: "H. Peter Anvin"
    Cc: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Artem Fetishev