]> Git Repo - linux.git/log
linux.git
6 years agoiwlwifi: dbg_ini: remove redundant dram buffer allocation
Shahar S Matityahu [Tue, 20 Nov 2018 11:29:29 +0000 (13:29 +0200)]
iwlwifi: dbg_ini: remove redundant dram buffer allocation

There are several flows in that can cause redundant allocation.

In case the driver reaches the maximum amount of blocks allowed, it
allocates the buffer and only then checks if it reached the maximum
amount of blocks and return without freeing the buffer,
causing a memory leak.

Solve this by moving the check of the amount of buffers being used
before the allocation.

In case there was an assert, the apply points are being reused,
causing that for each assert, the driver allocates a new redundant
buffer.

Solve this by adding a new is_alloc field to indicate if the driver
already allocated memory for the requested buffer.

Also, split iwl_fw_dbg_buffer_allocation function into
iwl_fw_dbg_buffer_allocation and iwl_fw_dbg_buffer_apply
to increase the clearity of the flow.

Signed-off-by: Shahar S Matityahu <[email protected]>
Fixes: d47902f9f71d ("iwlwifi: dbg: add apply point logic")
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: dvm: use %u for sscanf() into unsigned variable
Johannes Berg [Thu, 6 Dec 2018 10:30:37 +0000 (11:30 +0100)]
iwlwifi: dvm: use %u for sscanf() into unsigned variable

Use %u instead of using %d which looks signed but then won't
get signed output if using an unsigned variable. It doesn't
matter much, but be consistent.

Signed-off-by: Johannes Berg <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: config mac ctxt to HE before TLC
Liad Kaufman [Sun, 9 Dec 2018 10:24:24 +0000 (12:24 +0200)]
iwlwifi: mvm: config mac ctxt to HE before TLC

If we have a station connecting HE, make sure that the
MAC ctxt is updated with indication of this before
setting the TLC rates via the TLC manager command.

Signed-off-by: Liad Kaufman <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: add tlc command name to output
Liad Kaufman [Sun, 9 Dec 2018 09:20:39 +0000 (11:20 +0200)]
iwlwifi: mvm: add tlc command name to output

Instead of having the command appear as "UNKNOWN" in the
dmesg, add the name to it.

Signed-off-by: Liad Kaufman <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: remove redundant condition
Johannes Berg [Thu, 6 Dec 2018 11:04:31 +0000 (12:04 +0100)]
iwlwifi: mvm: remove redundant condition

In iwl_mvm_sta_alloc_queue_tvqm(), we know that we have a
station, so no need to check it.

Signed-off-by: Johannes Berg <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: limit AMSDU size to 8K
Sara Sharon [Thu, 6 Dec 2018 13:02:11 +0000 (15:02 +0200)]
iwlwifi: mvm: limit AMSDU size to 8K

Typically, when not in HE mode, we will not perform well
with AMSDUs bigger than 8K.

Signed-off-by: Sara Sharon <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: fix AP mode in WEP
Emmanuel Grumbach [Mon, 3 Dec 2018 18:13:27 +0000 (20:13 +0200)]
iwlwifi: mvm: fix AP mode in WEP

Recently we started to send the WEP keys to the firmware so
that we could use hardware Tx encryption also on newer
devices that require the keys to be installed in the firmware
for encryption (as opposed to older devices that can get
the key in the Tx command for each Tx).

When we implemented that, we forgot to remove the key when
we remove a station leading to a situation where a station
that connects and disconnects a lot of times exhausts the
key database inside the firmware.

A fix was made for that, but we always removed the same
key: mvmvif->ap_wep_key which means that we removed the
same key entry in the firmware. This can make sense since
in WEP, the key is the same for all the stations, but the
internal implementation of iwl_mvm_set_sta_key and
iwl_mvm_remove_sta_key assumes that each station uses a
different key in the firmware's key database.

So now we got to the situation where we have a single
ieee80211_key_conf instance that means, a single
ieee80211_key_conf.hw_key_idx index for several stations
and hence for several keys.
ieee80211_key_conf.hw_key_idx is set to 0 when the first
station associates, and then it is overwritten to 1 when
the second station associates which is a buggy of course.
This led to the following message upon the removal of the
second station:

iwlwifi 0000:00:03.0: offset 1 not used in fw key table.
WARNING: CPU: 2 PID: 27883 at net/mac80211/sta_info.c:1122 __sta_info_destroy_part2+0x16b/0x180 [mac80211]
RIP: 0010:__sta_info_destroy_part2+0x16b/0x180 [mac80211]
 Call Trace:
  __sta_info_destroy+0x2a/0x40 [mac80211]
  sta_info_destroy_addr_bss+0x38/0x60 [mac80211]
  ieee80211_del_station+0x1d/0x30 [mac80211]
  nl80211_del_station+0xe0/0x1f0 [cfg80211]

Fix this by copying the ieee80211_key_conf structure for
each and every station. This is the easiest way to properly
remove the keys with the right index. Another solution
would have been to allow several stations to use the same
key offset in the firmware. That would require to change
the way we track keys in iwlmvm and not really worth it.

Also, maintain correctly fw_key_table when we add a key
for the multicast station.
Remove the key when we remove the multicast station.

Signed-off-by: Emmanuel Grumbach <[email protected]>
Fixes: 337bfc9881a2 ("iwlwifi: mvm: set wep key for all stations in soft ap mode")
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: add fall through comments where needed
Luca Coelho [Tue, 4 Dec 2018 21:23:49 +0000 (23:23 +0200)]
iwlwifi: mvm: add fall through comments where needed

Some switch-cases were missing a fall through comment, so the compiler
may warn.  Fix that by adding the comments where needed.  In other
cases there was more text in the comment, which the compiler doesn't
recognize, so either remove the extra text or move it to a separate
comment line as appropriate.

Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: dvm: fix some fall through warnings
Luca Coelho [Tue, 4 Dec 2018 21:13:15 +0000 (23:13 +0200)]
iwlwifi: dvm: fix some fall through warnings

Some case statements were missing a comment about falling through or
had more text than the compiler can recognize.  Fix that.

Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: dbg_ini: update ini structs meta doc
Shahar S Matityahu [Thu, 29 Nov 2018 15:55:55 +0000 (17:55 +0200)]
iwlwifi: dbg_ini: update ini structs meta doc

Align the documentation of the structs with the latest version in
the FW.

Signed-off-by: Shahar S Matityahu <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: Fix pre operational dumping flows
Shahar S Matityahu [Mon, 12 Nov 2018 11:27:51 +0000 (13:27 +0200)]
iwlwifi: Fix pre operational dumping flows

There are several dumping flows in the driver in case of a fail
prior to operational.

In some cases we get 2 dumps while in others we get none.

Fix this by uniting the different flows.
Add a different dump type to driver triggered dumps in case we want
a dump but did not got assert, and make all dumping go through
iwl_fw_dbg_collect_desc to avoid multiple dumps.

Signed-off-by: Shahar S Matityahu <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: remove duplicated include from ops.c
YueHaibing [Fri, 30 Nov 2018 11:24:26 +0000 (19:24 +0800)]
iwlwifi: mvm: remove duplicated include from ops.c

Remove duplicated include.

Signed-off-by: YueHaibing <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: support new format for the beacon notification
Emmanuel Grumbach [Mon, 26 Nov 2018 11:24:55 +0000 (13:24 +0200)]
iwlwifi: mvm: support new format for the beacon notification

