1. 11 8月, 2015 21 次提交
  2. 10 8月, 2015 19 次提交
    • D
      Merge branch 'mlxsw-fixes' · 2cf1b5ce
      David S. Miller 提交于
      Jiri Pirko says:
      
      ====================
      mlxsw: Couple of fixes/adjustments
      
      Ido Schimmel (5):
        mlxsw: Call free_netdev when removing port
        mlxsw: Make system port to local port mapping explicit
        mlxsw: Simplify mlxsw_sx_port_xmit function
        mlxsw: Use correct skb length when dumping payload
        mlxsw: Fix use-after-free bug in mlxsw_sx_port_xmit
      
      Jiri Pirko (2):
        mlxsw: Make pci module dependent on HAS_DMA and HAS_IOMEM
        mlxsw: Strip FCS from incoming packets
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2cf1b5ce
    • I
      mlxsw: Fix use-after-free bug in mlxsw_sx_port_xmit · e577516b
      Ido Schimmel 提交于
      Store the length of the skb before transmitting it and use it for stats
      instead of skb->len, since skb might have been freed already.
      
      This issue was discovered using the Kernel Address sanitizer (KASan).
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e577516b
    • I
      mlxsw: Use correct skb length when dumping payload · 3bfcd347
      Ido Schimmel 提交于
      Do not use the length of the transmitted skb (which was freed), but
      that of the response skb.
      
      This issue was discovered using the Kernel Address sanitizer (KASan).
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3bfcd347
    • I
      mlxsw: Simplify mlxsw_sx_port_xmit function · d003462a
      Ido Schimmel 提交于
      Previously we only checked if the transmission queue is not full in the
      middle of the xmit function. This lead to complex logic due to the fact
      that sometimes we need to reallocate the headroom for our Tx header.
      
      Allow the switch driver to know if the transmission queue is not full
      before sending the packet and remove this complex logic.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d003462a
    • J
      mlxsw: Strip FCS from incoming packets · 7b7b9cff
      Jiri Pirko 提交于
      FCS of incoming packets is already checked by HW. Just strip it out.
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7b7b9cff
    • J
      mlxsw: Make pci module dependent on HAS_DMA and HAS_IOMEM · 74ed207e
      Jiri Pirko 提交于
      This resolves compile errors on um-allyesconfig.
      
      Note that there are many other drivers which have the same issue.
      Reported-by: Nkbuild test robot <fengguang.wu@intel.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      74ed207e
    • I
      mlxsw: Make system port to local port mapping explicit · e61011b5
      Ido Schimmel 提交于
      System ports are unique identifiers in a multi-ASIC environment that
      represent all the available ports in the system. Local ports on the
      other hand, are unique only within the local ASIC.
      
      Since system port to local port mapping is not part of the HW-SW
      contract and since only single-ASIC configurations are currently
      supported, set an explicit 1:1 mapping by configuring the Switch System
      Port Record (SSPR) register.
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      e61011b5
    • I
      mlxsw: Call free_netdev when removing port · 26a80f6e
      Ido Schimmel 提交于
      When removing a port's netdevice we should also free the memory
      allocated by alloc_etherdev(). Do this by calling free_netdev() at the
      end of the teardown sequence.
      Reported-by: NOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: NIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      26a80f6e
    • M
      net: ethernet: Fix double word "the the" in eth.c · ecea4991
      Masanari Iida 提交于
      This patch fix double word "the the" in
      Documentation/DocBook/networking/API-eth-get-headlen.html
      Documentation/DocBook/networking/netdev.html
      Documentation/DocBook/networking.xml
      
      These files are generated from comment in source,
      so I have to fix comment in net/ethernet/eth.c.
      Signed-off-by: NMasanari Iida <standby24x7@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ecea4991
    • S
      net: phy: add RealTek RTL8211DN phy id · 0024f892
      Shaohui Xie 提交于
      RTL8211DN is compatible with RTL8211E.
      Signed-off-by: NShaohui Xie <Shaohui.Xie@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0024f892
    • R
      mpls: Enforce payload type of traffic sent using explicit NULL · 118d5234
      Robert Shearman 提交于
      RFC 4182 s2 states that if an IPv4 Explicit NULL label is the only
      label on the stack, then after popping the resulting packet must be
      treated as a IPv4 packet and forwarded based on the IPv4 header. The
      same is true for IPv6 Explicit NULL with an IPv6 packet following.
      
      Therefore, when installing the IPv4/IPv6 Explicit NULL label routes,
      add an attribute that specifies the expected payload type for use at
      forwarding time for determining the type of the encapsulated packet
      instead of inspecting the first nibble of the packet.
      Signed-off-by: NRobert Shearman <rshearma@brocade.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      118d5234
    • D
      Merge branch 'bpf-perf' · d74a790d
      David S. Miller 提交于
      Kaixu Xia says:
      
      ====================
      bpf: Introduce the new ability of eBPF programs to access hardware PMU counter
      
      This patchset is base on the net-next:
       git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
      commit 9dc20a64.
      
      Previous patch v6 url:
      https://lkml.org/lkml/2015/8/4/188
      
      changes in V7:
       - rebase the whole patch set to net-next tree(9dc20a64);
       - split out the core perf APIs into Patch 1/5;
       - change the return value of function perf_event_attrs()
         from struct perf_event * to const struct perf_event * in
         Patch 1/5;
       - rename the function perf_event_read_internal() to perf_event_
         read_local() and rewrite it in Patch 1/5;
       - rename the function check_func_limit() to check_map_func
         _compatibility() and remove the unnecessary pass pointer to
         a pointer in Patch 4/5;
      
      changes in V6:
       - make the Patch 1/4 commit message more meaning and readable;
       - remove the unnecessary comment in Patch 2/4 and make it clean;
       - declare the function perf_event_release_kernel() in include/
         linux/perf_event.h to fix the build error when CONFIG_PERF_EVENTS
         isn't configured in Patch 2/4;
       - add function perf_event_attrs() to get the struct perf_event_attr
         in Patch 2/4.
       - move the related code from kernel/trace/bpf_trace.c to kernel/
         events/core.c and add function perf_event_read_internal() to
         avoid poking inside of the event outside of perf code in Patch 3/4;
       - generial the func & map match-pair with an array in Patch 3/4;
      
      changes in V5:
       - move struct fd_array_map_ops* fd_ops to bpf_map;
       - move array perf event decrement refcnt function to
         map_free;
       - fix the NULL ptr of perf_event_get();
       - move bpf_perf_event_read() to kernel/bpf/bpf_trace.c;
       - get rid of the remaining struct bpf_prog;
       - move the unnecessay cast on void *;
      
      changes in V4:
       - make the bpf_prog_array_map more generic;
       - fix the bug of event refcnt leak;
       - use more useful errno in bpf_perf_event_read();
      
      changes in V3:
       - collapse V2 patches 1-3 into one;
       - drop the function map->ops->map_traverse_elem() and release
         the struct perf_event in map_free;
       - only allow to access bpf_perf_event_read() from programs;
       - update the perf_event_array_map elem via xchg();
       - pass index directly to bpf_perf_event_read() instead of
         MAP_KEY;
      
      changes in V2:
       - put atomic_long_inc_not_zero() between fdget() and fdput();
       - limit the event type to PERF_TYPE_RAW and PERF_TYPE_HARDWARE;
       - Only read the event counter on current CPU or on current
         process;
       - add new map type BPF_MAP_TYPE_PERF_EVENT_ARRAY to store the
         pointer to the struct perf_event;
       - according to the perf_event_map_fd and key, the function
         bpf_perf_event_read() can get the Hardware PMU counter value;
      
      Patch 5/5 is a simple example and shows how to use this new eBPF
      programs ability. The PMU counter data can be found in
      /sys/kernel/debug/tracing/trace(trace_pipe).(the cycles PMU
      value when 'kprobe/sys_write' sampling)
      
        $ cat /sys/kernel/debug/tracing/trace_pipe
        $ ./tracex6
             ...
             syslog-ng-548   [000] d..1    76.905673: : CPU-0   681765271
             syslog-ng-548   [000] d..1    76.905690: : CPU-0   681787855
             syslog-ng-548   [000] d..1    76.905707: : CPU-0   681810504
             syslog-ng-548   [000] d..1    76.905725: : CPU-0   681834771
             syslog-ng-548   [000] d..1    76.905745: : CPU-0   681859519
             syslog-ng-548   [000] d..1    76.905766: : CPU-0   681890419
             syslog-ng-548   [000] d..1    76.905783: : CPU-0   681914045
             syslog-ng-548   [000] d..1    76.905800: : CPU-0   681935950
             syslog-ng-548   [000] d..1    76.905816: : CPU-0   681958299
                    ls-690   [005] d..1    82.241308: : CPU-5   3138451
                    sh-691   [004] d..1    82.244570: : CPU-4   7324988
                 <...>-699   [007] d..1    99.961387: : CPU-7   3194027
                 <...>-695   [003] d..1    99.961474: : CPU-3   288901
                 <...>-695   [003] d..1    99.961541: : CPU-3   383145
                 <...>-695   [003] d..1    99.961591: : CPU-3   450365
                 <...>-695   [003] d..1    99.961639: : CPU-3   515751
                 <...>-695   [003] d..1    99.961686: : CPU-3   579047
             ...
      
      The detail of patches is as follow:
      
      Patch 1/5 add the necessary core perf APIs perf_event_attrs(),
      perf_event_get(),perf_event_read_local() when accessing events
      counters in eBPF programs
      
      Patch 2/5 rewrites part of the bpf_prog_array map code and make it
      more generic;
      
      Patch 3/5 introduces a new bpf map type. This map only stores the
      pointer to struct perf_event;
      
      Patch 4/5 implements function bpf_perf_event_read() that get the
      selected hardware PMU conuter;
      
      Patch 5/5 gives a simple example.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d74a790d
    • K
      samples/bpf: example of get selected PMU counter value · 47efb302
      Kaixu Xia 提交于
      This is a simple example and shows how to use the new ability
      to get the selected Hardware PMU counter value.
      Signed-off-by: NKaixu Xia <xiakaixu@huawei.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      47efb302
    • K
      bpf: Implement function bpf_perf_event_read() that get the selected hardware PMU conuter · 35578d79
      Kaixu Xia 提交于
      According to the perf_event_map_fd and index, the function
      bpf_perf_event_read() can convert the corresponding map
      value to the pointer to struct perf_event and return the
      Hardware PMU counter value.
      Signed-off-by: NKaixu Xia <xiakaixu@huawei.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      35578d79
    • K
      bpf: Add new bpf map type to store the pointer to struct perf_event · ea317b26
      Kaixu Xia 提交于
      Introduce a new bpf map type 'BPF_MAP_TYPE_PERF_EVENT_ARRAY'.
      This map only stores the pointer to struct perf_event. The
      user space event FDs from perf_event_open() syscall are converted
      to the pointer to struct perf_event and stored in map.
      Signed-off-by: NKaixu Xia <xiakaixu@huawei.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ea317b26
    • W
      bpf: Make the bpf_prog_array_map more generic · 2a36f0b9
      Wang Nan 提交于
      All the map backends are of generic nature. In order to avoid
      adding much special code into the eBPF core, rewrite part of
      the bpf_prog_array map code and make it more generic. So the
      new perf_event_array map type can reuse most of code with
      bpf_prog_array map and add fewer lines of special code.
      Signed-off-by: NWang Nan <wangnan0@huawei.com>
      Signed-off-by: NKaixu Xia <xiakaixu@huawei.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2a36f0b9
    • K
      perf: add the necessary core perf APIs when accessing events counters in eBPF programs · ffe8690c
      Kaixu Xia 提交于
      This patch add three core perf APIs:
       - perf_event_attrs(): export the struct perf_event_attr from struct
         perf_event;
       - perf_event_get(): get the struct perf_event from the given fd;
       - perf_event_read_local(): read the events counters active on the
         current CPU;
      These APIs are needed when accessing events counters in eBPF programs.
      
      The API perf_event_read_local() comes from Peter and I add the
      corresponding SOB.
      Signed-off-by: NKaixu Xia <xiakaixu@huawei.com>
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ffe8690c
    • D
      Merge branch 'mv88e6xxx-switchdev-fdb' · f1d5ca43
      David S. Miller 提交于
      Vivien Didelot says:
      
      ====================
      net: dsa: mv88e6xxx: support switchdev FDB objects
      
      This patchset refactors the DSA and mv88e6xxx code to use the switchdev FDB
      objects.
      
      The first two patches add minor but necessary changes to switchdev, the third
      one implements the switchdev glue in DSA for FDB routines, and the remaining
      ones refactor the FDB access functions in the mv88e6xxx code.
      
      Below is an usage example (ports 0-2 belongs to br0, ports 3-4 belongs to br1):
      
          # bridge fdb add 3c:97:0e:11:30:6e dev swp2
          # bridge fdb add 3c:97:0e:11:40:78 dev swp3
          # bridge fdb add 3c:97:0e:11:50:86 dev swp4
          # bridge fdb del 3c:97:0e:11:40:78 dev swp3
          # bridge fdb
          01:00:5e:00:00:01 dev eth0 self permanent
          01:00:5e:00:00:01 dev eth1 self permanent
          00:50:d2:10:78:15 dev swp0 master br0 permanent
          3c:97:0e:11:30:6e dev swp2 self static
          00:50:d2:10:78:15 dev swp3 master br1 permanent
          3c:97:0e:11:50:86 dev swp4 self static
          # cat /sys/kernel/debug/dsa0/atu
          # DB   T/P  Vec State Addr
          # 001  Port 004   e   3c:97:0e:11:30:6e
          # 004  Port 010   e   3c:97:0e:11:50:86
      
      For the 88E6xxx switches, FIDs 1 to num_ports will be reserved for non-bridged
      ports and bridge groups, and the remaining will be later used by VLANs.
      
      This change is necessary to welcome the support for hardware VLANs (which will
      follow soon).
      
      Changes in v2:
      
       - remove ndo_bridge_{get,set,del}link from switchdev/DSA glue code
      
       - use ether_addr_copy instead of memcpy for MAC addresses
      
       - constify MAC address in port_fdb_{add,del}
      
       - split the mv88e6xxx code refactoring into several patches
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f1d5ca43
    • V
      net: dsa: mv88e6xxx: rework FDB add/del operations · 87820510
      Vivien Didelot 提交于
      Add a low level function for the ATU Load operation, and provide FDB add
      and delete wrappers functions.
      Signed-off-by: NVivien Didelot <vivien.didelot@savoirfairelinux.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      87820510