1. 26 1月, 2016 6 次提交
    • J
      net: fec: use CONFIG_ARM instead of CONFIG_ARCH_MXC/SOC_IMX28 · 05f3b50e
      Johannes Berg 提交于
      As Arnd Bergmann points out, using CONFIG_ARCH_MXC and/or SOC_IMX28
      is wrong if some other ARM platform uses this device - the operation
      of the driver would depend on an unrelated ARM platform that might
      or might not be set for multi-platform kernels.
      
      Prior to my previous patch, any other platforms using it would have
      been broken already due to having the cbd_datlen/cbd_sc fields in
      the wrong order, but byte ordering correctly, so no such platforms
      can exist and work today.
      
      In any case, it seems likely that only Freescale SoCs use this part,
      and those are little-endian on ARM, so CONFIG_ARM is safe for them.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Reviewed-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      05f3b50e
    • S
      defxx: fix build warning · 62f2aaab
      Sudip Mukherjee 提交于
      We are getting many build warnings about:
      'bar_start' may be used uninitialized
      and
      'bar_len' may be used uninitialized
      
      They are not actually uninitialized as dfx_get_bars() will initialize
      them properly. But still lets have them initialized just to satisfy the
      compiler (gcc 4.8.2).
      Signed-off-by: NSudip Mukherjee <sudip@vectorindia.org>
      Acked-by: NMaciej W. Rozycki <macro@linux-mips.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      62f2aaab
    • S
      net: macb: fix build warning · 36df7455
      Sudip Mukherjee 提交于
      We are getting build warning about:
      macb.c:2889:13: warning: 'tx_clk' may be used uninitialized in this function
      macb.c:2888:11: warning: 'hclk' may be used uninitialized in this function
      
      In reality they are not used uninitialized as clk_init() will initialize
      them, this patch will just silence the warning.
      Signed-off-by: NSudip Mukherjee <sudip@vectorindia.org>
      Acked-by: NNicolas Ferre <nicolas.ferre@atmel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      36df7455
    • J
      net: fec: make driver endian-safe · 5cfa3039
      Johannes Berg 提交于
      The driver treats the device descriptors as CPU-endian, which appears
      to be correct with the default endianness on both ARM (typically LE)
      and PowerPC (typically BE) SoCs, indicating that the hardware block
      is generated differently. Add endianness annotations and byteswaps as
      necessary.
      
      It's not clear that the ifdef there really is correct and shouldn't
      just be #ifdef CONFIG_ARM, but I also can't test on anything but the
      i.MX6 HummingBoard where this gets it working with a BE kernel.
      Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5cfa3039
    • R
      net: dsa: fix mv88e6xxx switches · db0e51af
      Russell King 提交于
      Since commit 76e398a6 ("net: dsa: use switchdev obj for VLAN add/del
      ops"), the Marvell 88E6xxx switch has been unable to pass traffic
      between ports - any received traffic is discarded by the switch.
      Taking a port out of bridge mode and configuring a vlan on it also the
      port to start passing traffic.
      
      With the debugfs files re-instated to allow debug of this issue by
      comparing the register settings between the working and non-working
      case, the reason becomes clear:
      
           GLOBAL GLOBAL2 SERDES   0    1    2    3    4    5    6
      - 7:  1111    707f    2001     2    2    2    2    2    0    2
      + 7:  1111    707f    2001     1    1    1    1    1    0    1
      
      Register 7 for the ports is the default vlan tag register, and in the
      non-working setup, it has been set to 2, despite vlan 2 not being
      configured.  This causes the switch to drop all packets coming in to
      these ports.  The working setup has the default vlan tag register set
      to 1, which is the default vlan when none is configured.
      
      Inspection of the code reveals why.  The code prior to this commit
      was:
      
      -		for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
      ...
      -			if (!err && vlan->flags & BRIDGE_VLAN_INFO_PVID)
      -				err = ds->drv->port_pvid_set(ds, p->port, vid);
      
      but the new code is:
      
      +	for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) {
      ...
      +	}
      ...
      +	if (pvid)
      +		err = _mv88e6xxx_port_pvid_set(ds, port, vid);
      
      This causes the new code to always set the default vlan to one higher
      than the old code.
      
      Fix this.
      
      Fixes: 76e398a6 ("net: dsa: use switchdev obj for VLAN add/del ops")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      db0e51af
    • M
      82xx: FCC: Fixing a bug causing to FCC port lock-up (second try) · 426f0468
      Martin Roth 提交于
      This is an additional patch to the one already submitted recently.
      The previous patch was not complete, and the FCC port lock-up scenario
      has been reproduced in lab.
      I had an opportunity to check the current patch in lab and the FCC
      port lock no longer freezes, while the previous patch still locks-up the
      FCC port.
      The current patch fixes a pointer arithmetic bug (second bug in the same
      line), which leads FCC port lock-up during underrun/collision handling.
      Within the tx_startup() function in mac-fcc.c, the address of last BD is
      not calculated correctly. As a result of wrong calculation of the last BD
      address, the next transmitted BD may be set to an area out of the transmit
      BD ring. This actually causes to port lock-up and it is not recoverable.
      Signed-off-by: NMartin Roth <martin.roth@motorolasolutions.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      426f0468
  2. 25 1月, 2016 2 次提交
  3. 22 1月, 2016 11 次提交
  4. 21 1月, 2016 1 次提交
  5. 20 1月, 2016 1 次提交
  6. 19 1月, 2016 6 次提交
  7. 18 1月, 2016 7 次提交
  8. 17 1月, 2016 1 次提交
    • M
      include/linux/kernel.h: change abs() macro so it uses consistent return type · 8f57e4d9
      Michal Nazarewicz 提交于
      Rewrite abs() so that its return type does not depend on the
      architecture and no unexpected type conversion happen inside of it.  The
      only conversion is from unsigned to signed type.  char is left as a
      return type but treated as a signed type regradless of it's actual
      signedness.
      
      With the old version, int arguments were promoted to long and depending
      on architecture a long argument might result in s64 or long return type
      (which may or may not be the same).
      
      This came after some back and forth with Nicolas.  The current macro has
      different return type (for the same input type) depending on
      architecture which might be midly iritating.
      
      An alternative version would promote to int like so:
      
      	#define abs(x)	__abs_choose_expr(x, long long,			\
      			__abs_choose_expr(x, long,			\
      			__builtin_choose_expr(				\
      				sizeof(x) <= sizeof(int),		\
      				({ int __x = (x); __x<0?-__x:__x; }),	\
      				((void)0))))
      
      I have no preference but imagine Linus might.  :] Nicolas argument against
      is that promoting to int causes iconsistent behaviour:
      
      	int main(void) {
      		unsigned short a = 0, b = 1, c = a - b;
      		unsigned short d = abs(a - b);
      		unsigned short e = abs(c);
      		printf("%u %u\n", d, e);  // prints: 1 65535
      	}
      
      Then again, no sane person expects consistent behaviour from C integer
      arithmetic.  ;)
      
      Note:
      
        __builtin_types_compatible_p(unsigned char, char) is always false, and
        __builtin_types_compatible_p(signed char, char) is also always false.
      Signed-off-by: NMichal Nazarewicz <mina86@mina86.com>
      Reviewed-by: NNicolas Pitre <nico@linaro.org>
      Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
      Cc: Wey-Yi Guy <wey-yi.w.guy@intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      8f57e4d9
  9. 16 1月, 2016 5 次提交
    • I
      bna: fix Rx data corruption with VLAN stripping enabled and MTU > 4096 · 6c3f5aef
      Ivan Vecera 提交于
      The multi-buffer Rx mode implemented in the past introduced
      a regression that causes a data corruption for received VLAN
      traffic when VLAN tag stripping is enabled. This mode is supported
      only be newer chipsets (1860) and is enabled when MTU > 4096.
      
      When this mode is enabled Rx queue contains buffers with fixed size
      2048 bytes. Any incoming packet larger than 2048 is divided into
      multiple buffers that are attached as skb frags in polling routine.
      
      The driver assumes that all buffers associated with a packet except
      the last one is fully used (e.g. packet with size 5000 are divided
      into 3 buffers 2048 + 2048 + 904 bytes) and ignores true size reported
      in completions. This assumption is usually true but not when VLAN
      packet is received and VLAN tag stripping is enabled. In this case
      the first buffer is 2044 bytes long but as the driver always assumes
      2048 bytes then 4 extra random bytes are included between the first
      and the second frag. Additionally the driver sets checksum as correct
      so the packet is properly processed by the core.
      
      The driver needs to check the size of used space in each Rx buffer
      reported by FW and not blindly use the fixed value.
      
      Cc: Rasesh Mody <rasesh.mody@qlogic.com>
      Signed-off-by: NIvan Vecera <ivecera@redhat.com>
      Reviewed-by: NRasesh Mody <rasesh.mody@qlogic.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6c3f5aef
    • D
      mm, dax, pmem: introduce {get|put}_dev_pagemap() for dax-gup · 5c2c2587
      Dan Williams 提交于
      get_dev_page() enables paths like get_user_pages() to pin a dynamically
      mapped pfn-range (devm_memremap_pages()) while the resulting struct page
      objects are in use.  Unlike get_page() it may fail if the device is, or
      is in the process of being, disabled.  While the initial lookup of the
      range may be an expensive list walk, the result is cached to speed up
      subsequent lookups which are likely to be in the same mapped range.
      
      devm_memremap_pages() now requires a reference counter to be specified
      at init time.  For pmem this means moving request_queue allocation into
      pmem_alloc() so the existing queue usage counter can track "device
      pages".
      
      ZONE_DEVICE pages always have an elevated count and will never be on an
      lru reclaim list.  That space in 'struct page' can be redirected for
      other uses, but for safety introduce a poison value that will always
      trip __list_add() to assert.  This allows half of the struct list_head
      storage to be reclaimed with some assurance to back up the assumption
      that the page count never goes to zero and a list_add() is never
      attempted.
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      Tested-by: NLogan Gunthorpe <logang@deltatee.com>
      Cc: Dave Hansen <dave@sr71.net>
      Cc: Matthew Wilcox <willy@linux.intel.com>
      Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
      Cc: Alexander Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      5c2c2587
    • D
      libnvdimm, pmem: move request_queue allocation earlier in probe · 468ded03
      Dan Williams 提交于
      Before the dynamically allocated struct pages from devm_memremap_pages()
      can be put to use outside the driver, we need a mechanism to track
      whether they are still in use at teardown.  Towards that goal reorder
      the initialization sequence to allow the 'q_usage_counter' from the
      request_queue to be used by the devm_memremap_pages() implementation (in
      subsequent patches).
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      468ded03
    • D
      mm, dax, gpu: convert vm_insert_mixed to pfn_t · 01c8f1c4
      Dan Williams 提交于
      Convert the raw unsigned long 'pfn' argument to pfn_t for the purpose of
      evaluating the PFN_MAP and PFN_DEV flags.  When both are set it triggers
      _PAGE_DEVMAP to be set in the resulting pte.
      
      There are no functional changes to the gpu drivers as a result of this
      conversion.
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      Cc: Dave Hansen <dave@sr71.net>
      Cc: David Airlie <airlied@linux.ie>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      01c8f1c4
    • D
      libnvdimm, pfn, pmem: allocate memmap array in persistent memory · d2c0f041
      Dan Williams 提交于
      Use the new vmem_altmap capability to enable the pmem driver to arrange
      for a struct page memmap to be established in persistent memory.
      
      [linux@roeck-us.net: mn10300: declare __pfn_to_phys() to fix build error]
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
      Signed-off-by: NGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      d2c0f041