The firmware is changing the format of the beacon
notification to remove the dependency on the Tx response
format.

Signed-off-by: Emmanuel Grumbach <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: dbg_ini: update max region id num to support 64 regions
Shahar S Matityahu [Tue, 27 Nov 2018 05:42:33 +0000 (07:42 +0200)]
iwlwifi: dbg_ini: update max region id num to  support 64 regions

The driver should support 64 region ids.  Update
IWL_FW_INI_MAX_REGION_ID accordingly.

Signed-off-by: Shahar S Matityahu <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: dbg_ini: update ini triggers enum
Shahar S Matityahu [Thu, 29 Nov 2018 15:53:09 +0000 (17:53 +0200)]
iwlwifi: dbg_ini: update ini triggers enum

Align the triggers enum in the driver to the one in the FW.

Signed-off-by: Shahar S Matityahu <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: differentiate between alive timeout and alive flow failure
Shahar S Matityahu [Thu, 22 Nov 2018 07:12:08 +0000 (09:12 +0200)]
iwlwifi: differentiate between alive timeout and alive flow failure

There are two cases that can cause the alive flow to fail,
an assert or a timeout.
Currently we mask any incoming asserts when we wait for alive.

Solve this by differentiating between the two cases:
1. Let the regular error handling to handle a received assert
2. Do a dump collection in the case of a timeout

Signed-off-by: Shahar S Matityahu <[email protected]>
Fixes: f38efdb29389 ("iwlwifi: add dump collection in case alive flow fails")
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: support CHANNEL_SWITCH_TIME_EVENT_CMD command
Sara Sharon [Thu, 25 Oct 2018 11:12:05 +0000 (14:12 +0300)]
iwlwifi: mvm: support CHANNEL_SWITCH_TIME_EVENT_CMD command

When we do channel switch, we used to schedule time events
ourselves. This was offloaded to FW. Support the new command
and flow.

Signed-off-by: Sara Sharon <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: mvm: simplify some return conditions
Sara Sharon [Fri, 16 Nov 2018 09:18:26 +0000 (11:18 +0200)]
iwlwifi: mvm: simplify some return conditions

Simplify some return conditions found by running a semantic patch
to detect unnecessary assignments to local variables.

Signed-off-by: Sara Sharon <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: fix bad dma handling in page_mem dumping flow
Shahar S Matityahu [Tue, 20 Nov 2018 07:46:33 +0000 (09:46 +0200)]
iwlwifi: fix bad dma handling in page_mem dumping flow

Prior to gen2 we allocate the paging memory via alloc_pages
which requires passing ownership on the memory between the
cpu and the device using dma_sync_single_for_cpu and
dma_sync_single_for_device.

Add missing dma_sync_single_for_device in iwl_dump_paging
after copying the memory.

since gen2, we allocate the paging memory using dma_alloc_coherent
which does not need passing ownership between the cpu and device.

Remove unneeded call to dma_sync_single_for_cpu in
iwl_trans_pcie_dump_data prior to copying the memory.

Signed-off-by: Shahar S Matityahu <[email protected]>
Fixes: 5538409ba393 ("iwlwifi: pcie: support page dumping in wrt in gen2")
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: dbg_ini: give better naming to region struct fields
Shahar S Matityahu [Mon, 26 Nov 2018 08:15:35 +0000 (10:15 +0200)]
iwlwifi: dbg_ini: give better naming to region struct fields

Some of the region struct fields have misleading naming
change those fields to have an informative naming

Signed-off-by: Shahar S Matityahu <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: dbg_ini: fix iwl_fw_ini_buffer_location field enum bad naming
Shahar S Matityahu [Mon, 26 Nov 2018 08:25:44 +0000 (10:25 +0200)]
iwlwifi: dbg_ini: fix iwl_fw_ini_buffer_location field enum bad naming

change IWL_FW_INI_LOCATION_SRAM_INVALID into IWL_FW_INI_LOCATION_INVALID

Signed-off-by: Shahar S Matityahu <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi dbg_ini: update ini structs doc
Shahar S Matityahu [Mon, 26 Nov 2018 08:23:11 +0000 (10:23 +0200)]
iwlwifi dbg_ini: update ini structs doc

update ini struct documentation to the structs being used in the FW

Signed-off-by: Shahar S Matityahu <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
6 years agoiwlwifi: bump FW API to 44 for 9000 and 22000 series
Luca Coelho [Thu, 6 Sep 2018 14:56:58 +0000 (17:56 +0300)]
iwlwifi: bump FW API to 44 for 9000 and 22000 series

Start supporting API version 44 where applicable.

Signed-off-by: Luca Coelho <[email protected]>
6 years agosocket: fix for Add SO_TIMESTAMP[NS]_NEW
Stephen Rothwell [Mon, 4 Feb 2019 04:24:11 +0000 (15:24 +1100)]
socket: fix for Add SO_TIMESTAMP[NS]_NEW

Fixes: 887feae36aee ("socket: Add SO_TIMESTAMP[NS]_NEW")
Signed-off-by: Stephen Rothwell <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonetdevice.h: Add __cold to netdev_<level> logging functions
Joe Perches [Sun, 3 Feb 2019 03:47:25 +0000 (19:47 -0800)]
netdevice.h: Add __cold to netdev_<level> logging functions

Add __cold to the netdev_<level> logging functions similar to
the use of __cold in the generic printk function.

Using __cold moves all the netdev_<level> logging functions
out-of-line possibly improving code locality and runtime
performance.

Signed-off-by: Joe Perches <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: Fix fall through warning in y2038 tstamp changes.
David S. Miller [Mon, 4 Feb 2019 04:25:31 +0000 (20:25 -0800)]
net: Fix fall through warning in y2038 tstamp changes.

net/core/sock.c: In function 'sock_setsockopt':
net/core/sock.c:914:3: warning: this statement may fall through [-Wimplicit-fallthrough=]
   sock_set_flag(sk, SOCK_TSTAMP_NEW);
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
net/core/sock.c:915:2: note: here
  case SO_TIMESTAMPING_OLD:
  ^~~~

Fixes: 9718475e6908 ("socket: Add SO_TIMESTAMPING_NEW")
Reported-by: Stephen Rothwell <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agobpfilter: remove extra header search paths for bpfilter_umh
Masahiro Yamada [Thu, 31 Jan 2019 03:15:35 +0000 (12:15 +0900)]
bpfilter: remove extra header search paths for bpfilter_umh

Currently, the header search paths -Itools/include and
-Itools/include/uapi are not used. Let's drop the unused code.

We can remove -I. too by fixing up one C file.

Signed-off-by: Masahiro Yamada <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoMerge branch 'phy-aquantia-improvements'
David S. Miller [Sun, 3 Feb 2019 22:31:04 +0000 (14:31 -0800)]
Merge branch 'phy-aquantia-improvements'

Heiner Kallweit says:

====================
net: phy: aquantia: number of improvements

This patch series is based on work from Andrew. I adjusted and added
certain parts. The series improves few aspects of driver, no functional
change intended.

v2:
- add my SoB to patch 1
- leave kernel.h in in patch 2
====================

Signed-off-by: David S. Miller <[email protected]>
6 years agonet: phy: aquantia: replace magic numbers with constants
Heiner Kallweit [Sun, 3 Feb 2019 20:19:06 +0000 (21:19 +0100)]
net: phy: aquantia: replace magic numbers with constants

Replace magic numbers with proper constants. The original patch is
from Andrew, I extended / adjusted certain parts:
- Use decimal bit numbers. The datasheet uses hex bit numbers 0 .. F.
- Order defines from highest to lowest bit numbers
- correct some typos
- add constant MDIO_AN_TX_VEND_INT_MASK2_LINK
- Remove few functional improvements from the patch, they will come as
  a separate patch.

Signed-off-by: Andrew Lunn <[email protected]>
Signed-off-by: Heiner Kallweit <[email protected]>
Reviewed-by: Andrew Lunn <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: phy: aquantia: use macro PHY_ID_MATCH_MODEL
Heiner Kallweit [Sun, 3 Feb 2019 20:18:03 +0000 (21:18 +0100)]
net: phy: aquantia: use macro PHY_ID_MATCH_MODEL

Make use of macro PHY_ID_MATCH_MODEL to simplify the code.

Signed-off-by: Heiner Kallweit <[email protected]>
Reviewed-by: Andrew Lunn <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: phy: aquantia: remove unneeded includes
Heiner Kallweit [Sun, 3 Feb 2019 20:17:14 +0000 (21:17 +0100)]
net: phy: aquantia: remove unneeded includes

Remove unneeded header includes.

v2:
- leave kernel.h in

Signed-off-by: Heiner Kallweit <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: phy: aquantia: Shorten name space prefix to aqr_
Andrew Lunn [Sun, 3 Feb 2019 20:16:18 +0000 (21:16 +0100)]
net: phy: aquantia: Shorten name space prefix to aqr_

aquantia_ as a name space prefix is rather long, resulting in lots of
lines needing wrapping, reducing readability. Use the prefix aqr_
instead, which fits with the vendor naming there devices aqr107, for
example.

v2:
- add SoB from Heiner

Signed-off-by: Andrew Lunn <[email protected]>
Signed-off-by: Heiner Kallweit <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: Fix ip_mc_{dec,inc}_group allocation context
Florian Fainelli [Sat, 2 Feb 2019 04:20:52 +0000 (20:20 -0800)]
net: Fix ip_mc_{dec,inc}_group allocation context

After 4effd28c1245 ("bridge: join all-snoopers multicast address"), I
started seeing the following sleep in atomic warnings:

[   26.763893] BUG: sleeping function called from invalid context at mm/slab.h:421
[   26.771425] in_atomic(): 1, irqs_disabled(): 0, pid: 1658, name: sh
[   26.777855] INFO: lockdep is turned off.
[   26.781916] CPU: 0 PID: 1658 Comm: sh Not tainted 5.0.0-rc4 #20
[   26.787943] Hardware name: BCM97278SV (DT)
[   26.792118] Call trace:
[   26.794645]  dump_backtrace+0x0/0x170
[   26.798391]  show_stack+0x24/0x30
[   26.801787]  dump_stack+0xa4/0xe4
[   26.805182]  ___might_sleep+0x208/0x218
[   26.809102]  __might_sleep+0x78/0x88
[   26.812762]  kmem_cache_alloc_trace+0x64/0x28c
[   26.817301]  igmp_group_dropped+0x150/0x230
[   26.821573]  ip_mc_dec_group+0x1b0/0x1f8
[   26.825585]  br_ip4_multicast_leave_snoopers.isra.11+0x174/0x190
[   26.831704]  br_multicast_toggle+0x78/0xcc
[   26.835887]  store_bridge_parm+0xc4/0xfc
[   26.839894]  multicast_snooping_store+0x3c/0x4c
[   26.844517]  dev_attr_store+0x44/0x5c
[   26.848262]  sysfs_kf_write+0x50/0x68
[   26.852006]  kernfs_fop_write+0x14c/0x1b4
[   26.856102]  __vfs_write+0x60/0x190
[   26.859668]  vfs_write+0xc8/0x168
[   26.863059]  ksys_write+0x70/0xc8
[   26.866449]  __arm64_sys_write+0x24/0x30
[   26.870458]  el0_svc_common+0xa0/0x11c
[   26.874291]  el0_svc_handler+0x38/0x70
[   26.878120]  el0_svc+0x8/0xc

while toggling the bridge's multicast_snooping attribute dynamically.

Pass a gfp_t down to igmpv3_add_delrec(), introduce
__igmp_group_dropped() and introduce __ip_mc_dec_group() to take a gfp_t
argument.

Similarly introduce ____ip_mc_inc_group() and __ip_mc_inc_group() to
allow caller to specify gfp_t.

IPv6 part of the patch appears fine.

Fixes: 4effd28c1245 ("bridge: join all-snoopers multicast address")
Signed-off-by: Florian Fainelli <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoMAINTAINERS: add entry for redpine wireless driver
Siva Rebbagondla [Fri, 1 Feb 2019 11:05:20 +0000 (16:35 +0530)]
MAINTAINERS: add entry for redpine wireless driver

Create an entry for Redpine wireless driver and add Amit and myself as
maintainers.

Signed-off-by: Siva Rebbagondla <[email protected]>
Signed-off-by: Kalle Valo <[email protected]>
6 years agonet: devlink: report cell size of shared buffers
Jakub Kicinski [Sat, 2 Feb 2019 01:56:28 +0000 (17:56 -0800)]
net: devlink: report cell size of shared buffers

Shared buffer allocation is usually done in cell increments.
Drivers will either round up the allocation or refuse the
configuration if it's not an exact multiple of cell size.
Drivers know exactly the cell size of shared buffer, so help
out users by providing this information in dumps.

Signed-off-by: Jakub Kicinski <[email protected]>
Reviewed-by: Dirk van der Merwe <[email protected]>
Reviewed-by: Ido Schimmel <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoMerge branch 'net-y2038-safe-socket-timestamps'
David S. Miller [Sun, 3 Feb 2019 19:17:31 +0000 (11:17 -0800)]
Merge branch 'net-y2038-safe-socket-timestamps'

Deepa Dinamani says:

====================
net: y2038-safe socket timestamps

The series introduces new socket timestamps that are
y2038 safe.

The time data types used for the existing socket timestamp
options: SO_TIMESTAMP, SO_TIMESTAMPNS and SO_TIMESTAMPING
are not y2038 safe. The series introduces SO_TIMESTAMP_NEW,
SO_TIMESTAMPNS_NEW and SO_TIMESTAMPING_NEW to replace these.
These new timestamps can be used on all architectures.

The alternative considered was to extend the sys_setsockopt()
by using the flags. We did not receive any strong opinions about
either of the approaches. Hence, this was chosen, as glibc folks
preferred this.

The series does not deal with updating the internal kernel socket
calls like rxrpc to make them y2038 safe. This will be dealt
with separately.

Note that the timestamps behavior already does not match the
man page specific behavior:
SIOCGSTAMP
    This ioctl should only be used if the socket option SO_TIMESTAMP
is not set on the socket. Otherwise, it returns the timestamp of
the last packet that was received while SO_TIMESTAMP was not set,
or it fails if no such packet has been received,
(i.e., ioctl(2) returns -1 with errno set to ENOENT).

The recommendation is to update the man page to remove the above statement.

The overview of the socket timestamp series is as below:
1. Delete asm specific socket.h when possible.
2. Support SO/SCM_TIMESTAMP* options only in userspace.
3. Rename current SO/SCM_TIMESTAMP* to SO/SCM_TIMESTAMP*_OLD.
3. Alter socket options so that SOCK_RCVTSTAMPNS does
   not rely on SOCK_RCVTSTAMP.
4. Introduce y2038 safe types for socket timestamp.
5. Introduce new y2038 safe socket options SO/SCM_TIMESTAMP*_NEW.
6. Intorduce new y2038 safe socket timeout options.

Changes since v4:
* Fixed the typo in calling sock_get_timeout()

Changes since v3:
* Rebased onto net-next and fixups as per review comments
* Merged the socket timeout series
* Integrated Arnd's patch to simplify compat handling of timeout syscalls

Changes since v2:
* Removed extra functions to reduce diff churn as per code review

Changes since v1:
* Dropped the change to disentangle sock flags
* Renamed sock_timeval to __kernel_sock_timeval
* Updated a few comments
* Added documentation changes
====================

Signed-off-by: David S. Miller <[email protected]>
6 years agosock: Add SO_RCVTIMEO_NEW and SO_SNDTIMEO_NEW
Deepa Dinamani [Sat, 2 Feb 2019 15:34:54 +0000 (07:34 -0800)]
sock: Add SO_RCVTIMEO_NEW and SO_SNDTIMEO_NEW

Add new socket timeout options that are y2038 safe.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: David S. Miller <[email protected]>
6 years agosocket: Rename SO_RCVTIMEO/ SO_SNDTIMEO with _OLD suffixes
Deepa Dinamani [Sat, 2 Feb 2019 15:34:53 +0000 (07:34 -0800)]
socket: Rename SO_RCVTIMEO/ SO_SNDTIMEO with _OLD suffixes

SO_RCVTIMEO and SO_SNDTIMEO socket options use struct timeval
as the time format. struct timeval is not y2038 safe.
The subsequent patches in the series add support for new socket
timeout options with _NEW suffix that will use y2038 safe
data structures. Although the existing struct timeval layout
is sufficiently wide to represent timeouts, because of the way
libc will interpret time_t based on user defined flag, these
new flags provide a way of having a structure that is the same
for all architectures consistently.
Rename the existing options with _OLD suffix forms so that the
right option is enabled for userspace applications according
to the architecture and time_t definition of libc.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: David S. Miller <[email protected]>
6 years agosocket: Update timestamping Documentation
Deepa Dinamani [Sat, 2 Feb 2019 15:34:52 +0000 (07:34 -0800)]
socket: Update timestamping Documentation

With the new y2038 safe timestamping options added, update the
documentation to reflect the changes.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agosocket: Add SO_TIMESTAMPING_NEW
Deepa Dinamani [Sat, 2 Feb 2019 15:34:51 +0000 (07:34 -0800)]
socket: Add SO_TIMESTAMPING_NEW

Add SO_TIMESTAMPING_NEW variant of socket timestamp options.
This is the y2038 safe versions of the SO_TIMESTAMPING_OLD
for all architectures.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: David S. Miller <[email protected]>
6 years agosocket: Add SO_TIMESTAMP[NS]_NEW
Deepa Dinamani [Sat, 2 Feb 2019 15:34:50 +0000 (07:34 -0800)]
socket: Add SO_TIMESTAMP[NS]_NEW

Add SO_TIMESTAMP_NEW and SO_TIMESTAMPNS_NEW variants of
socket timestamp options.
These are the y2038 safe versions of the SO_TIMESTAMP_OLD
and SO_TIMESTAMPNS_OLD for all architectures.

Note that the format of scm_timestamping.ts[0] is not changed
in this patch.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: David S. Miller <[email protected]>
6 years agosocket: Add struct __kernel_sock_timeval
Deepa Dinamani [Sat, 2 Feb 2019 15:34:49 +0000 (07:34 -0800)]
socket: Add struct __kernel_sock_timeval

The new type is meant to be used as a y2038 safe structure
to be used as part of cmsg data.
Presently the SO_TIMESTAMP socket option uses struct timeval
for timestamps. This is not y2038 safe.
Subsequent patches in the series add new y2038 safe socket
option to be used in the place of SO_TIMESTAMP_OLD.
struct __kernel_sock_timeval will be used as the timestamp
format at that time.

struct __kernel_sock_timeval also maintains the same layout
across 32 bit and 64 bit ABIs.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agosocket: Use old_timeval types for socket timestamps
Deepa Dinamani [Sat, 2 Feb 2019 15:34:48 +0000 (07:34 -0800)]
socket: Use old_timeval types for socket timestamps

As part of y2038 solution, all internal uses of
struct timeval are replaced by struct __kernel_old_timeval
and struct compat_timeval by struct old_timeval32.
Make socket timestamps use these new types.

This is mainly to be able to verify that the kernel build
is y2038 safe when such non y2038 safe types are not
supported anymore.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Cc: [email protected]
Signed-off-by: David S. Miller <[email protected]>
6 years agoarch: sparc: Override struct __kernel_old_timeval
Deepa Dinamani [Sat, 2 Feb 2019 15:34:47 +0000 (07:34 -0800)]
arch: sparc: Override struct __kernel_old_timeval

struct __kernel_old_timeval is supposed to have the same
layout as struct timeval. But, it was inadvarently missed
that __kernel_suseconds has a different definition for
sparc64.
Provide an asm-specific override that fixes it.

Reported-by: Arnd Bergmann <[email protected]>
Suggested-by: Arnd Bergmann <[email protected]>
Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Cc: [email protected]
Signed-off-by: David S. Miller <[email protected]>
6 years agosockopt: Rename SO_TIMESTAMP* to SO_TIMESTAMP*_OLD
Deepa Dinamani [Sat, 2 Feb 2019 15:34:46 +0000 (07:34 -0800)]
sockopt: Rename SO_TIMESTAMP* to SO_TIMESTAMP*_OLD

SO_TIMESTAMP, SO_TIMESTAMPNS and SO_TIMESTAMPING options, the
way they are currently defined, are not y2038 safe.
Subsequent patches in the series add new y2038 safe versions
of these options which provide 64 bit timestamps on all
architectures uniformly.
Hence, rename existing options with OLD tag suffixes.

Also note that kernel will not use the untagged SO_TIMESTAMP*
and SCM_TIMESTAMP* options internally anymore.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: David S. Miller <[email protected]>
6 years agoarch: Use asm-generic/socket.h when possible
Deepa Dinamani [Sat, 2 Feb 2019 15:34:45 +0000 (07:34 -0800)]
arch: Use asm-generic/socket.h when possible

Many architectures maintain an arch specific copy of the
file even though there are no differences with the asm-generic
one. Allow these architectures to use the generic one instead.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Max Filippov <[email protected]>
Acked-by: Heiko Carstens <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: David S. Miller <[email protected]>
6 years agosocket: move compat timeout handling into sock.c
Arnd Bergmann [Sat, 2 Feb 2019 15:34:44 +0000 (07:34 -0800)]
socket: move compat timeout handling into sock.c

This is a cleanup to prepare for the addition of 64-bit time_t
in O_SNDTIMEO/O_RCVTIMEO. The existing compat handler seems
unnecessarily complex and error-prone, moving it all into the
main setsockopt()/getsockopt() implementation requires half
as much code and is easier to extend.

32-bit user space can now use old_timeval32 on both 32-bit
and 64-bit machines, while 64-bit code can use
__old_kernel_timeval.

Signed-off-by: Arnd Bergmann <[email protected]>
Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: add missing include unistd
Deepa Dinamani [Sat, 2 Feb 2019 15:34:43 +0000 (07:34 -0800)]
selftests: add missing include unistd

Compiling rxtimestamp.c generates error messages due to
non-existing declaration for write() library call.

Add missing unistd.h include to provide the declaration and
silence the error.

Signed-off-by: Deepa Dinamani <[email protected]>
Acked-by: Willem de Bruijn <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agocxgb4/cxgb4vf: Program hash region for {t4/t4vf}_change_mac()
Arjun Vynipadath [Fri, 1 Feb 2019 11:37:04 +0000 (17:07 +0530)]
cxgb4/cxgb4vf: Program hash region for {t4/t4vf}_change_mac()

{t4/t4_vf}_change_mac() API's were only doing additions to MPS_TCAM.
This will fail, when the number of tcam entries is limited particularly
in vf's.
This fix programs hash region with the mac address, when TCAM
addtion fails for {t4/t4vf}_change_mac(). Since the locally maintained
driver list for hash entries is shared across mac_{sync/unsync}(),
added an extra parameter if_mac to track the address added thorugh
{t4/t4vf}_change_mac()

Signed-off-by: Arjun Vynipadath <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoipv4/igmp: Don't drop IGMP pkt with zeros src addr
Edward Chron [Thu, 31 Jan 2019 23:00:40 +0000 (15:00 -0800)]
ipv4/igmp: Don't drop IGMP pkt with zeros src addr

Don't drop IGMP packets with a source address of all zeros which are
IGMP proxy reports. This is documented in Section 2.1.1 IGMP
Forwarding Rules of RFC 4541 IGMP and MLD Snooping Switches
Considerations.

Signed-off-by: Edward Chron <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: phy: realtek: add generic Realtek PHY driver
Heiner Kallweit [Sun, 3 Feb 2019 15:07:33 +0000 (16:07 +0100)]
net: phy: realtek: add generic Realtek PHY driver

The integrated PHY's of later RTL8168 network chips report the generic
PHYID 0x001cc800 (Realtek OUI, model and revision number both set to
zero) and therefore currently the genphy driver is used.

To be able to use the paged version of e.g. phy_write() we need a
PHY driver with the read_page and write_page callbacks implemented.
So basically make a copy of the genphy driver, just with the
read_page and write_page callbacks being set.

Signed-off-by: Heiner Kallweit <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoatheros: atl2: fix an indentaion issue on a return statement
Colin Ian King [Sat, 2 Feb 2019 11:45:26 +0000 (11:45 +0000)]
atheros: atl2: fix an indentaion issue on a return statement

A return statment is not indented correctly, fix this by adding an
extra tab.

Signed-off-by: Colin Ian King <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoatl1c: fix indentation issue on an if statement
Colin Ian King [Sat, 2 Feb 2019 11:41:29 +0000 (11:41 +0000)]
atl1c: fix indentation issue on an if statement

An if statement is indented one level too deep, fix this by removing
the extra tabs. Also add some spaces to the dev_warn arguments to clean
up checkpatch warnings.

Signed-off-by: Colin Ian King <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agobna: fix indentation issue on call to bfa_ioc_pf_failed
Colin Ian King [Sat, 2 Feb 2019 11:37:07 +0000 (11:37 +0000)]
bna: fix indentation issue on call to bfa_ioc_pf_failed

The call to bfa_ioc_pf_failed is indented too far, fix this by
removing a tab.

Signed-off-by: Colin Ian King <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agochelsio: clean up indentation issue
Colin Ian King [Sat, 2 Feb 2019 11:33:51 +0000 (11:33 +0000)]
chelsio: clean up indentation issue

The assignment to size is indented too far, fix this and join
two lines into one.

Signed-off-by: Colin Ian King <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: nixge: Update device-tree bindings with v3.00
Alex Williams [Thu, 31 Jan 2019 21:33:28 +0000 (13:33 -0800)]
net: nixge: Update device-tree bindings with v3.00

Now the DMA engine is free to float elsewhere in the system map.

Signed-off-by: Alex Williams <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: nixge: Separate ctrl and dma resources
Alex Williams [Thu, 31 Jan 2019 21:33:27 +0000 (13:33 -0800)]
net: nixge: Separate ctrl and dma resources

The DMA engine is a separate entity altogether, and this allows the DMA
controller's address to float elsewhere in the FPGA's map.

Signed-off-by: Alex Williams <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agor8169: remove rtl_wol_pll_power_down
Heiner Kallweit [Thu, 31 Jan 2019 21:03:48 +0000 (22:03 +0100)]
r8169: remove rtl_wol_pll_power_down

rtl_wol_pll_power_down() is used in only one place and removing it
makes the code simpler and better readable.

Signed-off-by: Heiner Kallweit <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoMerge branch 'hns3-next'
David S. Miller [Sat, 2 Feb 2019 16:24:09 +0000 (08:24 -0800)]
Merge branch 'hns3-next'

Huazhong Tan says:

====================
code optimizations & bugfixes for HNS3 driver

This patchset includes bugfixes and code optimizations for the HNS3
ethernet controller driver
====================

Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: MAC table entry count function increases operation 0 value protection...
liuzhongzhu [Sat, 2 Feb 2019 14:39:37 +0000 (22:39 +0800)]
net: hns3: MAC table entry count function increases operation 0 value protection measures

When updating the available MAC VLAN table counts,
MAC VLAN table entry count function adds
operation 0 value protection measures.

Signed-off-by: liuzhongzhu <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: modify the upper limit judgment condition
liuzhongzhu [Sat, 2 Feb 2019 14:39:36 +0000 (22:39 +0800)]
net: hns3: modify the upper limit judgment condition

In order to prevent the variable anomaly from being larger than desc_num,
the upper limit judgment condition becomes >=.

Signed-off-by: liuzhongzhu <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: don't allow user to change vlan filter state
Jian Shen [Sat, 2 Feb 2019 14:39:35 +0000 (22:39 +0800)]
net: hns3: don't allow user to change vlan filter state

When user disables vlan filter, and adds vlan device, it won't
notify the driver the update the vlan filter. In this case, when
user enables vlan filter again, the packets with new vlan tag
will be filtered by vlan filter.

Signed-off-by: Jian Shen <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: optimize the maximum TC macro
liuzhongzhu [Sat, 2 Feb 2019 14:39:34 +0000 (22:39 +0800)]
net: hns3: optimize the maximum TC macro

Multiple macros with the largest number of TCs in the system,
optimized to HCLGE_MAX_TC_NUM.

Signed-off-by: liuzhongzhu <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: fix the problem that the supported port is empty
liuzhongzhu [Sat, 2 Feb 2019 14:39:33 +0000 (22:39 +0800)]
net: hns3: fix the problem that the supported port is empty

Run ethtool ethx when displaying device information in VF,
the supported port and link mode items will be empty.

This patch fixes it.

Fixes: e2cb1dec9779 ("net: hns3: Add HNS3 VF HCL(Hardware Compatibility Layer) Support")
Signed-off-by: liuzhongzhu <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: fix a wrong checking in the hclge_tx_buffer_calc()
Huazhong Tan [Sat, 2 Feb 2019 14:39:32 +0000 (22:39 +0800)]
net: hns3: fix a wrong checking in the hclge_tx_buffer_calc()

Only the TC is enabled, we need to check whether the buffer is enough,
otherwise it may lead to a wrong -ENOMEM case.

Fixes: 9ffe79a9c2ee ("net: hns3: Support for dynamically assigning tx buffer to TC")
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: move some set_bit statement into hclge_prepare_mac_addr
Weihang Li [Sat, 2 Feb 2019 14:39:31 +0000 (22:39 +0800)]
net: hns3: move some set_bit statement into hclge_prepare_mac_addr

This patch does not change the code logic. There are some same
set_bit statements called by add/rm_uc/mc_addr_common, and move
this statements into hclge_prepare_mac_addr to reduce duplicate
code.

Signed-off-by: Weihang Li <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: add hclge_cmd_check_retval() to parse comman's return value
Weihang Li [Sat, 2 Feb 2019 14:39:30 +0000 (22:39 +0800)]
net: hns3: add hclge_cmd_check_retval() to parse comman's return value

For simplifying the code, this patch adds hclge_cmd_check_retval() to
check the return value of the command.

Also, according the IMP's description, when there are several descriptors
in a command, then the IMP will save the return value on the last
description, so hclge_cmd_check_retval() just check the last one for this
case.

Signed-off-by: Weihang Li <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: code optimization for hclge_rx_buffer_calc
Yunsheng Lin [Sat, 2 Feb 2019 14:39:29 +0000 (22:39 +0800)]
net: hns3: code optimization for hclge_rx_buffer_calc

There are four steps to calcuate the rx private buffer, each step
can be done in a function to avoid code duplication and aid code
readability.

This patch adds three separate functions do the job. Also, the
function name more or less make the comment redundant, so remove
some obvious comment.

Signed-off-by: Yunsheng Lin <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: Modify parameter type from int to bool in set_gro_en
Yonglong Liu [Sat, 2 Feb 2019 14:39:28 +0000 (22:39 +0800)]
net: hns3: Modify parameter type from int to bool in set_gro_en

The second parameter to the hook function set_gro_en is always passed in
true/false, so modify it's type from int to bool.

Signed-off-by: Yonglong Liu <[email protected]>
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: fix an issue for hns3_update_new_int_gl
Peng Li [Sat, 2 Feb 2019 14:39:27 +0000 (22:39 +0800)]
net: hns3: fix an issue for hns3_update_new_int_gl

HNS3 supports setting rx-usecs|tx-usecs as 0, but it will not
update dynamically when adaptive-tx or adaptive-rx is enable.
This patch removes the Redundant check.

Fixes: a95e1f8666e9 ("net: hns3: change the time interval of int_gl calculating")
Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonet: hns3: fix a code style issue for hns3_update_new_int_gl()
Peng Li [Sat, 2 Feb 2019 14:39:26 +0000 (22:39 +0800)]
net: hns3: fix a code style issue for hns3_update_new_int_gl()

Use the same code style for rx_group and tx_group in the
hns3_update_new_int_gl().

Signed-off-by: Peng Li <[email protected]>
Signed-off-by: Huazhong Tan <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoMerge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
David S. Miller [Sat, 2 Feb 2019 04:12:18 +0000 (20:12 -0800)]
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next

Alexei Starovoitov says:

====================
pull-request: bpf-next 2019-02-01

The following pull-request contains BPF updates for your *net-next* tree.

The main changes are:

1) introduce bpf_spin_lock, from Alexei.

2) convert xdp samples to libbpf, from Maciej.

3) skip verifier tests for unsupported program/map types, from Stanislav.

4) powerpc64 JIT support for BTF line info, from Sandipan.

5) assorted fixed, from Valdis, Jesper, Jiong.
====================

Signed-off-by: David S. Miller <[email protected]>
6 years agoMerge branch 'shifts-cleanup'
Alexei Starovoitov [Sat, 2 Feb 2019 02:03:50 +0000 (18:03 -0800)]
Merge branch 'shifts-cleanup'

Jiong Wang says:

====================
NFP JIT back-end is missing several ALU32 logic shifts support.

Also, shifts with shift amount be zero are not handled properly.

This set cleans up these issues.
====================

Signed-off-by: Alexei Starovoitov <[email protected]>
6 years agonfp: bpf: complete ALU32 logic shift supports
Jiong Wang [Fri, 1 Feb 2019 22:39:29 +0000 (22:39 +0000)]
nfp: bpf: complete ALU32 logic shift supports

The following ALU32 logic shift supports are missing:

  BPF_ALU | BPF_LSH | BPF_X
  BPF_ALU | BPF_RSH | BPF_X
  BPF_ALU | BPF_RSH | BPF_K

For BPF_RSH | BPF_K, it could be implemented using NFP direct shift
instruction. For the other BPF_X shifts, NFP indirect shifts sequences need
to be used.

Separate code-gen hook is assigned to each instruction to make the
implementation clear.

Reviewed-by: Jakub Kicinski <[email protected]>
Signed-off-by: Jiong Wang <[email protected]>
Signed-off-by: Alexei Starovoitov <[email protected]>
6 years agonfp: bpf: correct the behavior for shifts by zero
Jiong Wang [Fri, 1 Feb 2019 22:39:28 +0000 (22:39 +0000)]
nfp: bpf: correct the behavior for shifts by zero

Shifts by zero do nothing, and should be treated as nops.

Even though compiler is not supposed to generate such instructions and
manual written assembly is unlikely to have them, but they are legal
instructions and have defined behavior.

This patch correct existing shifts code-gen to make sure they do nothing
when shift amount is zero except when the instruction is ALU32 for which
high bits need to be cleared.

For shift amount bigger than type size, already, NFP JIT back-end errors
out for immediate shift and only low 5 bits will be taken into account for
indirect shift which is the same as x86.

Reviewed-by: Jakub Kicinski <[email protected]>
Signed-off-by: Jiong Wang <[email protected]>
Signed-off-by: Alexei Starovoitov <[email protected]>
6 years agoselftests/bpf: remove generated verifier/tests.h on 'make clean'
Stanislav Fomichev [Fri, 1 Feb 2019 23:46:38 +0000 (15:46 -0800)]
selftests/bpf: remove generated verifier/tests.h on 'make clean'

'make clean' is supposed to remove generated files.

Signed-off-by: Stanislav Fomichev <[email protected]>
Acked-by: Jakub Kicinski <[email protected]>
Signed-off-by: Alexei Starovoitov <[email protected]>
6 years agoMerge branch 'devlink-add-device-driver-information-API'
David S. Miller [Fri, 1 Feb 2019 23:30:31 +0000 (15:30 -0800)]
Merge branch 'devlink-add-device-driver-information-API'

Jakub Kicinski says:

====================
devlink: add device (driver) information API

fw_version field in ethtool -i does not suit modern needs with 31
characters being quite limiting on more complex systems.  There is
also no distinction between the running and flashed versions of
the firmware.

Since the driver information pertains to the entire device, rather
than a particular netdev, it seems wise to move it do devlink, at
the same time fixing the aforementioned issues.

The new API allows exposing the device serial number and versions
of the components of the card - both hardware, firmware (running
and flashed).  Driver authors can choose descriptive identifiers
for the version fields.  A few version identifiers which seemed
relevant for most devices have been added to the global devlink
header.

Example:
$ devlink dev info pci/0000:05:00.0
pci/0000:05:00.0:
  driver nfp
  serial_number 16240145
  versions:
    fixed:
      board.id AMDA0099-0001
      board.rev 07
      board.vendor SMA
      board.model carbon
    running:
      fw.mgmt: 010156.010156.010156
      fw.cpld: 0x44
      fw.app: sriov-2.1.16
    stored:
      fw.mgmt: 010158.010158.010158
      fw.cpld: 0x44
      fw.app: sriov-2.1.20

Last patch also includes a compat code for ethtool.  If driver
reports no fw_version via the traditional ethtool API, ethtool
can call into devlink and try to cram as many versions as possible
into the 31 characters.

v4:
 - use IS_REACHABLE instead of IS_ENABLED in last patch.

v3 (Jiri):
 - rename various functions and attributes;
 - break out the version helpers per-type;
 - make the compat code parse a dump instead of special casing
   in each helper;
 - move generic version defines to a separate patch.

v2:
 - rebase.

this non-RFC, v3 some would say:
 - add three more versions in the NFP patches;
 - add last patch (ethool compat) - Andrew & Michal.

RFCv2:
 - use one driver op;
 - allow longer serial number;
 - wrap the skb into an opaque request struct;
 - add some common identifier into the devlink header.
====================

Signed-off-by: David S. Miller <[email protected]>
6 years agoethtool: add compat for devlink info
Jakub Kicinski [Thu, 31 Jan 2019 18:50:47 +0000 (10:50 -0800)]
ethtool: add compat for devlink info

If driver did not fill the fw_version field, try to call into
the new devlink get_info op and collect the versions that way.
We assume ethtool was always reporting running versions.

v4:
 - use IS_REACHABLE() to avoid problems with DEVLINK=m (kbuildbot).
v3 (Jiri):
 - do a dump and then parse it instead of special handling;
 - concatenate all versions (well, all that fit :)).

Signed-off-by: Jakub Kicinski <[email protected]>
Acked-by: Jiri Pirko <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonfp: devlink: report the running and flashed versions
Jakub Kicinski [Thu, 31 Jan 2019 18:50:46 +0000 (10:50 -0800)]
nfp: devlink: report the running and flashed versions

Report versions of firmware components using the new NSP command.

Signed-off-by: Jakub Kicinski <[email protected]>
Acked-by: Jiri Pirko <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonfp: nsp: add support for versions command
Jakub Kicinski [Thu, 31 Jan 2019 18:50:45 +0000 (10:50 -0800)]
nfp: nsp: add support for versions command

Retrieve the FW versions with the new command.

Signed-off-by: Jakub Kicinski <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonfp: devlink: report fixed versions
Jakub Kicinski [Thu, 31 Jan 2019 18:50:44 +0000 (10:50 -0800)]
nfp: devlink: report fixed versions

Report information about the hardware.

RFCv2:
 - add defines for board IDs which are likely to be reusable for
   other drivers (Jiri).

Signed-off-by: Jakub Kicinski <[email protected]>
Acked-by: Jiri Pirko <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonfp: devlink: report driver name and serial number
Jakub Kicinski [Thu, 31 Jan 2019 18:50:43 +0000 (10:50 -0800)]
nfp: devlink: report driver name and serial number

Report the basic info through new devlink info API.

RFCv2:
 - add driver name;
 - align serial to core changes.

Signed-off-by: Jakub Kicinski <[email protected]>
Acked-by: Jiri Pirko <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agodevlink: add generic info version names
Jakub Kicinski [Thu, 31 Jan 2019 18:50:42 +0000 (10:50 -0800)]
devlink: add generic info version names

Add defines and docs for generic info versions.

v3:
 - add docs;
 - separate patch (Jiri).

Signed-off-by: Jakub Kicinski <[email protected]>
Acked-by: Jiri Pirko <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agodevlink: add version reporting to devlink info API
Jakub Kicinski [Thu, 31 Jan 2019 18:50:41 +0000 (10:50 -0800)]
devlink: add version reporting to devlink info API

ethtool -i has a few fixed-size fields which can be used to report
firmware version and expansion ROM version. Unfortunately, modern
hardware has more firmware components. There is usually some
datapath microcode, management controller, PXE drivers, and a
CPLD load. Running ethtool -i on modern controllers reveals the
fact that vendors cram multiple values into firmware version field.

Here are some examples from systems I could lay my hands on quickly:

tg3:  "FFV20.2.17 bc 5720-v1.39"
i40e: "6.01 0x800034a4 1.1747.0"
nfp:  "0.0.3.5 0.25 sriov-2.1.16 nic"

Add a new devlink API to allow retrieving multiple versions, and
provide user-readable name for those versions.

While at it break down the versions into three categories:
 - fixed - this is the board/fixed component version, usually vendors
           report information like the board version in the PCI VPD,
           but it will benefit from naming and common API as well;
 - running - this is the running firmware version;
 - stored - this is firmware in the flash, after firmware update
            this value will reflect the flashed version, while the
            running version may only be updated after reboot.

v3:
 - add per-type helpers instead of using the special argument (Jiri).
RFCv2:
 - remove the nesting in attr DEVLINK_ATTR_INFO_VERSIONS (now
   versions are mixed with other info attrs)l
 - have the driver report versions from the same callback as
   other info.

Signed-off-by: Jakub Kicinski <[email protected]>
Acked-by: Jiri Pirko <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agodevlink: add device information API
Jakub Kicinski [Thu, 31 Jan 2019 18:50:40 +0000 (10:50 -0800)]
devlink: add device information API

ethtool -i has served us well for a long time, but its showing
its limitations more and more. The device information should
also be reported per device not per-netdev.

Lay foundation for a simple devlink-based way of reading device
info. Add driver name and device serial number as initial pieces
of information exposed via this new API.

v3:
 - rename helpers (Jiri);
 - rename driver name attr (Jiri);
 - remove double spacing in commit message (Jiri).
RFC v2:
 - wrap the skb into an opaque structure (Jiri);
 - allow the serial number of be any length (Jiri & Andrew);
 - add driver name (Jonathan).

Signed-off-by: Jakub Kicinski <[email protected]>
Acked-by: Jiri Pirko <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoMerge branch 'selftests-Various-fixes'
David S. Miller [Fri, 1 Feb 2019 23:26:37 +0000 (15:26 -0800)]
Merge branch 'selftests-Various-fixes'

Petr Machata says:

====================
selftests: Various fixes

This patch set contains various fixes whose common denominator is
improving quality of forwarding and mlxsw selftests.

Most of the fixes are improvements in determinism (such that timing and
latency don't impact the test performance). These were prompted by
regular runs of the test suite on a hardware emulator, the performance
of which is necessarily lower than that of the real device.

Patches #1 (from Ido), #2 and #3 make changes to ping limits.

Patches #4 and #5 add more sleep in places where things need more time
to finish.

Patches #6 and #7 fix two tests in the suite of mirror-to-gretap tests
where underlay involves a VLAN device over an 802.1q bridge.

Patches #8, #9 and #10 fix bugs in mirror-to-gretap test where underlay
involves a LAG device.

Patch #11 fixes a missed RET initialization in mirror-to-gretap flower
test.
====================

Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: mirror_gre_flower: Fix test result handling
Petr Machata [Thu, 31 Jan 2019 22:35:27 +0000 (22:35 +0000)]
selftests: forwarding: mirror_gre_flower: Fix test result handling

The global variable RET needs to be initialized before each call to
log_test. This test case sets it once before running the tests, but then
calls log_tests for every individual test. Thus a failure in one of the
tests causes spurious failures in follow-up tests as well.

Fix by moving the initialization of RET from test_all() to
full_test_span_gre_dir_acl(), a function that implements the test.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: mirror_gre_bridge_1q_lag: Ignore ARP
Petr Machata [Thu, 31 Jan 2019 22:35:25 +0000 (22:35 +0000)]
selftests: forwarding: mirror_gre_bridge_1q_lag: Ignore ARP

This test sets up mirroring such that it mirrors all overlay traffic.
That includes ARP, which causes occasional miscounts and spurious
failures. Ignore ARP explicitly to avoid these problems.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: mirror_gre_bridge_1q_lag: Enable forwarding
Petr Machata [Thu, 31 Jan 2019 22:35:24 +0000 (22:35 +0000)]
selftests: forwarding: mirror_gre_bridge_1q_lag: Enable forwarding

This test relies on routing in the primary traffic path, but neglects to
enable forwarding. Do so.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: mirror_gre_bridge_1q_lag: Flush neighbors
Petr Machata [Thu, 31 Jan 2019 22:35:22 +0000 (22:35 +0000)]
selftests: forwarding: mirror_gre_bridge_1q_lag: Flush neighbors

After one LAG slave is downed and another upped, it takes a while for
the neighbor on a bridge to time out and get renegotiated. The test does
prompt update of FDB entries by arpinging. But because the neighbor
still references another address, offloading is not possible, and some
packets may end up not being mirrored.

To force the neighbor renegotiation, simply flush the neighbor table at
the bridge.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: mirror_gre_vlan_bridge_1q: Fix roaming test
Petr Machata [Thu, 31 Jan 2019 22:35:21 +0000 (22:35 +0000)]
selftests: forwarding: mirror_gre_vlan_bridge_1q: Fix roaming test

ARP or ND traffic can cause spurious migration of FDB back to $swp3.
Mirroring is then updated in accordance with the change, and mirrored
packets are seen at h3, causing a failure.

Detect the case of this spurious roaming, and retry the test.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: mirror_gre_vlan_bridge_1q: Fix untagged test
Petr Machata [Thu, 31 Jan 2019 22:35:18 +0000 (22:35 +0000)]
selftests: forwarding: mirror_gre_vlan_bridge_1q: Fix untagged test

The untagged egress test sets up mirroring to {,ip6}gretap such that the
underlay goes through a bridge. Then VLAN flags are manipulated to test
that the traffic leaves the bridge 802.1q-tagged or not, as appropriate.

However, when a neighbor expires at the time that the bridge VLAN is
configured as PVID and egress untagged, the following discovery process
can't finish, because the IP address on H3 is still at the VLAN-tagged
netdevice. This manifests by occasional failures where only several of
the 10 required packets get through.

Therefore, when reconfiguring the VLAN flags, move the IP address to the
appropriate device in the H3 VRF.

In addition to that, take this opportunity to embed an ASCII art diagram
to make the topology move obvious.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: mirror_lib: Wait for tardy mirrored packets
Petr Machata [Thu, 31 Jan 2019 22:35:17 +0000 (22:35 +0000)]
selftests: forwarding: mirror_lib: Wait for tardy mirrored packets

When running in an environment with poor performance (such as a
simulator), processing mirrored packets can take a while. Evaluating the
condition too soon leads to spurious "seen 9, expected 10" failures as
the last packet doesn't have enough time to get mirrored and the mirror
to arrive and bump the observed counters.

Wait for one ping interval before evaluating the test.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: mirror_gre_changes: Fix TTL test
Petr Machata [Thu, 31 Jan 2019 22:35:15 +0000 (22:35 +0000)]
selftests: forwarding: mirror_gre_changes: Fix TTL test

When running in a simulator, the TTL change takes a while to settle and
during this time the performance of the packet processing is lowered.
The resulting instability leads to ping sending more packets as it
assumes some have been dropped. This then leads to regular spurious
failures as more packets than expected are observed.

Sleep a bit to give the system time to stabilize.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: mlxsw: Update ping limits
Petr Machata [Thu, 31 Jan 2019 22:35:14 +0000 (22:35 +0000)]
selftests: mlxsw: Update ping limits

The current ping intervals are too short for running mirroring tests in
simulator. This leads to ping sending a follow-up ping before the reply
arrives, thus sending more than the requested 10 ICMP requests. This
traffic is seen at the counters, and causes spurious failures.

Bump interval and timeout numbers 5x in mirroring tests to address the
spurious failures.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: mirror_lib: Update ping limits
Petr Machata [Thu, 31 Jan 2019 22:35:12 +0000 (22:35 +0000)]
selftests: forwarding: mirror_lib: Update ping limits

The current ping intervals are too short for running mirroring tests in
simulator. This leads to ping sending a follow-up ping before the reply
arrives, thus sending more than the requested 10 ICMP requests. Those
are mirrored, and over a certain threshold the test case run is
considered a failure, because too much traffic is observed.

Bump interval and timeout numbers 5x in mirroring tests to address the
spurious failures.

Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoselftests: forwarding: Make ping timeout configurable
Ido Schimmel [Thu, 31 Jan 2019 22:35:10 +0000 (22:35 +0000)]
selftests: forwarding: Make ping timeout configurable

The current timeout (2 seconds) proved to be too low for some (emulated)
systems where we run the tests.

Make the timeout configurable and default to 5 seconds.

Signed-off-by: Ido Schimmel <[email protected]>
Signed-off-by: Petr Machata <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoipconfig: add carrier_timeout kernel parameter
Martin Kepplinger [Thu, 31 Jan 2019 10:14:18 +0000 (11:14 +0100)]
ipconfig: add carrier_timeout kernel parameter

commit 3fb72f1e6e61 ("ipconfig wait for carrier") added a
"wait for carrier" policy, with a fixed worst case maximum wait
of two minutes.

Now make the wait for carrier timeout configurable on the kernel
commandline and use the 120s as the default.

The timeout messages introduced with
commit 5e404cd65860 ("ipconfig: add informative timeout messages while
waiting for carrier") are done in a fixed interval of 20 seconds, just
like they were before (240/12).

Signed-off-by: Martin Kepplinger <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agoipv4: fib: use struct_size() in kzalloc()
Gustavo A. R. Silva [Thu, 31 Jan 2019 00:51:48 +0000 (18:51 -0600)]
ipv4: fib: use struct_size() in kzalloc()

One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:

struct foo {
    int stuff;
    struct boo entry[];
};

instance = kzalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);

Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:

instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);

This code was detected with the help of Coccinelle.

Signed-off-by: Gustavo A. R. Silva <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
6 years agonfp: use struct_size() in kzalloc()
Gustavo A. R. Silva [Thu, 31 Jan 2019 00:38:59 +0000 (18:38 -0600)]
nfp: use struct_size() in kzalloc()

One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:

struct foo {
    int stuff;
    struct boo entry[];
};

instance = kzalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);

Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:

instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);

This code was detected with the help of Coccinelle.

Signed-off-by: Gustavo A. R. Silva <[email protected]>
Acked-by: Jakub Kicinski <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
This page took 0.117563 seconds and 4 git commands to generate.