* Your images 30
From: Joanna @ 2018-10-04 11:25 UTC (permalink / raw)
To: netdev
Have photos for cutting out or retouching?
We are one image team and we do editing for your the e-commerce photos,
industry photos or portrait photo.
If you need test editing then let me know.
Waiting for your reply and the photo work.
Thanks,
Joanna
^ permalink raw reply
* Re: [PATCH net-next v1 1/1] tc: Add support for configuring the taprio scheduler
From: David Miller @ 2018-10-04 20:52 UTC (permalink / raw)
To: vinicius.gomes
Cc: netdev, jesus.sanchez-palencia, henrik, richardcochran, jhs,
xiyou.wangcong, jiri, ilias.apalodimas, simon.fok
In-Reply-To: <20180929005943.12928-2-vinicius.gomes@intel.com>
From: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Date: Fri, 28 Sep 2018 17:59:43 -0700
> This traffic scheduler allows traffic classes states (transmission
> allowed/not allowed, in the simplest case) to be scheduled, according
> to a pre-generated time sequence. This is the basis of the IEEE
> 802.1Qbv specification.
>
> Example configuration:
>
> tc qdisc replace dev enp3s0 parent root handle 100 taprio \
> num_tc 3 \
> map 2 2 1 0 2 2 2 2 2 2 2 2 2 2 2 2 \
> queues 1@0 1@1 2@2 \
> base-time 1528743495910289987 \
> sched-entry S 01 300000 \
> sched-entry S 02 300000 \
> sched-entry S 04 300000 \
> clockid CLOCK_TAI
>
> The configuration format is similar to mqprio. The main difference is
> the presence of a schedule, built by multiple "sched-entry"
> definitions, each entry has the following format:
>
> sched-entry <CMD> <GATE MASK> <INTERVAL>
>
> The only supported <CMD> is "S", which means "SetGateStates",
> following the IEEE 802.1Qbv-2015 definition (Table 8-6). <GATE MASK>
> is a bitmask where each bit is a associated with a traffic class, so
> bit 0 (the least significant bit) being "on" means that traffic class
> 0 is "active" for that schedule entry. <INTERVAL> is a time duration
> in nanoseconds that specifies for how long that state defined by <CMD>
> and <GATE MASK> should be held before moving to the next entry.
>
> This schedule is circular, that is, after the last entry is executed
> it starts from the first one, indefinitely.
>
> The other parameters can be defined as follows:
>
> - base-time: specifies the instant when the schedule starts, if
> 'base-time' is a time in the past, the schedule will start at
>
> base-time + (N * cycle-time)
>
> where N is the smallest integer so the resulting time is greater
> than "now", and "cycle-time" is the sum of all the intervals of the
> entries in the schedule;
>
> - clockid: specifies the reference clock to be used;
>
> The parameters should be similar to what the IEEE 802.1Q family of
> specification defines.
>
> Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Applied.
^ permalink raw reply
* Re: [PATCH v4 net-next 0/9] bnxt_en: devlink param updates
From: David Miller @ 2018-10-04 20:50 UTC (permalink / raw)
To: jiri
Cc: vasundhara-v.volam, gerlitz.or, michael.chan, netdev, jiri,
jakub.kicinski
In-Reply-To: <20181004103940.GE2222@nanopsycho>
From: Jiri Pirko <jiri@resnulli.us>
Date: Thu, 4 Oct 2018 12:39:40 +0200
> Thu, Oct 04, 2018 at 07:43:43AM CEST, vasundhara-v.volam@broadcom.com wrote:
>>This patchset adds support for 3 generic and 1 driver-specific devlink
>>parameters. Add documentation for these configuration parameters.
>>
>>Also, this patchset adds support to return proper error code if
>>HWRM_NVM_GET/SET_VARIABLE commands return error code
>>HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED.
>>
>>v3->v4:
>>-Remove extra definition of NVM_OFF_HW_TC_OFFLOAD from bnxt_devlink.h
>>-Remove type information for generic parameters from
>>devlink-params-bnxt.txt
>>
>>v2->v3:
>>-Remove description of generic parameters from devlink-params-bnxt.txt
>>
>>v1->v2:
>>-Remove hw_tc_offload parameter.
>>-Update all patches with Cc of MAINTAINERS.
>>-Add more description in commit message for device specific parameter.
>>-Add a new Documentation/networking/devlink-params.txt with some
>>generic devlink parameters information.
>>-Add a new Documentation/networking/devlink-params-bnxt.txt with devlink
>>parameters information that are supported by bnxt_en driver.
>>
>>Vasundhara Volam (9):
>> devlink: Add generic parameter ignore_ari
>> devlink: Add generic parameter msix_vec_per_pf_max
>> devlink: Add generic parameter msix_vec_per_pf_min
>> bnxt_en: Use ignore_ari devlink parameter
>> bnxt_en: return proper error when FW returns
>> HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED
>> bnxt_en: Use msix_vec_per_pf_max and msix_vec_per_pf_min devlink
>> params.
>> bnxt_en: Add a driver specific gre_ver_check devlink parameter.
>> devlink: Add Documentation/networking/devlink-params.txt
>> devlink: Add Documentation/networking/devlink-params-bnxt.txt
>
> Looks good to me. For the whole set:
> Acked-by: Jiri Pirko <jiri@mellanox.com>
Series applied, thanks.
^ permalink raw reply
* Re: [PATCH net-next,v2] IPv6 ifstats separation
From: Eric Dumazet @ 2018-10-04 20:42 UTC (permalink / raw)
To: Stephen Suryaputra, netdev
In-Reply-To: <20181004190828.26536-1-ssuryaextr@gmail.com>
On 10/04/2018 12:08 PM, Stephen Suryaputra wrote:
> Separate IPv6 ifstats into the ones that are hit on fast path and
> the ones that aren't. The ones that are not can be removed as needed
> using sysctls.
>
> The separation minimizes percpu data. It reduces from 288 bytes per cpu to 56
> bytes. When the other stats are disabled, then it adds 4144 bytes saving per
> netdev.
>
> The stats that are hit on fast path are percpu and the existing macro that
> increments them is added with a constant check that should be optimized by the
> preprocessor.
>
> This is done based on some feedbacks in the past to make IPv6 stats optional.
> It doesn't fully accomplish that but it enables all but 6 counters be optional.
> Those optional counters however are still enabled by default to preserve the
> current behavior.
>
How have you decided some counters can be 'slow' and other 'fast' ?
I can tell you I see many ultra-fast candidates in your 'slow' list :/
Also think about DDOS.
After your patch, all these 'wrong packets' will incur an expensive
operation on a shared and highly contented cache line,
effectively making the attack easier to conduct.
+static const struct snmp_mib snmp6_ipstats_device_list[] = {
+ SNMP_MIB_ITEM("Ip6InHdrErrors", IPSTATS_MIB_INHDRERRORS),
+ SNMP_MIB_ITEM("Ip6InTooBigErrors", IPSTATS_MIB_INTOOBIGERRORS),
+ SNMP_MIB_ITEM("Ip6InNoRoutes", IPSTATS_MIB_INNOROUTES),
+ SNMP_MIB_ITEM("Ip6InAddrErrors", IPSTATS_MIB_INADDRERRORS),
+ SNMP_MIB_ITEM("Ip6InUnknownProtos", IPSTATS_MIB_INUNKNOWNPROTOS),
+ SNMP_MIB_ITEM("Ip6InTruncatedPkts", IPSTATS_MIB_INTRUNCATEDPKTS),
+ SNMP_MIB_ITEM("Ip6InDiscards", IPSTATS_MIB_INDISCARDS),
+ SNMP_MIB_ITEM("Ip6OutDiscards", IPSTATS_MIB_OUTDISCARDS),
+ SNMP_MIB_ITEM("Ip6OutNoRoutes", IPSTATS_MIB_OUTNOROUTES),
+ SNMP_MIB_ITEM("Ip6ReasmTimeout", IPSTATS_MIB_REASMTIMEOUT),
+ SNMP_MIB_ITEM("Ip6ReasmReqds", IPSTATS_MIB_REASMREQDS),
+ SNMP_MIB_ITEM("Ip6ReasmOKs", IPSTATS_MIB_REASMOKS),
+ SNMP_MIB_ITEM("Ip6ReasmFails", IPSTATS_MIB_REASMFAILS),
+ SNMP_MIB_ITEM("Ip6FragOKs", IPSTATS_MIB_FRAGOKS),
+ SNMP_MIB_ITEM("Ip6FragFails", IPSTATS_MIB_FRAGFAILS),
+ SNMP_MIB_ITEM("Ip6FragCreates", IPSTATS_MIB_FRAGCREATES),
+ SNMP_MIB_ITEM("Ip6InMcastPkts", IPSTATS_MIB_INMCASTPKTS),
+ SNMP_MIB_ITEM("Ip6OutMcastPkts", IPSTATS_MIB_OUTMCASTPKTS),
+ SNMP_MIB_ITEM("Ip6InMcastOctets", IPSTATS_MIB_INMCASTOCTETS),
+ SNMP_MIB_ITEM("Ip6OutMcastOctets", IPSTATS_MIB_OUTMCASTOCTETS),
+ SNMP_MIB_ITEM("Ip6InBcastOctets", IPSTATS_MIB_INBCASTOCTETS),
+ SNMP_MIB_ITEM("Ip6OutBcastOctets", IPSTATS_MIB_OUTBCASTOCTETS),
+ /* IPSTATS_MIB_CSUMERRORS is not relevant in IPv6 (no checksum) */
+ SNMP_MIB_ITEM("Ip6InNoECTPkts", IPSTATS_MIB_NOECTPKTS),
+ SNMP_MIB_ITEM("Ip6InECT1Pkts", IPSTATS_MIB_ECT1PKTS),
+ SNMP_MIB_ITEM("Ip6InECT0Pkts", IPSTATS_MIB_ECT0PKTS),
+ SNMP_MIB_ITEM("Ip6InCEPkts", IPSTATS_MIB_CEPKTS),
+ SNMP_MIB_SENTINEL
+};
+
^ permalink raw reply
* Re: [PATCH v2 net-next] rtnetlink: fix rtnl_fdb_dump() for ndmsg header
From: David Ahern @ 2018-10-04 20:34 UTC (permalink / raw)
To: Mauricio Faria de Oliveira, netdev; +Cc: davem
In-Reply-To: <20181002014640.688-1-mfo@canonical.com>
On 10/1/18 7:46 PM, Mauricio Faria de Oliveira wrote:
> Currently, rtnl_fdb_dump() assumes the family header is 'struct ifinfomsg',
> which is not always true -- 'struct ndmsg' is used by iproute2 ('ip neigh').
>
> The problem is, the function bails out early if nlmsg_parse() fails, which
> does occur for iproute2 usage of 'struct ndmsg' because the payload length
> is shorter than the family header alone (as 'struct ifinfomsg' is assumed).
>
> This breaks backward compatibility with userspace -- nothing is sent back.
>
...
>
> Fixes: 0ff50e83b512 ("net: rtnetlink: bail out from rtnl_fdb_dump() on parse error")
> Fixes: 5e6d24358799 ("bridge: netlink dump interface at par with brctl")
> Reported-by: Aidan Obley <aobley@pivotal.io>
> Signed-off-by: Mauricio Faria de Oliveira <mfo@canonical.com>
>
> ---
> v2: Change logic to check msg size for ndmsg with optional attribute.
> Thanks: David Ahern <dsahern@gmail.com>
>
> net/core/rtnetlink.c | 29 ++++++++++++++++++++---------
> 1 file changed, 20 insertions(+), 9 deletions(-)
>
Seems reasonable for 4.19 and back
Reviewed-by: David Ahern <dsahern@gmail.com>
^ permalink raw reply
* Re: [PATCH bpf-next] bpf: emit audit messages upon successful prog load and unload
From: Jesper Dangaard Brouer @ 2018-10-04 20:22 UTC (permalink / raw)
To: Daniel Borkmann; +Cc: Alexei Starovoitov, ast, netdev, Jiri Olsa, acme, brouer
In-Reply-To: <36266cde-3aa0-aeb4-9888-5e3f0e4d1911@iogearbox.net>
On Thu, 4 Oct 2018 21:41:17 +0200 Daniel Borkmann <daniel@iogearbox.net> wrote:
> On 10/04/2018 08:39 PM, Jesper Dangaard Brouer wrote:
> > On Thu, 4 Oct 2018 10:11:43 -0700 Alexei Starovoitov <alexei.starovoitov@gmail.com> wrote:
> >> On Thu, Oct 04, 2018 at 03:50:38PM +0200, Daniel Borkmann wrote:
[...]
> >>
> >> If the purpose of the patch is to give user space visibility into
> >> bpf prog load/unload as a notification, then I completely agree that
> >> some notification mechanism is necessary.
>
> Yeah, I did only regard it as only that, nothing more. Some means
> of timeline and notification that can be kept in a record in user
> space and later retrieved e.g. for introspection on what has been
> loaded.
>
> >> I've started working on such mechanism via perf ring buffer which is
> >> the fastest mechanism we have in the kernel so far.
> >> See long discussion here: https://patchwork.ozlabs.org/patch/971970/
>
> That one is definitely needed in any case to resolve the kallsyms
> limitations, and it does have overlap in that in either case we
> want to look at past BPF programs that have been unloaded in the
> meantime, so I don't have a strong preference either way, and the
> former is needed in any case. Though thought was that audit might
> be an option for those not running profiling daemons 24/7, but
> presumably bpftool could be extended to record these events as
> well if we don't want to reuse audit infra.
Yes, exactly, I don't want to run a profiling daemon 24/7 to record
these events. I do acknowledge that this perf event is relevant,
especially for catching the kernel symbols (I need that myself), but it
does not cover my use-case.
My use-case is to 24/7 collect and keep records in userspace, and have a
timeline of these notifications, for later retrieval. The idea is that
our support engineers can look at these records when troubleshooting
the system. And the plan is also to collect these records as part of
our sosreport tool, which is part of the support case.
--
Best regards,
Jesper Dangaard Brouer
MSc.CS, Principal Kernel Engineer at Red Hat
LinkedIn: http://www.linkedin.com/in/brouer
^ permalink raw reply
* Re: [PATCH ethtool v2] ethtool: Fix uninitialized variable use at qsfp dump
From: John W. Linville @ 2018-10-04 19:40 UTC (permalink / raw)
To: Eran Ben Elisha
Cc: netdev, Chris Preimesberger, Andrew Lunn, Neil Horman,
Vidya Sagar Ravipati
In-Reply-To: <1538465059-24645-1-git-send-email-eranbe@mellanox.com>
On Tue, Oct 02, 2018 at 10:24:19AM +0300, Eran Ben Elisha wrote:
> Struct sff_diags can be used uninitialized at sff8636_show_dom, this
> caused the tool to show unreported fields (supports_alarms) by the lower
> level driver.
>
> In addition, make sure the same struct is being initialized at
> sff8472_parse_eeprom function, to avoid the same issue here.
>
> Fixes: a5e73bb05ee4 ("ethtool:QSFP Plus/QSFP28 Diagnostics Information Support")
> Signed-off-by: Eran Ben Elisha <eranbe@mellanox.com>
OK, queued for next release...
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: [RFC PATCH ethtool] ethtool: better syntax for combinations of FEC modes
From: John W. Linville @ 2018-10-04 19:41 UTC (permalink / raw)
To: Edward Cree; +Cc: Michal Kubecek, netdev
In-Reply-To: <046b3295-e634-f29e-5d3f-537d80cb3c30@solarflare.com>
On Thu, Oct 04, 2018 at 05:06:29PM +0100, Edward Cree wrote:
> On 04/10/18 15:08, John W. Linville wrote:
> > Ping?
> >
> > On Mon, Oct 01, 2018 at 02:59:10PM -0400, John W. Linville wrote:
> >> Is this patch still RFC?
> Feel free to de-RFC and apply it.
Great -- queued for next release.
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* pull-request: mac80211 2018-10-04
From: Johannes Berg @ 2018-10-04 19:43 UTC (permalink / raw)
To: David Miller; +Cc: netdev, linux-wireless
Hi Dave,
I got three more fixes submitted, and am sending those to you
now in the hope of still getting them in, although all of the
bugs are actually older than the current cycle.
If there's a release on Sunday then I guess I won't care, but
if not then I'd appreciate if you could pull net into net-next
as I have at least one patch there that otherwise doesn't apply
(at least the result wouldn't compile). Not sure if you've seen
anything from Greg indicating either way.
Anyway, for now these fixes look good to me, so please pull or
let me know if there's any problem.
Thanks,
johannes
The following changes since commit 43955a45dc0b4f3be7f0c3afc0e080ed59bb5280:
netlink: fix typo in nla_parse_nested() comment (2018-09-29 11:48:26 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211.git tags/mac80211-for-davem-2018-10-04
for you to fetch changes up to 1db58529454742f67ebd96e3588315e880b72837:
cfg80211: fix use-after-free in reg_process_hint() (2018-10-01 09:14:03 +0200)
----------------------------------------------------------------
Just three small fixes:
* fix use-after-free in regulatory code
* fix rx-mgmt key flag in AP mode (mac80211)
* fix wireless extensions compat code memory leak
----------------------------------------------------------------
Felix Fietkau (1):
mac80211: fix setting IEEE80211_KEY_FLAG_RX_MGMT for AP mode keys
Stefan Seyfried (1):
cfg80211: fix wext-compat memory leak
Yu Zhao (1):
cfg80211: fix use-after-free in reg_process_hint()
net/mac80211/cfg.c | 2 +-
net/wireless/reg.c | 7 ++++---
net/wireless/wext-compat.c | 14 ++++++++++----
3 files changed, 15 insertions(+), 8 deletions(-)
^ permalink raw reply
* Re: [PATCH bpf-next] bpf: emit audit messages upon successful prog load and unload
From: Daniel Borkmann @ 2018-10-04 19:41 UTC (permalink / raw)
To: Jesper Dangaard Brouer, Alexei Starovoitov; +Cc: ast, netdev, Jiri Olsa, acme
In-Reply-To: <20181004203949.388e9a38@redhat.com>
On 10/04/2018 08:39 PM, Jesper Dangaard Brouer wrote:
> On Thu, 4 Oct 2018 10:11:43 -0700
> Alexei Starovoitov <alexei.starovoitov@gmail.com> wrote:
>> On Thu, Oct 04, 2018 at 03:50:38PM +0200, Daniel Borkmann wrote:
>>> Allow for audit messages to be emitted upon BPF program load and
>>> unload for having a timeline of events. The load itself is in
>>> syscall context, so additional info about the process initiating
>>> the BPF prog creation can be logged and later directly correlated
>>> to the unload event.
>>>
>>> The only info really needed from BPF side is the globally unique
>>> prog ID where then audit user space tooling can query / dump all
>>> info needed about the specific BPF program right upon load event
>>> and enrich the record, thus these changes needed here can be kept
>>> small and non-intrusive to the core.
>>
>> The above description is correct, but the commit log doesn't explain
>> _why_ this audit logging is needed and _why_ for load/unload.
>> My understanding of audit subsystem that it's very heavy weight
>> and absolutely not suitable for high frequency events.
>> Audit suppose to log the events that alter security of the system.
>> I don't see how loading/unloading bpf program influences security
>> at the time of the load.
>> The actions that program may take later (like dropping a packet
>> in XDP due to firewalling reasons) can be considered security
>> related, but not at the time of prog load.
>
> I actually consider loading (well attaching) an XDP program as a
> security event. With XDP you can bypass any kernel firewall and you are
> invisible to tcpdump. And without an audit event, you leave no record
> of your actions.
>
> This is not a thought up attack angle. The NorthSec CTF hacker event,
> had an XDP challenge that did just this.
>
> Code: https://github.com/jdesfossez/nsec17-xdpbpf
> Blog: https://suchakra.wordpress.com/2017/05/23/an-entertaining-ebpf-xdp-adventure/
Well, I don't think this argument is valid. First of all it is a
perfectly valid use case that XDP itself /is/ your firewall, and I
would presume it may even be the case or part of it in majority of
users of XDP, so saying bypassing any kernel firewall is not true.
Second, it offers all the introspection needed from iproute2 and
bpftool side to check what it is doing, and aside from that adding
to tc ingress is not a "security" event either that would need an
audit event.
>> Classic bpf for sockets and seccomp has been around for long time,
>> but seccomp audit messages don't trigger on bpf load/unload,
>> but rather on events like killing a process due to seccomp bpf return value.
>>
>> If the purpose of the patch is to give user space visibility into
>> bpf prog load/unload as a notification, then I completely agree that
>> some notification mechanism is necessary.
Yeah, I did only regard it as only that, nothing more. Some means
of timeline and notification that can be kept in a record in user
space and later retrieved e.g. for introspection on what has been
loaded.
>> I've started working on such mechanism via perf ring buffer which is
>> the fastest mechanism we have in the kernel so far.
>> See long discussion here: https://patchwork.ozlabs.org/patch/971970/
That one is definitely needed in any case to resolve the kallsyms
limitations, and it does have overlap in that in either case we
want to look at past BPF programs that have been unloaded in the
meantime, so I don't have a strong preference either way, and the
former is needed in any case. Though thought was that audit might
be an option for those not running profiling daemons 24/7, but
presumably bpftool could be extended to record these events as
well if we don't want to reuse audit infra.
>> Essentially we need perf binary to see bpf prog load/unload events with
>> single argument bpf_prog_id to be able to do its job.
>>
>> I think from bpf kernel side there should be only one mechanism for user space
>> notifications and perf ring buffer fits the best, since amount
>> of load/unload in the system can be very large.
>> Anything but ring buffer will likely choke under volume of events.
>
> I don't really buy the volume argument. Will the BPF-verifier not be
> the bottleneck for the amount/volume of bpf_load events that can be
> generated?
^ permalink raw reply
* Re: icmp6_send() is too expensive
From: David Miller @ 2018-10-04 19:33 UTC (permalink / raw)
To: 0xeffeff; +Cc: netdev
In-Reply-To: <CAL6e_pfLT9Q+Sz+e9L4DyzwatZAWmv+Kz_+HFPK3BOrpbua=wQ@mail.gmail.com>
From: Jeff Barnhill <0xeffeff@gmail.com>
Date: Thu, 4 Oct 2018 15:02:39 -0400
> As mentioned here:
> https://www.spinics.net/lists/netdev/msg505054.html
>
> icmp6_send() can be expensive when there are a lot of devices and
> anycast addresses. One solution I've prototyped is adding a global
> hash table to store and allow more efficient searches for anycast
> addresses. This works and prevents the long delays I've seen when
> many neighbors are invalidated in large numbers.
>
> A colleague mentioned that another alternative may be to do something
> like an rt6_lookup on the address and check for the RTF_ANYCAST flag.
> This is much simpler, and I'm in the process of testing it now.
>
> Is there any preference or recommendation as to which way to proceed
> before I submit a patch?
Generally speaking, using existing tables and infrastructure is
preferrable to adding new stuff.
^ permalink raw reply
* [PATCH v3] rtw88: Add firmware file for driver rtw88
From: Larry Finger @ 2018-10-04 19:31 UTC (permalink / raw)
To: linux-firmware; +Cc: linux-wireless, Larry Finger, netdev, Yan-Hsuan Chuang
This file contains the firmware for the new driver rtw88 for Realtek
RTL8822BE and RTL8822CE devices. It was provided by the Realtek
developer.
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
---
v2 - removed redundant information from subject
v3 - drivers are for 802.11ac, not 802.11n
added firmware for RL8822CE
---
WHENCE | 10 ++++++++++
rtw88/rtw8822b_fw.bin | Bin 0 -> 150984 bytes
rtw88/rtw8822c_fw.bin | Bin 0 -> 162064 bytes
3 files changed, 10 insertions(+)
create mode 100644 rtw88/rtw8822b_fw.bin
create mode 100644 rtw88/rtw8822c_fw.bin
diff --git a/WHENCE b/WHENCE
index 3e18e48..5737a13 100644
--- a/WHENCE
+++ b/WHENCE
@@ -2671,6 +2671,16 @@ Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
--------------------------------------------------------------------------
+Driver: rtw88 - Realtek 802.11ac WLAN driver for RTL8822BE and RTL8822CE
+
+Info: Sent to Larry Finger by Realtek engineer Yan-Hsuan Chuang <yhchuang@realtek.com>
+File: rtw88/rtw8822b_fw.bin
+File: rtw88/rtw8822c_fw.bin
+
+Licence: Redistributable. See LICENCE.rtlwifi_firmware.txt for details.
+
+--------------------------------------------------------------------------
+
Driver: rtl8192ee - Realtek 802.11n WLAN driver for RTL8192EE
Info: Initial version taken from Realtek version
diff --git a/rtw88/rtw8822b_fw.bin b/rtw88/rtw8822b_fw.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0934ffcc77a327285569d135f55b58e8902511b1
GIT binary patch
literal 150984
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
literal 0
HcmV?d00001
diff --git a/rtw88/rtw8822c_fw.bin b/rtw88/rtw8822c_fw.bin
new file mode 100644
index 0000000000000000000000000000000000000000..8513a639c384fda9191d95d7467fc5b6ede8f74a
GIT binary patch
literal 162064
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
literal 0
HcmV?d00001
--
2.19.0
^ permalink raw reply related
* Re: [PATCH RFC,net-next 0/3] ip_tunnel: specify tunnel type via template
From: Jakub Kicinski @ 2018-10-04 19:13 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netdev, netfilter-devel, roopa, amir, pshelar, u9012063
In-Reply-To: <20181004000345.2380-1-pablo@netfilter.org>
On Thu, 4 Oct 2018 02:03:42 +0200, Pablo Neira Ayuso wrote:
> Hi,
>
> The following patchset adds a new field to the tunnel metadata template
> to restrict the configuration to a given tunnel driver. Currently, a
> misconfiguration may result in packets going to the wrong tunnel driver.
>
> Although we have the tunnel option flags, they are not mandatory for
> some tunnel drivers, eg. vxlan, which may use it or not; and gre which
> does not use them.
Option flags are necessary because interpretation of option blob is
entirely protocol-specific.
> This patch updates tc's tunnel action and netfilter's tunnel extension
> to use this new field. OVS netlink interface has been left unset, although they
> could be updated to use this.
>
> By extending the existing tc action to support the IP_TUNNEL_INFO_BRIDGE
> mode, I think it should be possible to expose IP_TUNNEL_TYPE_VLAN too,
> although this patchset doesn't address this scenario.
>
> The field is initialized to zero, which maps to IP_TUNNEL_TYPE_UNSPEC to
> retain the existing behaviour, so the existing flexibility is still in
> place while this new feature is added.
>
> Cc'ing people that git annotate show as dealing with these bits more
> recently.
What practical scenario are you trying to address here? Have you seen
https://www.mail-archive.com/netdev@vger.kernel.org/msg250705.html
?
^ permalink raw reply
* Re: [PATCH net-next] udp: Add tracepoints to monitor skbs going in and out of a UDP socket
From: Alexei Starovoitov @ 2018-10-05 2:03 UTC (permalink / raw)
To: David Howells; +Cc: David Ahern, netdev, linux-afs, linux-kernel
In-Reply-To: <5213.1538695482@warthog.procyon.org.uk>
On Fri, Oct 05, 2018 at 12:24:42AM +0100, David Howells wrote:
>
> As for kprobes: spots, plural. Using kprobes involves installing breakpoint
> instructions and taking traps and would seem to require using printk for the
> output, which would affect the timings and potentially affect the situation,
> especially given the sheer amount of traces produced. Note that one of these
> was in an interrupt handler, which is possibly not the best place to be taking
> an illegal instruction trap.
>
> Using kprobes gets worse too. In my case, the source code and the build tree
> aren't on the test machine, which I understand would be a requirement - and
there is quite a bit of misunderstanding in the above two paragraphs about kprobes.
Sounds like it influences odd design choices with tracepoints.
- kprobes at the top of the function don't use traps and they've been
optimized over the years to have very low overhead
- trace_printk is using the same mechanism as tracepoint prints
- both trace_printk and tracepoints can affect timing
- kprobes and trace_printk work well out of irq handler. They work out of NMI too
- build tree doesn't need to be present to use kprobes
perf, bcc and others tools have user friendly (arguable of course) interfaces
for kprobes.
^ permalink raw reply
* [PATCH net-next,v2] IPv6 ifstats separation
From: Stephen Suryaputra @ 2018-10-04 19:08 UTC (permalink / raw)
To: netdev; +Cc: Stephen Suryaputra
Separate IPv6 ifstats into the ones that are hit on fast path and
the ones that aren't. The ones that are not can be removed as needed
using sysctls.
The separation minimizes percpu data. It reduces from 288 bytes per cpu to 56
bytes. When the other stats are disabled, then it adds 4144 bytes saving per
netdev.
The stats that are hit on fast path are percpu and the existing macro that
increments them is added with a constant check that should be optimized by the
preprocessor.
This is done based on some feedbacks in the past to make IPv6 stats optional.
It doesn't fully accomplish that but it enables all but 6 counters be optional.
Those optional counters however are still enabled by default to preserve the
current behavior.
Changes from v1:
- More elaborate changelog (per Eric Dumazet)
Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com>
---
include/linux/ipv6.h | 3 +
include/net/if_inet6.h | 3 +-
include/net/ipv6.h | 28 ++-
include/net/snmp.h | 22 +++
include/uapi/linux/ipv6.h | 3 +
include/uapi/linux/snmp.h | 3 +-
net/ipv6/addrconf.c | 380 +++++++++++++++++++++++++++++++++++---
net/ipv6/addrconf_core.c | 3 +-
net/ipv6/proc.c | 57 +++++-
9 files changed, 462 insertions(+), 40 deletions(-)
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index 495e834c1367..c477960d57c2 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -74,6 +74,9 @@ struct ipv6_devconf {
__u32 addr_gen_mode;
__s32 disable_policy;
__s32 ndisc_tclass;
+ __s32 extended_ipstats;
+ __s32 icmpstats;
+ __s32 icmpmsgstats;
struct ctl_table_header *sysctl_header;
};
diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
index d7578cf49c3a..62757829a992 100644
--- a/include/net/if_inet6.h
+++ b/include/net/if_inet6.h
@@ -158,7 +158,8 @@ struct ifacaddr6 {
struct ipv6_devstat {
struct proc_dir_entry *proc_dir_entry;
- DEFINE_SNMP_STAT(struct ipstats_mib, ipv6);
+ DEFINE_SNMP_STAT(struct ipstats_mib_device_fast, ipv6dev_fast);
+ DEFINE_SNMP_STAT_ATOMIC(struct ipstats_mib_device, ipv6dev);
DEFINE_SNMP_STAT_ATOMIC(struct icmpv6_mib_device, icmpv6dev);
DEFINE_SNMP_STAT_ATOMIC(struct icmpv6msg_mib_device, icmpv6msgdev);
};
diff --git a/include/net/ipv6.h b/include/net/ipv6.h
index ff33f498c137..4064d88d7b9d 100644
--- a/include/net/ipv6.h
+++ b/include/net/ipv6.h
@@ -166,8 +166,12 @@ extern int sysctl_mld_qrv;
#define _DEVINC(net, statname, mod, idev, field) \
({ \
struct inet6_dev *_idev = (idev); \
- if (likely(_idev != NULL)) \
- mod##SNMP_INC_STATS64((_idev)->stats.statname, (field));\
+ if (likely(_idev != NULL)) { \
+ if (field < __IPSTATS_MIB_FAST_MAX) \
+ mod##SNMP_INC_STATS64((_idev)->stats.statname##dev_fast, (field)); \
+ else if (likely((_idev)->stats.statname##dev != NULL)) \
+ SNMP_INC_STATS_ATOMIC_LONG((_idev)->stats.statname##dev, (field)); \
+ } \
mod##SNMP_INC_STATS64((net)->mib.statname##_statistics, (field));\
})
@@ -175,7 +179,7 @@ extern int sysctl_mld_qrv;
#define _DEVINCATOMIC(net, statname, mod, idev, field) \
({ \
struct inet6_dev *_idev = (idev); \
- if (likely(_idev != NULL)) \
+ if (likely(_idev != NULL && (_idev)->stats.statname##dev != NULL)) \
SNMP_INC_STATS_ATOMIC_LONG((_idev)->stats.statname##dev, (field)); \
mod##SNMP_INC_STATS((net)->mib.statname##_statistics, (field));\
})
@@ -184,7 +188,7 @@ extern int sysctl_mld_qrv;
#define _DEVINC_ATOMIC_ATOMIC(net, statname, idev, field) \
({ \
struct inet6_dev *_idev = (idev); \
- if (likely(_idev != NULL)) \
+ if (likely(_idev != NULL && (_idev)->stats.statname##dev != NULL)) \
SNMP_INC_STATS_ATOMIC_LONG((_idev)->stats.statname##dev, (field)); \
SNMP_INC_STATS_ATOMIC_LONG((net)->mib.statname##_statistics, (field));\
})
@@ -192,16 +196,24 @@ extern int sysctl_mld_qrv;
#define _DEVADD(net, statname, mod, idev, field, val) \
({ \
struct inet6_dev *_idev = (idev); \
- if (likely(_idev != NULL)) \
- mod##SNMP_ADD_STATS((_idev)->stats.statname, (field), (val)); \
+ if (likely(_idev != NULL)) { \
+ if (field < __IPSTATS_MIB_FAST_MAX) \
+ mod##SNMP_ADD_STATS((_idev)->stats.statname##dev_fast, (field), (val)); \
+ else if (likely((_idev)->stats.statname##dev != NULL)) \
+ SNMP_ADD_STATS_ATOMIC_LONG((_idev)->stats.statname##dev, (field), (val)); \
+ } \
mod##SNMP_ADD_STATS((net)->mib.statname##_statistics, (field), (val));\
})
#define _DEVUPD(net, statname, mod, idev, field, val) \
({ \
struct inet6_dev *_idev = (idev); \
- if (likely(_idev != NULL)) \
- mod##SNMP_UPD_PO_STATS((_idev)->stats.statname, field, (val)); \
+ if (likely(_idev != NULL)) { \
+ if (field##PKTS < __IPSTATS_MIB_FAST_MAX) \
+ mod##SNMP_UPD_PO_STATS((_idev)->stats.statname##dev_fast, field, (val)); \
+ else if (likely((_idev)->stats.statname##dev != NULL)) \
+ SNMP_UPD_PO_STATS_ATOMIC_LONG((_idev)->stats.statname##dev, field, (val)); \
+ } \
mod##SNMP_UPD_PO_STATS((net)->mib.statname##_statistics, field, (val));\
})
diff --git a/include/net/snmp.h b/include/net/snmp.h
index c9228ad7ee91..0b85ccdc493d 100644
--- a/include/net/snmp.h
+++ b/include/net/snmp.h
@@ -53,12 +53,25 @@ struct snmp_mib {
/* IPstats */
#define IPSTATS_MIB_MAX __IPSTATS_MIB_MAX
+#define IPSTATS_MIB_FAST_MAX __IPSTATS_MIB_FAST_MAX
struct ipstats_mib {
/* mibs[] must be first field of struct ipstats_mib */
u64 mibs[IPSTATS_MIB_MAX];
struct u64_stats_sync syncp;
};
+/* Fast per device IPstats */
+struct ipstats_mib_device_fast {
+ /* mibs[] must be first field of struct ipstats_mib_device_fast */
+ u64 mibs[IPSTATS_MIB_FAST_MAX];
+ struct u64_stats_sync syncp;
+};
+
+/* Slow per device IPstats */
+struct ipstats_mib_device {
+ atomic_long_t mibs[IPSTATS_MIB_MAX];
+};
+
/* ICMP */
#define ICMP_MIB_MAX __ICMP_MIB_MAX
struct icmp_mib {
@@ -140,6 +153,10 @@ struct linux_xfrm_mib {
#define SNMP_ADD_STATS(mib, field, addend) \
this_cpu_add(mib->mibs[field], addend)
+
+#define SNMP_ADD_STATS_ATOMIC_LONG(mib, field, addend) \
+ atomic_long_add(addend, &mib->mibs[field])
+
#define SNMP_UPD_PO_STATS(mib, basefield, addend) \
do { \
__typeof__((mib->mibs) + 0) ptr = mib->mibs; \
@@ -152,6 +169,11 @@ struct linux_xfrm_mib {
__this_cpu_inc(ptr[basefield##PKTS]); \
__this_cpu_add(ptr[basefield##OCTETS], addend); \
} while (0)
+#define SNMP_UPD_PO_STATS_ATOMIC_LONG(mib, basefield, addend) \
+ do { \
+ atomic_long_inc(&mib->mibs[basefield##PKTS]); \
+ atomic_long_add(addend, &mib->mibs[basefield##OCTETS]); \
+ } while (0)
#if BITS_PER_LONG==32
diff --git a/include/uapi/linux/ipv6.h b/include/uapi/linux/ipv6.h
index 9c0f4a92bcff..5864f4c8afbd 100644
--- a/include/uapi/linux/ipv6.h
+++ b/include/uapi/linux/ipv6.h
@@ -187,6 +187,9 @@ enum {
DEVCONF_DISABLE_POLICY,
DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN,
DEVCONF_NDISC_TCLASS,
+ DEVCONF_EXTENDED_IPSTATS,
+ DEVCONF_ICMPSTATS,
+ DEVCONF_ICMPMSGSTATS,
DEVCONF_MAX
};
diff --git a/include/uapi/linux/snmp.h b/include/uapi/linux/snmp.h
index f80135e5feaa..eb689ecf21a6 100644
--- a/include/uapi/linux/snmp.h
+++ b/include/uapi/linux/snmp.h
@@ -26,8 +26,9 @@ enum
IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */
IPSTATS_MIB_OUTPKTS, /* OutRequests */
IPSTATS_MIB_OUTOCTETS, /* OutOctets */
+ __IPSTATS_MIB_FAST_MAX,
/* other fields */
- IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */
+ IPSTATS_MIB_INHDRERRORS = __IPSTATS_MIB_FAST_MAX, /* InHdrErrors */
IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */
IPSTATS_MIB_INNOROUTES, /* InNoRoutes */
IPSTATS_MIB_INADDRERRORS, /* InAddrErrors */
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index a9a317322388..d8c15c713224 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -239,6 +239,9 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
.enhanced_dad = 1,
.addr_gen_mode = IN6_ADDR_GEN_MODE_EUI64,
.disable_policy = 0,
+ .extended_ipstats = 1,
+ .icmpstats = 1,
+ .icmpmsgstats = 1,
};
static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
@@ -293,6 +296,9 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
.enhanced_dad = 1,
.addr_gen_mode = IN6_ADDR_GEN_MODE_EUI64,
.disable_policy = 0,
+ .extended_ipstats = 1,
+ .icmpstats = 1,
+ .icmpmsgstats = 1,
};
/* Check if link is ready: is it up and is a valid qdisc available */
@@ -333,33 +339,45 @@ static int snmp6_alloc_dev(struct inet6_dev *idev)
{
int i;
- idev->stats.ipv6 = alloc_percpu(struct ipstats_mib);
- if (!idev->stats.ipv6)
- goto err_ip;
+ idev->stats.ipv6dev_fast = alloc_percpu(struct ipstats_mib_device_fast);
+ if (!idev->stats.ipv6dev_fast)
+ goto err_ip_fast;
for_each_possible_cpu(i) {
- struct ipstats_mib *addrconf_stats;
- addrconf_stats = per_cpu_ptr(idev->stats.ipv6, i);
+ struct ipstats_mib_device_fast *addrconf_stats;
+ addrconf_stats = per_cpu_ptr(idev->stats.ipv6dev_fast, i);
u64_stats_init(&addrconf_stats->syncp);
}
- idev->stats.icmpv6dev = kzalloc(sizeof(struct icmpv6_mib_device),
- GFP_KERNEL);
- if (!idev->stats.icmpv6dev)
- goto err_icmp;
- idev->stats.icmpv6msgdev = kzalloc(sizeof(struct icmpv6msg_mib_device),
- GFP_KERNEL);
- if (!idev->stats.icmpv6msgdev)
- goto err_icmpmsg;
+ if (idev->cnf.extended_ipstats) {
+ idev->stats.ipv6dev = kzalloc(sizeof(struct ipstats_mib_device),
+ GFP_KERNEL);
+ if (!idev->stats.ipv6dev)
+ goto err_ip;
+ }
+ if (idev->cnf.icmpstats) {
+ idev->stats.icmpv6dev = kzalloc(sizeof(struct icmpv6_mib_device),
+ GFP_KERNEL);
+ if (!idev->stats.icmpv6dev)
+ goto err_icmp;
+ }
+ if (idev->cnf.icmpmsgstats) {
+ idev->stats.icmpv6msgdev = kzalloc(sizeof(struct icmpv6msg_mib_device),
+ GFP_KERNEL);
+ if (!idev->stats.icmpv6msgdev)
+ goto err_icmpmsg;
+ }
return 0;
err_icmpmsg:
kfree(idev->stats.icmpv6dev);
err_icmp:
- free_percpu(idev->stats.ipv6);
+ kfree(idev->stats.ipv6dev);
err_ip:
+ free_percpu(idev->stats.ipv6dev_fast);
+err_ip_fast:
return -ENOMEM;
}
@@ -5263,6 +5281,9 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
array[DEVCONF_ADDR_GEN_MODE] = cnf->addr_gen_mode;
array[DEVCONF_DISABLE_POLICY] = cnf->disable_policy;
array[DEVCONF_NDISC_TCLASS] = cnf->ndisc_tclass;
+ array[DEVCONF_EXTENDED_IPSTATS] = cnf->extended_ipstats;
+ array[DEVCONF_ICMPSTATS] = cnf->icmpstats;
+ array[DEVCONF_ICMPMSGSTATS] = cnf->icmpmsgstats;
}
static inline size_t inet6_ifla6_size(void)
@@ -5297,14 +5318,16 @@ static inline void __snmp6_fill_statsdev(u64 *stats, atomic_long_t *mib,
/* Use put_unaligned() because stats may not be aligned for u64. */
put_unaligned(ICMP6_MIB_MAX, &stats[0]);
- for (i = 1; i < ICMP6_MIB_MAX; i++)
- put_unaligned(atomic_long_read(&mib[i]), &stats[i]);
+ if (mib) {
+ for (i = 1; i < ICMP6_MIB_MAX; i++)
+ put_unaligned(atomic_long_read(&mib[i]), &stats[i]);
+ }
memset(&stats[ICMP6_MIB_MAX], 0, pad);
}
-static inline void __snmp6_fill_stats64(u64 *stats, void __percpu *mib,
- int bytes, size_t syncpoff)
+static inline void __snmp6_fill_stats64(u64 *stats, void __percpu *mib_fast,
+ atomic_long_t *mib, int bytes, size_t syncpoff)
{
int i, c;
u64 buff[IPSTATS_MIB_MAX];
@@ -5316,10 +5339,13 @@ static inline void __snmp6_fill_stats64(u64 *stats, void __percpu *mib,
buff[0] = IPSTATS_MIB_MAX;
for_each_possible_cpu(c) {
- for (i = 1; i < IPSTATS_MIB_MAX; i++)
- buff[i] += snmp_get_cpu_field64(mib, c, i, syncpoff);
+ for (i = 1; i < IPSTATS_MIB_FAST_MAX; i++)
+ buff[i] += snmp_get_cpu_field64(mib_fast, c, i, syncpoff);
+ }
+ if (mib) {
+ for (; i < IPSTATS_MIB_MAX; i++)
+ buff[i] = atomic_long_read(&mib[i]);
}
-
memcpy(stats, buff, IPSTATS_MIB_MAX * sizeof(u64));
memset(&stats[IPSTATS_MIB_MAX], 0, pad);
}
@@ -5329,11 +5355,14 @@ static void snmp6_fill_stats(u64 *stats, struct inet6_dev *idev, int attrtype,
{
switch (attrtype) {
case IFLA_INET6_STATS:
- __snmp6_fill_stats64(stats, idev->stats.ipv6, bytes,
- offsetof(struct ipstats_mib, syncp));
+ __snmp6_fill_stats64(stats, idev->stats.ipv6dev_fast,
+ idev->stats.ipv6dev ? idev->stats.ipv6dev->mibs : NULL,
+ bytes, offsetof(struct ipstats_mib_device_fast, syncp));
break;
case IFLA_INET6_ICMP6STATS:
- __snmp6_fill_statsdev(stats, idev->stats.icmpv6dev->mibs, bytes);
+ __snmp6_fill_statsdev(stats,
+ idev->stats.icmpv6dev ? idev->stats.icmpv6dev->mibs : NULL,
+ bytes);
break;
}
}
@@ -6205,6 +6234,288 @@ int addrconf_sysctl_disable_policy(struct ctl_table *ctl, int write,
return ret;
}
+static
+void free_ipv6dev_rcu(struct rcu_head *head)
+{
+ struct inet6_dev *idev = container_of(head, struct inet6_dev, rcu);
+
+ kfree(idev->stats.ipv6dev);
+ idev->stats.ipv6dev = NULL;
+}
+
+static
+int addrconf_extended_ipstats(struct ctl_table *ctl, int *valp, int val)
+{
+ struct inet6_dev *idev;
+ struct net *net;
+
+ if (!rtnl_trylock())
+ return restart_syscall();
+
+ net = (struct net *)ctl->extra2;
+ if (valp == &net->ipv6.devconf_dflt->extended_ipstats) {
+ *valp = val;
+ rtnl_unlock();
+ return 0;
+ }
+
+ if (valp == &net->ipv6.devconf_all->extended_ipstats) {
+ struct net_device *dev;
+ bool undo = 0;
+
+loop:
+ for_each_netdev(net, dev) {
+ idev = __in6_dev_get(dev);
+ if (!idev)
+ continue;
+ if (val && !idev->stats.ipv6dev) {
+ idev->stats.ipv6dev = kzalloc(sizeof(struct ipstats_mib_device),
+ GFP_KERNEL);
+ if (!idev->stats.ipv6dev) {
+ undo = 1;
+ val = 0;
+ goto loop;
+ }
+ } else if (!val && idev->stats.ipv6dev) {
+ call_rcu(&idev->rcu, free_ipv6dev_rcu);
+ }
+ }
+ if (undo) {
+ rtnl_unlock();
+ return -ENOMEM;
+ }
+ } else {
+ idev = (struct inet6_dev *)ctl->extra1;
+ if (val && !idev->stats.ipv6dev) {
+ idev->stats.ipv6dev = kzalloc(sizeof(struct ipstats_mib_device),
+ GFP_KERNEL);
+ if (!idev->stats.ipv6dev) {
+ rtnl_unlock();
+ return -ENOMEM;
+ }
+ } else if (!val && !idev->stats.ipv6dev) {
+ call_rcu(&idev->rcu, free_ipv6dev_rcu);
+ }
+ }
+
+ *valp = val;
+
+ rtnl_unlock();
+ return 0;
+}
+
+static
+int addrconf_sysctl_extended_ipstats(struct ctl_table *ctl, int write,
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos)
+{
+ int *valp = ctl->data;
+ int val = *valp;
+ loff_t pos = *ppos;
+ struct ctl_table lctl;
+ int ret;
+
+ lctl = *ctl;
+ lctl.data = &val;
+ ret = proc_dointvec(&lctl, write, buffer, lenp, ppos);
+
+ if (write && (*valp != val))
+ ret = addrconf_extended_ipstats(ctl, valp, val);
+
+ if (ret)
+ *ppos = pos;
+
+ return ret;
+}
+
+static
+void free_icmpv6dev_rcu(struct rcu_head *head)
+{
+ struct inet6_dev *idev = container_of(head, struct inet6_dev, rcu);
+
+ kfree(idev->stats.icmpv6dev);
+ idev->stats.icmpv6dev = NULL;
+}
+
+static
+int addrconf_icmpstats(struct ctl_table *ctl, int *valp, int val)
+{
+ struct inet6_dev *idev;
+ struct net *net;
+
+ if (!rtnl_trylock())
+ return restart_syscall();
+
+ net = (struct net *)ctl->extra2;
+ if (valp == &net->ipv6.devconf_dflt->icmpstats) {
+ *valp = val;
+ rtnl_unlock();
+ return 0;
+ }
+
+ if (valp == &net->ipv6.devconf_all->icmpstats) {
+ struct net_device *dev;
+ bool undo = 0;
+
+loop:
+ for_each_netdev(net, dev) {
+ idev = __in6_dev_get(dev);
+ if (!idev)
+ continue;
+ if (val && !idev->stats.icmpv6dev) {
+ idev->stats.icmpv6dev = kzalloc(sizeof(struct icmpv6_mib_device),
+ GFP_KERNEL);
+ if (!idev->stats.icmpv6dev) {
+ undo = 1;
+ val = 0;
+ goto loop;
+ }
+ } else if (!val && idev->stats.icmpv6dev) {
+ call_rcu(&idev->rcu, free_icmpv6dev_rcu);
+ }
+ }
+ if (undo) {
+ rtnl_unlock();
+ return -ENOMEM;
+ }
+ } else {
+ idev = (struct inet6_dev *)ctl->extra1;
+ if (val && !idev->stats.icmpv6dev) {
+ idev->stats.icmpv6dev = kzalloc(sizeof(struct icmpv6_mib_device),
+ GFP_KERNEL);
+ if (!idev->stats.icmpv6dev) {
+ rtnl_unlock();
+ return -ENOMEM;
+ }
+ } else if (!val && idev->stats.icmpv6dev) {
+ call_rcu(&idev->rcu, free_icmpv6dev_rcu);
+ }
+ }
+
+ *valp = val;
+
+ rtnl_unlock();
+ return 0;
+}
+
+static
+int addrconf_sysctl_icmpstats(struct ctl_table *ctl, int write,
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos)
+{
+ int *valp = ctl->data;
+ int val = *valp;
+ loff_t pos = *ppos;
+ struct ctl_table lctl;
+ int ret;
+
+ lctl = *ctl;
+ lctl.data = &val;
+ ret = proc_dointvec(&lctl, write, buffer, lenp, ppos);
+
+ if (write && (*valp != val))
+ ret = addrconf_icmpstats(ctl, valp, val);
+
+ if (ret)
+ *ppos = pos;
+
+ return ret;
+}
+
+static
+void free_icmpv6msgdev_rcu(struct rcu_head *head)
+{
+ struct inet6_dev *idev = container_of(head, struct inet6_dev, rcu);
+
+ kfree(idev->stats.icmpv6msgdev);
+ idev->stats.icmpv6msgdev = NULL;
+}
+
+static
+int addrconf_icmpmsgstats(struct ctl_table *ctl, int *valp, int val)
+{
+ struct inet6_dev *idev;
+ struct net *net;
+
+ if (!rtnl_trylock())
+ return restart_syscall();
+
+ net = (struct net *)ctl->extra2;
+ if (valp == &net->ipv6.devconf_dflt->icmpmsgstats) {
+ *valp = val;
+ rtnl_unlock();
+ return 0;
+ }
+
+ if (valp == &net->ipv6.devconf_all->icmpmsgstats) {
+ struct net_device *dev;
+ bool undo = 0;
+
+loop:
+ for_each_netdev(net, dev) {
+ idev = __in6_dev_get(dev);
+ if (!idev)
+ continue;
+ if (val && !idev->stats.icmpv6msgdev) {
+ idev->stats.icmpv6msgdev = kzalloc(sizeof(struct icmpv6msg_mib_device),
+ GFP_KERNEL);
+ if (!idev->stats.icmpv6msgdev) {
+ undo = 1;
+ val = 0;
+ goto loop;
+ }
+ } else if (!val && idev->stats.icmpv6msgdev) {
+ call_rcu(&idev->rcu, free_icmpv6msgdev_rcu);
+ }
+ }
+ if (undo) {
+ rtnl_unlock();
+ return -ENOMEM;
+ }
+ } else {
+ idev = (struct inet6_dev *)ctl->extra1;
+ if (val && !idev->stats.icmpv6msgdev) {
+ idev->stats.icmpv6msgdev = kzalloc(sizeof(struct icmpv6msg_mib_device),
+ GFP_KERNEL);
+ if (!idev->stats.icmpv6msgdev) {
+ rtnl_unlock();
+ return -ENOMEM;
+ }
+ } else if (!val && idev->stats.icmpv6msgdev) {
+ call_rcu(&idev->rcu, free_icmpv6msgdev_rcu);
+ }
+ }
+
+ *valp = val;
+
+ rtnl_unlock();
+ return 0;
+}
+
+static
+int addrconf_sysctl_icmpmsgstats(struct ctl_table *ctl, int write,
+ void __user *buffer, size_t *lenp,
+ loff_t *ppos)
+{
+ int *valp = ctl->data;
+ int val = *valp;
+ loff_t pos = *ppos;
+ struct ctl_table lctl;
+ int ret;
+
+ lctl = *ctl;
+ lctl.data = &val;
+ ret = proc_dointvec(&lctl, write, buffer, lenp, ppos);
+
+ if (write && (*valp != val))
+ ret = addrconf_icmpmsgstats(ctl, valp, val);
+
+ if (ret)
+ *ppos = pos;
+
+ return ret;
+}
+
static int minus_one = -1;
static const int zero = 0;
static const int one = 1;
@@ -6586,6 +6897,27 @@ static const struct ctl_table addrconf_sysctl[] = {
.extra1 = (void *)&zero,
.extra2 = (void *)&two_five_five,
},
+ {
+ .procname = "extended_ipstats",
+ .data = &ipv6_devconf.extended_ipstats,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = addrconf_sysctl_extended_ipstats,
+ },
+ {
+ .procname = "icmpstats",
+ .data = &ipv6_devconf.icmpstats,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = addrconf_sysctl_icmpstats,
+ },
+ {
+ .procname = "icmpmsgstats",
+ .data = &ipv6_devconf.icmpmsgstats,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = addrconf_sysctl_icmpmsgstats,
+ },
{
/* sentinel */
}
diff --git a/net/ipv6/addrconf_core.c b/net/ipv6/addrconf_core.c
index 5cd0029d930e..f143d7e2264c 100644
--- a/net/ipv6/addrconf_core.c
+++ b/net/ipv6/addrconf_core.c
@@ -198,7 +198,8 @@ static void snmp6_free_dev(struct inet6_dev *idev)
{
kfree(idev->stats.icmpv6msgdev);
kfree(idev->stats.icmpv6dev);
- free_percpu(idev->stats.ipv6);
+ kfree(idev->stats.ipv6dev);
+ free_percpu(idev->stats.ipv6dev_fast);
}
static void in6_dev_finish_destroy_rcu(struct rcu_head *head)
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 2356b4af7309..c641c05af1b3 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -91,6 +91,47 @@ static const struct snmp_mib snmp6_ipstats_list[] = {
SNMP_MIB_SENTINEL
};
+static const struct snmp_mib snmp6_ipstats_device_fast_list[] = {
+ SNMP_MIB_ITEM("Ip6InReceives", IPSTATS_MIB_INPKTS),
+ SNMP_MIB_ITEM("Ip6InOctets", IPSTATS_MIB_INOCTETS),
+ SNMP_MIB_ITEM("Ip6InDelivers", IPSTATS_MIB_INDELIVERS),
+ SNMP_MIB_ITEM("Ip6OutForwDatagrams", IPSTATS_MIB_OUTFORWDATAGRAMS),
+ SNMP_MIB_ITEM("Ip6OutRequests", IPSTATS_MIB_OUTPKTS),
+ SNMP_MIB_ITEM("Ip6OutOctets", IPSTATS_MIB_OUTOCTETS),
+ SNMP_MIB_SENTINEL
+};
+
+static const struct snmp_mib snmp6_ipstats_device_list[] = {
+ SNMP_MIB_ITEM("Ip6InHdrErrors", IPSTATS_MIB_INHDRERRORS),
+ SNMP_MIB_ITEM("Ip6InTooBigErrors", IPSTATS_MIB_INTOOBIGERRORS),
+ SNMP_MIB_ITEM("Ip6InNoRoutes", IPSTATS_MIB_INNOROUTES),
+ SNMP_MIB_ITEM("Ip6InAddrErrors", IPSTATS_MIB_INADDRERRORS),
+ SNMP_MIB_ITEM("Ip6InUnknownProtos", IPSTATS_MIB_INUNKNOWNPROTOS),
+ SNMP_MIB_ITEM("Ip6InTruncatedPkts", IPSTATS_MIB_INTRUNCATEDPKTS),
+ SNMP_MIB_ITEM("Ip6InDiscards", IPSTATS_MIB_INDISCARDS),
+ SNMP_MIB_ITEM("Ip6OutDiscards", IPSTATS_MIB_OUTDISCARDS),
+ SNMP_MIB_ITEM("Ip6OutNoRoutes", IPSTATS_MIB_OUTNOROUTES),
+ SNMP_MIB_ITEM("Ip6ReasmTimeout", IPSTATS_MIB_REASMTIMEOUT),
+ SNMP_MIB_ITEM("Ip6ReasmReqds", IPSTATS_MIB_REASMREQDS),
+ SNMP_MIB_ITEM("Ip6ReasmOKs", IPSTATS_MIB_REASMOKS),
+ SNMP_MIB_ITEM("Ip6ReasmFails", IPSTATS_MIB_REASMFAILS),
+ SNMP_MIB_ITEM("Ip6FragOKs", IPSTATS_MIB_FRAGOKS),
+ SNMP_MIB_ITEM("Ip6FragFails", IPSTATS_MIB_FRAGFAILS),
+ SNMP_MIB_ITEM("Ip6FragCreates", IPSTATS_MIB_FRAGCREATES),
+ SNMP_MIB_ITEM("Ip6InMcastPkts", IPSTATS_MIB_INMCASTPKTS),
+ SNMP_MIB_ITEM("Ip6OutMcastPkts", IPSTATS_MIB_OUTMCASTPKTS),
+ SNMP_MIB_ITEM("Ip6InMcastOctets", IPSTATS_MIB_INMCASTOCTETS),
+ SNMP_MIB_ITEM("Ip6OutMcastOctets", IPSTATS_MIB_OUTMCASTOCTETS),
+ SNMP_MIB_ITEM("Ip6InBcastOctets", IPSTATS_MIB_INBCASTOCTETS),
+ SNMP_MIB_ITEM("Ip6OutBcastOctets", IPSTATS_MIB_OUTBCASTOCTETS),
+ /* IPSTATS_MIB_CSUMERRORS is not relevant in IPv6 (no checksum) */
+ SNMP_MIB_ITEM("Ip6InNoECTPkts", IPSTATS_MIB_NOECTPKTS),
+ SNMP_MIB_ITEM("Ip6InECT1Pkts", IPSTATS_MIB_ECT1PKTS),
+ SNMP_MIB_ITEM("Ip6InECT0Pkts", IPSTATS_MIB_ECT0PKTS),
+ SNMP_MIB_ITEM("Ip6InCEPkts", IPSTATS_MIB_CEPKTS),
+ SNMP_MIB_SENTINEL
+};
+
static const struct snmp_mib snmp6_icmp6_list[] = {
/* icmpv6 mib according to RFC 2466 */
SNMP_MIB_ITEM("Icmp6InMsgs", ICMP6_MIB_INMSGS),
@@ -235,11 +276,17 @@ static int snmp6_dev_seq_show(struct seq_file *seq, void *v)
struct inet6_dev *idev = (struct inet6_dev *)seq->private;
seq_printf(seq, "%-32s\t%u\n", "ifIndex", idev->dev->ifindex);
- snmp6_seq_show_item64(seq, idev->stats.ipv6,
- snmp6_ipstats_list, offsetof(struct ipstats_mib, syncp));
- snmp6_seq_show_item(seq, NULL, idev->stats.icmpv6dev->mibs,
- snmp6_icmp6_list);
- snmp6_seq_show_icmpv6msg(seq, idev->stats.icmpv6msgdev->mibs);
+ snmp6_seq_show_item64(seq, idev->stats.ipv6dev_fast,
+ snmp6_ipstats_device_fast_list,
+ offsetof(struct ipstats_mib_device_fast, syncp));
+ if (idev->stats.ipv6dev)
+ snmp6_seq_show_item(seq, NULL, idev->stats.ipv6dev->mibs,
+ snmp6_ipstats_device_list);
+ if (idev->stats.icmpv6dev)
+ snmp6_seq_show_item(seq, NULL, idev->stats.icmpv6dev->mibs,
+ snmp6_icmp6_list);
+ if (idev->stats.icmpv6msgdev)
+ snmp6_seq_show_icmpv6msg(seq, idev->stats.icmpv6msgdev->mibs);
return 0;
}
--
2.17.1
^ permalink raw reply related
* icmp6_send() is too expensive
From: Jeff Barnhill @ 2018-10-04 19:02 UTC (permalink / raw)
To: netdev
As mentioned here:
https://www.spinics.net/lists/netdev/msg505054.html
icmp6_send() can be expensive when there are a lot of devices and
anycast addresses. One solution I've prototyped is adding a global
hash table to store and allow more efficient searches for anycast
addresses. This works and prevents the long delays I've seen when
many neighbors are invalidated in large numbers.
A colleague mentioned that another alternative may be to do something
like an rt6_lookup on the address and check for the RTF_ANYCAST flag.
This is much simpler, and I'm in the process of testing it now.
Is there any preference or recommendation as to which way to proceed
before I submit a patch?
Thanks,
Jeff
^ permalink raw reply
* Re: [PATCH net-next] inet: do not set backlog if listen fails
From: Yafang Shao @ 2018-10-05 1:54 UTC (permalink / raw)
To: Eric Dumazet; +Cc: Eric Dumazet, David Miller, netdev, LKML
In-Reply-To: <9863d8b1-7249-e5ec-0400-4007798e69e2@gmail.com>
On Wed, Oct 3, 2018 at 11:41 PM Eric Dumazet <eric.dumazet@gmail.com> wrote:
>
>
>
> On 10/03/2018 08:07 AM, Yafang Shao wrote:
> > These two backlog members are not necessary set in inet_csk_listen_start().
> > Regarding sk_max_ack_backlog, it will be set in the caller inet_listen
> > and dccp_listen_start.
> > Regraing sk_ack_backlog, it is better to put it together with
> > sk_max_ack_backlog in the same function and only set on success.
> >
> > Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
> > ---
> > net/dccp/proto.c | 1 +
> > net/ipv4/af_inet.c | 1 +
> > net/ipv4/inet_connection_sock.c | 3 ---
> > 3 files changed, 2 insertions(+), 3 deletions(-)
> >
> > diff --git a/net/dccp/proto.c b/net/dccp/proto.c
> > index 875858c..34d48cd 100644
> > --- a/net/dccp/proto.c
> > +++ b/net/dccp/proto.c
> > @@ -959,6 +959,7 @@ int inet_dccp_listen(struct socket *sock, int backlog)
> > err = dccp_listen_start(sk, backlog);
> > if (err)
> > goto out;
> > + sk->sk_ack_backlog = 0;
>
>
> This is racy, remember that dccp and tcp have lockless listeners.
>
> Do not change sk_ack_backlog after a TCP/DCCP socket is ready to accept new flows.
Understood. Thanks for your explanation.
^ permalink raw reply
* Re: [PATCH bpf-next] net: core: Fix build with CONFIG_IPV6=m
From: Daniel Borkmann @ 2018-10-04 18:46 UTC (permalink / raw)
To: Joe Stringer; +Cc: netdev, ast
In-Reply-To: <CAOftzPgLWV8fVJpwYSpcOotDo7r=RgLyh2yQUZXKaC5HVK9SfQ@mail.gmail.com>
On 10/04/2018 08:33 PM, Joe Stringer wrote:
> On Thu, 4 Oct 2018 at 01:48, Daniel Borkmann <daniel@iogearbox.net> wrote:
>>
>> On 10/03/2018 07:32 AM, Joe Stringer wrote:
>>> Stephen Rothwell reports the following link failure with IPv6 as module:
>>>
>>> x86_64-linux-gnu-ld: net/core/filter.o: in function `sk_lookup':
>>> (.text+0x19219): undefined reference to `__udp6_lib_lookup'
>>>
>>> Fix the build by only enabling the IPv6 socket lookup if IPv6 support is
>>> compiled into the kernel.
>>>
>>> Signed-off-by: Joe Stringer <joe@wand.net.nz>
>>> ---
>>> net/core/filter.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/net/core/filter.c b/net/core/filter.c
>>> index 591c698bc517..30c6b2d3ef16 100644
>>> --- a/net/core/filter.c
>>> +++ b/net/core/filter.c
>>> @@ -4838,7 +4838,7 @@ struct sock *sk_lookup(struct net *net, struct bpf_sock_tuple *tuple,
>>> sk = __udp4_lib_lookup(net, src4, tuple->ipv4.sport,
>>> dst4, tuple->ipv4.dport,
>>> dif, sdif, &udp_table, skb);
>>> -#if IS_ENABLED(CONFIG_IPV6)
>>> +#if IS_REACHABLE(CONFIG_IPV6)
>>> } else {
>>> struct in6_addr *src6 = (struct in6_addr *)&tuple->ipv6.saddr;
>>> struct in6_addr *dst6 = (struct in6_addr *)&tuple->ipv6.daddr;
>>>
>>
>> Applied as a quick fix, thanks Joe, but ideally this should also work when ipv6
>> is compiled as a module. There's the ipv6_bpf_stub, which does that job for other
>> helpers that would call into v6 code out of the builtin filter.c, so I think we
>> should follow the same approach here as well. See commit d74bad4e74ee ("bpf:
>> Hooks for sys_connect").
>
> Thanks for the pointers, I'll look into that.
>
> To confirm my understanding, is it possible to unload the IPv6 module?
> I don't see any code that uninitializes "ipv6_bpf_stub". Seems like a
> simple conditional check on that variable should be enough to gate its
> usage from packet paths where sk_lookup could be invoked (Given that
> the system could receive any packets, including IPv6 when the module
> is not loaded).
No unload, this has been removed via 8ce440610357 ("ipv6: do not allow
ipv6 module to be removed").
Thanks,
Daniel
^ permalink raw reply
* Re: [PATCH bpf-next] bpf: emit audit messages upon successful prog load and unload
From: Jesper Dangaard Brouer @ 2018-10-04 18:39 UTC (permalink / raw)
To: Alexei Starovoitov; +Cc: Daniel Borkmann, ast, netdev, Jiri Olsa, acme, brouer
In-Reply-To: <20181004171141.tsggdqnh65x2si4d@ast-mbp.dhcp.thefacebook.com>
On Thu, 4 Oct 2018 10:11:43 -0700
Alexei Starovoitov <alexei.starovoitov@gmail.com> wrote:
> On Thu, Oct 04, 2018 at 03:50:38PM +0200, Daniel Borkmann wrote:
> > Allow for audit messages to be emitted upon BPF program load and
> > unload for having a timeline of events. The load itself is in
> > syscall context, so additional info about the process initiating
> > the BPF prog creation can be logged and later directly correlated
> > to the unload event.
> >
> > The only info really needed from BPF side is the globally unique
> > prog ID where then audit user space tooling can query / dump all
> > info needed about the specific BPF program right upon load event
> > and enrich the record, thus these changes needed here can be kept
> > small and non-intrusive to the core.
>
> The above description is correct, but the commit log doesn't explain
> _why_ this audit logging is needed and _why_ for load/unload.
> My understanding of audit subsystem that it's very heavy weight
> and absolutely not suitable for high frequency events.
> Audit suppose to log the events that alter security of the system.
> I don't see how loading/unloading bpf program influences security
> at the time of the load.
> The actions that program may take later (like dropping a packet
> in XDP due to firewalling reasons) can be considered security
> related, but not at the time of prog load.
I actually consider loading (well attaching) an XDP program as a
security event. With XDP you can bypass any kernel firewall and you are
invisible to tcpdump. And without an audit event, you leave no record
of your actions.
This is not a thought up attack angle. The NorthSec CTF hacker event,
had an XDP challenge that did just this.
Code: https://github.com/jdesfossez/nsec17-xdpbpf
Blog: https://suchakra.wordpress.com/2017/05/23/an-entertaining-ebpf-xdp-adventure/
> Classic bpf for sockets and seccomp has been around for long time,
> but seccomp audit messages don't trigger on bpf load/unload,
> but rather on events like killing a process due to seccomp bpf return value.
>
> If the purpose of the patch is to give user space visibility into
> bpf prog load/unload as a notification, then I completely agree that
> some notification mechanism is necessary.
> I've started working on such mechanism via perf ring buffer which is
> the fastest mechanism we have in the kernel so far.
> See long discussion here: https://patchwork.ozlabs.org/patch/971970/
>
> Essentially we need perf binary to see bpf prog load/unload events with
> single argument bpf_prog_id to be able to do its job.
>
> I think from bpf kernel side there should be only one mechanism for user space
> notifications and perf ring buffer fits the best, since amount
> of load/unload in the system can be very large.
> Anything but ring buffer will likely choke under volume of events.
I don't really buy the volume argument. Will the BPF-verifier not be
the bottleneck for the amount/volume of bpf_load events that can be
generated?
--
Best regards,
Jesper Dangaard Brouer
MSc.CS, Principal Kernel Engineer at Red Hat
LinkedIn: http://www.linkedin.com/in/brouer
^ permalink raw reply
* Re: [PATCH bpf-next] net: core: Fix build with CONFIG_IPV6=m
From: Joe Stringer @ 2018-10-04 18:33 UTC (permalink / raw)
To: daniel; +Cc: Joe Stringer, netdev, ast
In-Reply-To: <874cf302-42d8-4271-fc80-8b5386ddab17@iogearbox.net>
On Thu, 4 Oct 2018 at 01:48, Daniel Borkmann <daniel@iogearbox.net> wrote:
>
> On 10/03/2018 07:32 AM, Joe Stringer wrote:
> > Stephen Rothwell reports the following link failure with IPv6 as module:
> >
> > x86_64-linux-gnu-ld: net/core/filter.o: in function `sk_lookup':
> > (.text+0x19219): undefined reference to `__udp6_lib_lookup'
> >
> > Fix the build by only enabling the IPv6 socket lookup if IPv6 support is
> > compiled into the kernel.
> >
> > Signed-off-by: Joe Stringer <joe@wand.net.nz>
> > ---
> > net/core/filter.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/net/core/filter.c b/net/core/filter.c
> > index 591c698bc517..30c6b2d3ef16 100644
> > --- a/net/core/filter.c
> > +++ b/net/core/filter.c
> > @@ -4838,7 +4838,7 @@ struct sock *sk_lookup(struct net *net, struct bpf_sock_tuple *tuple,
> > sk = __udp4_lib_lookup(net, src4, tuple->ipv4.sport,
> > dst4, tuple->ipv4.dport,
> > dif, sdif, &udp_table, skb);
> > -#if IS_ENABLED(CONFIG_IPV6)
> > +#if IS_REACHABLE(CONFIG_IPV6)
> > } else {
> > struct in6_addr *src6 = (struct in6_addr *)&tuple->ipv6.saddr;
> > struct in6_addr *dst6 = (struct in6_addr *)&tuple->ipv6.daddr;
> >
>
> Applied as a quick fix, thanks Joe, but ideally this should also work when ipv6
> is compiled as a module. There's the ipv6_bpf_stub, which does that job for other
> helpers that would call into v6 code out of the builtin filter.c, so I think we
> should follow the same approach here as well. See commit d74bad4e74ee ("bpf:
> Hooks for sys_connect").
Thanks for the pointers, I'll look into that.
To confirm my understanding, is it possible to unload the IPv6 module?
I don't see any code that uninitializes "ipv6_bpf_stub". Seems like a
simple conditional check on that variable should be enough to gate its
usage from packet paths where sk_lookup could be invoked (Given that
the system could receive any packets, including IPv6 when the module
is not loaded).
Cheers,
Joe
^ permalink raw reply
* RE: [PATCH v3] net/ncsi: Add NCSI OEM command support
From: Justin.Lee1 @ 2018-10-04 18:29 UTC (permalink / raw)
To: vijaykhemka, sam, joel, linux-aspeed, openbmc, sdasari, netdev,
christian
In-Reply-To: <20181003233222.3909359-1-vijaykhemka@fb.com>
> This patch adds OEM commands and response handling. It also defines OEM
> command and response structure as per NCSI specification along with its
> handlers.
>
> ncsi_cmd_handler_oem: This is a generic command request handler for OEM
> commands
> ncsi_rsp_handler_oem: This is a generic response handler for OEM commands
>
> Signed-off-by: Vijay Khemka <vijaykhemka@fb.com>
> ---
> net/ncsi/internal.h | 5 +++++
> net/ncsi/ncsi-cmd.c | 30 +++++++++++++++++++++++++++---
> net/ncsi/ncsi-pkt.h | 14 ++++++++++++++
> net/ncsi/ncsi-rsp.c | 43 ++++++++++++++++++++++++++++++++++++++++++-
> 4 files changed, 88 insertions(+), 4 deletions(-)
>
> diff --git a/net/ncsi/internal.h b/net/ncsi/internal.h
> index 8055e3965cef..3d0a33b874f5 100644
> --- a/net/ncsi/internal.h
> +++ b/net/ncsi/internal.h
> @@ -68,6 +68,10 @@ enum {
> NCSI_MODE_MAX
> };
>
> +/* OEM Vendor Manufacture ID */
> +#define NCSI_OEM_MFR_MLX_ID 0x8119
> +#define NCSI_OEM_MFR_BCM_ID 0x113d
> +
> struct ncsi_channel_version {
> u32 version; /* Supported BCD encoded NCSI version */
> u32 alpha2; /* Supported BCD encoded NCSI version */
> @@ -305,6 +309,7 @@ struct ncsi_cmd_arg {
> unsigned short words[8];
> unsigned int dwords[4];
> };
> + unsigned char *data; /* NCSI OEM data */
> };
>
> extern struct list_head ncsi_dev_list;
> diff --git a/net/ncsi/ncsi-cmd.c b/net/ncsi/ncsi-cmd.c
> index 7567ca63aae2..82b7d9201db8 100644
> --- a/net/ncsi/ncsi-cmd.c
> +++ b/net/ncsi/ncsi-cmd.c
> @@ -211,6 +211,25 @@ static int ncsi_cmd_handler_snfc(struct sk_buff *skb,
> return 0;
> }
>
> +static int ncsi_cmd_handler_oem(struct sk_buff *skb,
> + struct ncsi_cmd_arg *nca)
> +{
> + struct ncsi_cmd_oem_pkt *cmd;
> + unsigned int len;
> +
> + len = sizeof(struct ncsi_cmd_pkt_hdr) + 4;
> + if (nca->payload < 26)
> + len += 26;
> + else
> + len += nca->payload;
> +
> + cmd = skb_put_zero(skb, len);
> + memcpy(&cmd->mfr_id, nca->data, nca->payload);
> + ncsi_cmd_build_header(&cmd->cmd.common, nca);
> +
> + return 0;
> +}
> +
> static struct ncsi_cmd_handler {
> unsigned char type;
> int payload;
> @@ -244,7 +263,7 @@ static struct ncsi_cmd_handler {
> { NCSI_PKT_CMD_GNS, 0, ncsi_cmd_handler_default },
> { NCSI_PKT_CMD_GNPTS, 0, ncsi_cmd_handler_default },
> { NCSI_PKT_CMD_GPS, 0, ncsi_cmd_handler_default },
> - { NCSI_PKT_CMD_OEM, 0, NULL },
> + { NCSI_PKT_CMD_OEM, -1, ncsi_cmd_handler_oem },
> { NCSI_PKT_CMD_PLDM, 0, NULL },
> { NCSI_PKT_CMD_GPUUID, 0, ncsi_cmd_handler_default }
> };
> @@ -316,8 +335,13 @@ int ncsi_xmit_cmd(struct ncsi_cmd_arg *nca)
> return -ENOENT;
> }
>
> - /* Get packet payload length and allocate the request */
> - nca->payload = nch->payload;
> + /* Get packet payload length and allocate the request
> + * It is expected that if length set as negative in
> + * handler structure means caller is initializing it
> + * and setting length in nca before calling xmit function
> + */
> + if (nch->payload >= 0)
> + nca->payload = nch->payload;
> nr = ncsi_alloc_command(nca);
> if (!nr)
> return -ENOMEM;
> diff --git a/net/ncsi/ncsi-pkt.h b/net/ncsi/ncsi-pkt.h
> index 91b4b66438df..0f2087c8d42a 100644
> --- a/net/ncsi/ncsi-pkt.h
> +++ b/net/ncsi/ncsi-pkt.h
> @@ -151,6 +151,20 @@ struct ncsi_cmd_snfc_pkt {
> unsigned char pad[22];
> };
>
> +/* OEM Request Command as per NCSI Specification */
> +struct ncsi_cmd_oem_pkt {
> + struct ncsi_cmd_pkt_hdr cmd; /* Command header */
> + __be32 mfr_id; /* Manufacture ID */
> + unsigned char data[]; /* OEM Payload Data */
> +};
> +
> +/* OEM Response Packet as per NCSI Specification */
> +struct ncsi_rsp_oem_pkt {
> + struct ncsi_rsp_pkt_hdr rsp; /* Command header */
> + __be32 mfr_id; /* Manufacture ID */
> + unsigned char data[]; /* Payload data */
> +};
> +
> /* Get Link Status */
> struct ncsi_rsp_gls_pkt {
> struct ncsi_rsp_pkt_hdr rsp; /* Response header */
> diff --git a/net/ncsi/ncsi-rsp.c b/net/ncsi/ncsi-rsp.c
> index 930c1d3796f0..d66b34749027 100644
> --- a/net/ncsi/ncsi-rsp.c
> +++ b/net/ncsi/ncsi-rsp.c
> @@ -596,6 +596,47 @@ static int ncsi_rsp_handler_snfc(struct ncsi_request *nr)
> return 0;
> }
>
> +static struct ncsi_rsp_oem_handler {
> + unsigned int mfr_id;
> + int (*handler)(struct ncsi_request *nr);
> +} ncsi_rsp_oem_handlers[] = {
> + { NCSI_OEM_MFR_MLX_ID, NULL },
> + { NCSI_OEM_MFR_BCM_ID, NULL }
> +};
> +
> +/* Response handler for OEM command */
> +static int ncsi_rsp_handler_oem(struct ncsi_request *nr)
> +{
> + struct ncsi_rsp_oem_pkt *rsp;
> + struct ncsi_rsp_oem_handler *nrh = NULL;
> + unsigned int mfr_id, i;
> +
> + /* Get the response header */
> + rsp = (struct ncsi_rsp_oem_pkt *)skb_network_header(nr->rsp);
> + mfr_id = ntohl(rsp->mfr_id);
> +
> + /* Check for manufacturer id and Find the handler */
> + for (i = 0; i < ARRAY_SIZE(ncsi_rsp_oem_handlers); i++) {
> + if (ncsi_rsp_oem_handlers[i].mfr_id == mfr_id) {
> + if (ncsi_rsp_oem_handlers[i].handler)
> + nrh = &ncsi_rsp_oem_handlers[i];
> + else
> + nrh = NULL;
> +
> + break;
> + }
> + }
> +
> + if (!nrh) {
> + netdev_err(nr->ndp->ndev.dev, "Received unrecognized OEM packet with MFR-ID (0x%x)\n",
> + mfr_id);
> + return -ENOENT;
> + }
> +
> + /* Process the packet */
> + return nrh->handler(nr);
> +}
> +
> static int ncsi_rsp_handler_gvi(struct ncsi_request *nr)
> {
> struct ncsi_rsp_gvi_pkt *rsp;
> @@ -932,7 +973,7 @@ static struct ncsi_rsp_handler {
> { NCSI_PKT_RSP_GNS, 172, ncsi_rsp_handler_gns },
> { NCSI_PKT_RSP_GNPTS, 172, ncsi_rsp_handler_gnpts },
> { NCSI_PKT_RSP_GPS, 8, ncsi_rsp_handler_gps },
> - { NCSI_PKT_RSP_OEM, 0, NULL },
> + { NCSI_PKT_RSP_OEM, -1, ncsi_rsp_handler_oem },
> { NCSI_PKT_RSP_PLDM, 0, NULL },
> { NCSI_PKT_RSP_GPUUID, 20, ncsi_rsp_handler_gpuuid }
> };
> --
> 2.17.1
Reviewed-by: Justin Lee <justin.lee1@dell.com>
^ permalink raw reply
* Re: [PATCH v5 13/15] octeontx2-af: Add support for CGX link management
From: Sunil Kovvuri @ 2018-10-04 18:27 UTC (permalink / raw)
To: Arnd Bergmann
Cc: Linux Netdev List, David S. Miller, linux-soc, Linu Cherian,
Nithya Mani, Sunil Goutham
In-Reply-To: <CAK8P3a2zm-kxXqC-fN9MPYH1aiWiUtt32m=xYrDTfse=0+aPgw@mail.gmail.com>
On Mon, Oct 1, 2018 at 6:17 PM Arnd Bergmann <arnd@arndb.de> wrote:
>
> On Mon, Oct 1, 2018 at 1:37 PM <sunil.kovvuri@gmail.com> wrote:
>
> > +/* Response to cmd ID as CGX_CMD_GET_FW_VER with cmd status as
> > + * CGX_STAT_SUCCESS
> > + */
> > +struct cgx_ver_s {
> > +#if defined(__BIG_ENDIAN_BITFIELD)
> > + uint64_t reserved2:47;
> > + uint64_t minor_ver:4;
> > + uint64_t major_ver:4;
> > + uint64_t reserved1:9;
> > +#else
> > + uint64_t reserved1:9;
> > + uint64_t major_ver:4;
> > + uint64_t minor_ver:4;
> > + uint64_t reserved2:47;
> > +#endif
> > +};
>
> This is not exactly what I meant in my comment. I think this may work
> correctly on all architectures that we support in Linux, but my point
> was that the layout of bit fields within a structure is completely up
> to the implementation, so it's really better to just avoid it entirely.
>
> Note that the data is being read with a call like
>
> ereg.val = cgx_read(cgx, lmac->lmac_id, CGX_EVENT_REG);
>
> which in turn is implemented using readq(), and that already
> performs a byte swap in order to do the right thing on big-endian
> architectures. The non-reserved bitfields in the two structures
> above span byte boundaries, so I can't even wrap my head around
> where the respective bits are supposed to be for all combinations
> of __BIG_ENDIAN/__LITTLE_ENDIAN and __BIG_ENDIAN_BITFIELD/
> __LITTLE_ENDIAN_BITFIELD.
>
> Arnd
Hi Arnd,
Thanks for your patience in checking patches and giving us feedback.
I have submitted v6 removing bitfields and using BITMASKs to extract fields.
Regards,
Sunil.
^ permalink raw reply
* [PATCH v6 15/15] MAINTAINERS: Add entry for Marvell OcteonTX2 Admin Function driver
From: sunil.kovvuri @ 2018-10-04 18:21 UTC (permalink / raw)
To: netdev, davem; +Cc: arnd, linux-soc, Sunil Goutham
In-Reply-To: <1538677318-5002-1-git-send-email-sunil.kovvuri@gmail.com>
From: Sunil Goutham <sgoutham@marvell.com>
Added maintainers entry for Marvell OcteonTX2 SOC's RVU
admin function driver.
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
---
MAINTAINERS | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index bb5f431..eee6151 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8844,6 +8844,15 @@ S: Supported
F: drivers/mmc/host/sdhci-xenon*
F: Documentation/devicetree/bindings/mmc/marvell,xenon-sdhci.txt
+MARVELL OCTEONTX2 RVU ADMIN FUNCTION DRIVER
+M: Sunil Goutham <sgoutham@marvell.com>
+M: Linu Cherian <lcherian@marvell.com>
+M: Geetha sowjanya <gakula@marvell.com>
+M: Jerin Jacob <jerinj@marvell.com>
+L: netdev@vger.kernel.org
+S: Maintained
+F: drivers/net/ethernet/marvell/octeontx2/af
+
MATROX FRAMEBUFFER DRIVER
L: linux-fbdev@vger.kernel.org
S: Orphan
--
2.7.4
^ permalink raw reply related
* [PATCH v6 14/15] octeontx2-af: Register for CGX lmac events
From: sunil.kovvuri @ 2018-10-04 18:21 UTC (permalink / raw)
To: netdev, davem; +Cc: arnd, linux-soc, Linu Cherian, Sunil Goutham
In-Reply-To: <1538677318-5002-1-git-send-email-sunil.kovvuri@gmail.com>
From: Linu Cherian <lcherian@marvell.com>
Added support in RVU AF driver to register for
CGX LMAC link status change events from firmware
and managing them. Processing part will be added
in followup patches.
- Introduced eventqueue for posting events from cgx lmac.
Queueing mechanism will ensure that events can be posted
and firmware can be acked immediately and hence event
reception and processing are decoupled.
- Events gets added to the queue by notification callback.
Notification callback is expected to be atomic, since it
is called from interrupt context.
- Events are dequeued and processed in a worker thread.
Signed-off-by: Linu Cherian <lcherian@marvell.com>
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
---
drivers/net/ethernet/marvell/octeontx2/af/rvu.c | 6 +-
drivers/net/ethernet/marvell/octeontx2/af/rvu.h | 5 +
.../net/ethernet/marvell/octeontx2/af/rvu_cgx.c | 101 ++++++++++++++++++++-
3 files changed, 108 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu.c
index b363d19..adc7fc6 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu.c
@@ -1564,10 +1564,11 @@ static int rvu_probe(struct pci_dev *pdev, const struct pci_device_id *id)
err = rvu_register_interrupts(rvu);
if (err)
- goto err_mbox;
+ goto err_cgx;
return 0;
-
+err_cgx:
+ rvu_cgx_wq_destroy(rvu);
err_mbox:
rvu_mbox_destroy(rvu);
err_hwsetup:
@@ -1589,6 +1590,7 @@ static void rvu_remove(struct pci_dev *pdev)
struct rvu *rvu = pci_get_drvdata(pdev);
rvu_unregister_interrupts(rvu);
+ rvu_cgx_wq_destroy(rvu);
rvu_mbox_destroy(rvu);
rvu_reset_all_blocks(rvu);
rvu_free_hw_resources(rvu);
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu.h b/drivers/net/ethernet/marvell/octeontx2/af/rvu.h
index 385f597..d169fa9 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu.h
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu.h
@@ -110,6 +110,10 @@ struct rvu {
* every cgx lmac port
*/
void **cgx_idmap; /* cgx id to cgx data map table */
+ struct work_struct cgx_evh_work;
+ struct workqueue_struct *cgx_evh_wq;
+ spinlock_t cgx_evq_lock; /* cgx event queue lock */
+ struct list_head cgx_evq_head; /* cgx event queue head */
};
static inline void rvu_write64(struct rvu *rvu, u64 block, u64 offset, u64 val)
@@ -150,4 +154,5 @@ int rvu_poll_reg(struct rvu *rvu, u64 block, u64 offset, u64 mask, bool zero);
/* CGX APIs */
int rvu_cgx_probe(struct rvu *rvu);
+void rvu_cgx_wq_destroy(struct rvu *rvu);
#endif /* RVU_H */
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
index bf81507..2359806e 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
@@ -15,6 +15,11 @@
#include "rvu.h"
#include "cgx.h"
+struct cgx_evq_entry {
+ struct list_head evq_node;
+ struct cgx_link_event link_event;
+};
+
static inline u8 cgxlmac_id_to_bmap(u8 cgx_id, u8 lmac_id)
{
return ((cgx_id & 0xF) << 4) | (lmac_id & 0xF);
@@ -72,9 +77,95 @@ static int rvu_map_cgx_lmac_pf(struct rvu *rvu)
return 0;
}
+/* This is called from interrupt context and is expected to be atomic */
+static int cgx_lmac_postevent(struct cgx_link_event *event, void *data)
+{
+ struct rvu *rvu = data;
+ struct cgx_evq_entry *qentry;
+
+ /* post event to the event queue */
+ qentry = kmalloc(sizeof(*qentry), GFP_ATOMIC);
+ if (!qentry)
+ return -ENOMEM;
+ qentry->link_event = *event;
+ spin_lock(&rvu->cgx_evq_lock);
+ list_add_tail(&qentry->evq_node, &rvu->cgx_evq_head);
+ spin_unlock(&rvu->cgx_evq_lock);
+
+ /* start worker to process the events */
+ queue_work(rvu->cgx_evh_wq, &rvu->cgx_evh_work);
+
+ return 0;
+}
+
+static void cgx_evhandler_task(struct work_struct *work)
+{
+ struct rvu *rvu = container_of(work, struct rvu, cgx_evh_work);
+ struct cgx_evq_entry *qentry;
+ struct cgx_link_event *event;
+ unsigned long flags;
+
+ do {
+ /* Dequeue an event */
+ spin_lock_irqsave(&rvu->cgx_evq_lock, flags);
+ qentry = list_first_entry_or_null(&rvu->cgx_evq_head,
+ struct cgx_evq_entry,
+ evq_node);
+ if (qentry)
+ list_del(&qentry->evq_node);
+ spin_unlock_irqrestore(&rvu->cgx_evq_lock, flags);
+ if (!qentry)
+ break; /* nothing more to process */
+
+ event = &qentry->link_event;
+
+ /* Do nothing for now */
+ kfree(qentry);
+ } while (1);
+}
+
+static void cgx_lmac_event_handler_init(struct rvu *rvu)
+{
+ struct cgx_event_cb cb;
+ int cgx, lmac, err;
+ void *cgxd;
+
+ spin_lock_init(&rvu->cgx_evq_lock);
+ INIT_LIST_HEAD(&rvu->cgx_evq_head);
+ INIT_WORK(&rvu->cgx_evh_work, cgx_evhandler_task);
+ rvu->cgx_evh_wq = alloc_workqueue("rvu_evh_wq", 0, 0);
+ if (!rvu->cgx_evh_wq) {
+ dev_err(rvu->dev, "alloc workqueue failed");
+ return;
+ }
+
+ cb.notify_link_chg = cgx_lmac_postevent; /* link change call back */
+ cb.data = rvu;
+
+ for (cgx = 0; cgx < rvu->cgx_cnt; cgx++) {
+ cgxd = rvu_cgx_pdata(cgx, rvu);
+ for (lmac = 0; lmac < cgx_get_lmac_cnt(cgxd); lmac++) {
+ err = cgx_lmac_evh_register(&cb, cgxd, lmac);
+ if (err)
+ dev_err(rvu->dev,
+ "%d:%d handler register failed\n",
+ cgx, lmac);
+ }
+ }
+}
+
+void rvu_cgx_wq_destroy(struct rvu *rvu)
+{
+ if (rvu->cgx_evh_wq) {
+ flush_workqueue(rvu->cgx_evh_wq);
+ destroy_workqueue(rvu->cgx_evh_wq);
+ rvu->cgx_evh_wq = NULL;
+ }
+}
+
int rvu_cgx_probe(struct rvu *rvu)
{
- int i;
+ int i, err;
/* find available cgx ports */
rvu->cgx_cnt = cgx_get_cgx_cnt();
@@ -93,5 +184,11 @@ int rvu_cgx_probe(struct rvu *rvu)
rvu->cgx_idmap[i] = cgx_get_pdata(i);
/* Map CGX LMAC interfaces to RVU PFs */
- return rvu_map_cgx_lmac_pf(rvu);
+ err = rvu_map_cgx_lmac_pf(rvu);
+ if (err)
+ return err;
+
+ /* Register for CGX events */
+ cgx_lmac_event_handler_init(rvu);
+ return 0;
}
--
2.7.4
^ permalink raw reply related
* [PATCH v6 13/15] octeontx2-af: Add support for CGX link management
From: sunil.kovvuri @ 2018-10-04 18:21 UTC (permalink / raw)
To: netdev, davem; +Cc: arnd, linux-soc, Linu Cherian, Nithya Mani, Sunil Goutham
In-Reply-To: <1538677318-5002-1-git-send-email-sunil.kovvuri@gmail.com>
From: Linu Cherian <lcherian@marvell.com>
CGX LMAC initialization, link status polling etc is done
by low level secure firmware. For link management this patch
adds a interface or communication mechanism between firmware
and this kernel CGX driver.
- Firmware interface specification is defined in cgx_fw_if.h.
- Support to send/receive commands/events to/form firmware.
- events/commands implemented
* link up
* link down
* reading firmware version
Signed-off-by: Linu Cherian <lcherian@marvell.com>
Signed-off-by: Nithya Mani <nmani@marvell.com>
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
---
drivers/net/ethernet/marvell/octeontx2/af/cgx.c | 353 ++++++++++++++++++++-
drivers/net/ethernet/marvell/octeontx2/af/cgx.h | 32 ++
.../net/ethernet/marvell/octeontx2/af/cgx_fw_if.h | 187 +++++++++++
.../net/ethernet/marvell/octeontx2/af/rvu_cgx.c | 97 ++++++
4 files changed, 665 insertions(+), 4 deletions(-)
create mode 100644 drivers/net/ethernet/marvell/octeontx2/af/cgx_fw_if.h
create mode 100644 drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cgx.c b/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
index f7a48bd..1b9702e 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
+++ b/drivers/net/ethernet/marvell/octeontx2/af/cgx.c
@@ -24,16 +24,43 @@
#define DRV_NAME "octeontx2-cgx"
#define DRV_STRING "Marvell OcteonTX2 CGX/MAC Driver"
+/**
+ * struct lmac
+ * @wq_cmd_cmplt: waitq to keep the process blocked until cmd completion
+ * @cmd_lock: Lock to serialize the command interface
+ * @resp: command response
+ * @event_cb: callback for linkchange events
+ * @cmd_pend: flag set before new command is started
+ * flag cleared after command response is received
+ * @cgx: parent cgx port
+ * @lmac_id: lmac port id
+ * @name: lmac port name
+ */
+struct lmac {
+ wait_queue_head_t wq_cmd_cmplt;
+ struct mutex cmd_lock;
+ u64 resp;
+ struct cgx_event_cb event_cb;
+ bool cmd_pend;
+ struct cgx *cgx;
+ u8 lmac_id;
+ char *name;
+};
+
struct cgx {
void __iomem *reg_base;
struct pci_dev *pdev;
u8 cgx_id;
u8 lmac_count;
+ struct lmac *lmac_idmap[MAX_LMAC_PER_CGX];
struct list_head cgx_list;
};
static LIST_HEAD(cgx_list);
+/* CGX PHY management internal APIs */
+static int cgx_fwi_link_change(struct cgx *cgx, int lmac_id, bool en);
+
/* Supported devices */
static const struct pci_device_id cgx_id_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_CAVIUM, PCI_DEVID_OCTEONTX2_CGX) },
@@ -42,11 +69,24 @@ static const struct pci_device_id cgx_id_table[] = {
MODULE_DEVICE_TABLE(pci, cgx_id_table);
+static void cgx_write(struct cgx *cgx, u64 lmac, u64 offset, u64 val)
+{
+ writeq(val, cgx->reg_base + (lmac << 18) + offset);
+}
+
static u64 cgx_read(struct cgx *cgx, u64 lmac, u64 offset)
{
return readq(cgx->reg_base + (lmac << 18) + offset);
}
+static inline struct lmac *lmac_pdata(u8 lmac_id, struct cgx *cgx)
+{
+ if (!cgx || lmac_id >= MAX_LMAC_PER_CGX)
+ return NULL;
+
+ return cgx->lmac_idmap[lmac_id];
+}
+
int cgx_get_cgx_cnt(void)
{
struct cgx *cgx_dev;
@@ -82,18 +122,308 @@ void *cgx_get_pdata(int cgx_id)
}
EXPORT_SYMBOL(cgx_get_pdata);
-static void cgx_lmac_init(struct cgx *cgx)
+/* CGX Firmware interface low level support */
+static int cgx_fwi_cmd_send(u64 req, u64 *resp, struct lmac *lmac)
{
+ struct cgx *cgx = lmac->cgx;
+ struct device *dev;
+ u64 cmd;
+ int err = 0;
+
+ /* Ensure no other command is in progress */
+ err = mutex_lock_interruptible(&lmac->cmd_lock);
+ if (err)
+ return err;
+
+ /* Ensure command register is free */
+ cmd = cgx_read(cgx, lmac->lmac_id, CGX_COMMAND_REG);
+ if (FIELD_GET(CMDREG_OWN, cmd) != CGX_CMD_OWN_NS) {
+ err = -EBUSY;
+ goto unlock;
+ }
+
+ /* Update ownership in command request */
+ req = FIELD_SET(CMDREG_OWN, CGX_CMD_OWN_FIRMWARE, req);
+
+ /* Mark this lmac as pending, before we start */
+ lmac->cmd_pend = true;
+
+ /* Start command in hardware */
+ cgx_write(cgx, lmac->lmac_id, CGX_COMMAND_REG, req);
+
+ /* Ensure command is completed without errors */
+ if (!wait_event_timeout(lmac->wq_cmd_cmplt, !lmac->cmd_pend,
+ msecs_to_jiffies(CGX_CMD_TIMEOUT))) {
+ dev = &cgx->pdev->dev;
+ dev_err(dev, "cgx port %d:%d cmd timeout\n",
+ cgx->cgx_id, lmac->lmac_id);
+ err = -EIO;
+ goto unlock;
+ }
+
+ /* we have a valid command response */
+ smp_rmb(); /* Ensure the latest updates are visible */
+ *resp = lmac->resp;
+
+unlock:
+ mutex_unlock(&lmac->cmd_lock);
+
+ return err;
+}
+
+static inline int cgx_fwi_cmd_generic(u64 req, u64 *resp,
+ struct cgx *cgx, int lmac_id)
+{
+ struct lmac *lmac;
+ int err;
+
+ lmac = lmac_pdata(lmac_id, cgx);
+ if (!lmac)
+ return -ENODEV;
+
+ err = cgx_fwi_cmd_send(req, resp, lmac);
+
+ /* Check for valid response */
+ if (!err) {
+ if (FIELD_GET(EVTREG_STAT, *resp) == CGX_STAT_FAIL)
+ return -EIO;
+ else
+ return 0;
+ }
+
+ return err;
+}
+
+/* Hardware event handlers */
+static inline void cgx_link_change_handler(u64 lstat,
+ struct lmac *lmac)
+{
+ struct cgx *cgx = lmac->cgx;
+ struct cgx_link_event event;
+ struct device *dev = &cgx->pdev->dev;
+
+ event.lstat.link_up = FIELD_GET(RESP_LINKSTAT_UP, lstat);
+ event.lstat.full_duplex = FIELD_GET(RESP_LINKSTAT_FDUPLEX, lstat);
+ event.lstat.speed = FIELD_GET(RESP_LINKSTAT_SPEED, lstat);
+ event.lstat.err_type = FIELD_GET(RESP_LINKSTAT_ERRTYPE, lstat);
+
+ event.cgx_id = cgx->cgx_id;
+ event.lmac_id = lmac->lmac_id;
+
+ if (!lmac->event_cb.notify_link_chg) {
+ dev_dbg(dev, "cgx port %d:%d Link change handler null",
+ cgx->cgx_id, lmac->lmac_id);
+ if (event.lstat.err_type != CGX_ERR_NONE) {
+ dev_err(dev, "cgx port %d:%d Link error %d\n",
+ cgx->cgx_id, lmac->lmac_id,
+ event.lstat.err_type);
+ }
+ dev_info(dev, "cgx port %d:%d Link status %s, speed %x\n",
+ cgx->cgx_id, lmac->lmac_id,
+ event.lstat.link_up ? "UP" : "DOWN",
+ event.lstat.speed);
+ return;
+ }
+
+ if (lmac->event_cb.notify_link_chg(&event, lmac->event_cb.data))
+ dev_err(dev, "event notification failure\n");
+}
+
+static inline bool cgx_cmdresp_is_linkevent(u64 event)
+{
+ u8 id;
+
+ id = FIELD_GET(EVTREG_ID, event);
+ if (id == CGX_CMD_LINK_BRING_UP ||
+ id == CGX_CMD_LINK_BRING_DOWN)
+ return true;
+ else
+ return false;
+}
+
+static inline bool cgx_event_is_linkevent(u64 event)
+{
+ if (FIELD_GET(EVTREG_ID, event) == CGX_EVT_LINK_CHANGE)
+ return true;
+ else
+ return false;
+}
+
+static irqreturn_t cgx_fwi_event_handler(int irq, void *data)
+{
+ struct lmac *lmac = data;
+ struct cgx *cgx = lmac->cgx;
+ struct device *dev;
+ u64 event;
+
+ event = cgx_read(cgx, lmac->lmac_id, CGX_EVENT_REG);
+
+ if (!FIELD_GET(EVTREG_ACK, event))
+ return IRQ_NONE;
+
+ dev = &cgx->pdev->dev;
+
+ switch (FIELD_GET(EVTREG_EVT_TYPE, event)) {
+ case CGX_EVT_CMD_RESP:
+ /* Copy the response. Since only one command is active at a
+ * time, there is no way a response can get overwritten
+ */
+ lmac->resp = event;
+ /* Ensure response is updated before thread context starts */
+ smp_wmb();
+
+ /* There wont be separate events for link change initiated from
+ * software; Hence report the command responses as events
+ */
+ if (cgx_cmdresp_is_linkevent(event))
+ cgx_link_change_handler(event, lmac);
+
+ /* Release thread waiting for completion */
+ lmac->cmd_pend = false;
+ wake_up_interruptible(&lmac->wq_cmd_cmplt);
+ break;
+ case CGX_EVT_ASYNC:
+ if (cgx_event_is_linkevent(event))
+ cgx_link_change_handler(event, lmac);
+ break;
+ }
+
+ /* Any new event or command response will be posted by firmware
+ * only after the current status is acked.
+ * Ack the interrupt register as well.
+ */
+ cgx_write(lmac->cgx, lmac->lmac_id, CGX_EVENT_REG, 0);
+ cgx_write(lmac->cgx, lmac->lmac_id, CGXX_CMRX_INT, FW_CGX_INT);
+
+ return IRQ_HANDLED;
+}
+
+/* APIs for PHY management using CGX firmware interface */
+
+/* callback registration for hardware events like link change */
+int cgx_lmac_evh_register(struct cgx_event_cb *cb, void *cgxd, int lmac_id)
+{
+ struct lmac *lmac;
+ struct cgx *cgx = cgxd;
+
+ lmac = lmac_pdata(lmac_id, cgx);
+ if (!lmac)
+ return -ENODEV;
+
+ lmac->event_cb = *cb;
+
+ return 0;
+}
+EXPORT_SYMBOL(cgx_lmac_evh_register);
+
+static int cgx_fwi_link_change(struct cgx *cgx, int lmac_id, bool enable)
+{
+ u64 req = 0;
+ u64 resp;
+
+ if (enable)
+ req = FIELD_SET(CMDREG_ID, CGX_CMD_LINK_BRING_UP, req);
+ else
+ req = FIELD_SET(CMDREG_ID, CGX_CMD_LINK_BRING_DOWN, req);
+
+ return cgx_fwi_cmd_generic(req, &resp, cgx, lmac_id);
+}
+EXPORT_SYMBOL(cgx_fwi_link_change);
+
+static inline int cgx_fwi_read_version(u64 *resp, struct cgx *cgx)
+{
+ u64 req = 0;
+
+ req = FIELD_SET(CMDREG_ID, CGX_CMD_GET_FW_VER, req);
+ return cgx_fwi_cmd_generic(req, resp, cgx, 0);
+}
+
+static int cgx_lmac_verify_fwi_version(struct cgx *cgx)
+{
+ struct device *dev = &cgx->pdev->dev;
+ int major_ver, minor_ver;
+ u64 resp;
+ int err;
+
+ if (!cgx->lmac_count)
+ return 0;
+
+ err = cgx_fwi_read_version(&resp, cgx);
+ if (err)
+ return err;
+
+ major_ver = FIELD_GET(RESP_MAJOR_VER, resp);
+ minor_ver = FIELD_GET(RESP_MINOR_VER, resp);
+ dev_dbg(dev, "Firmware command interface version = %d.%d\n",
+ major_ver, minor_ver);
+ if (major_ver != CGX_FIRMWARE_MAJOR_VER ||
+ minor_ver != CGX_FIRMWARE_MINOR_VER)
+ return -EIO;
+ else
+ return 0;
+}
+
+static int cgx_lmac_init(struct cgx *cgx)
+{
+ struct lmac *lmac;
+ int i, err;
+
cgx->lmac_count = cgx_read(cgx, 0, CGXX_CMRX_RX_LMACS) & 0x7;
if (cgx->lmac_count > MAX_LMAC_PER_CGX)
cgx->lmac_count = MAX_LMAC_PER_CGX;
+
+ for (i = 0; i < cgx->lmac_count; i++) {
+ lmac = kcalloc(1, sizeof(struct lmac), GFP_KERNEL);
+ if (!lmac)
+ return -ENOMEM;
+ lmac->name = kcalloc(1, sizeof("cgx_fwi_xxx_yyy"), GFP_KERNEL);
+ if (!lmac->name)
+ return -ENOMEM;
+ sprintf(lmac->name, "cgx_fwi_%d_%d", cgx->cgx_id, i);
+ lmac->lmac_id = i;
+ lmac->cgx = cgx;
+ init_waitqueue_head(&lmac->wq_cmd_cmplt);
+ mutex_init(&lmac->cmd_lock);
+ err = request_irq(pci_irq_vector(cgx->pdev,
+ CGX_LMAC_FWI + i * 9),
+ cgx_fwi_event_handler, 0, lmac->name, lmac);
+ if (err)
+ return err;
+
+ /* Enable interrupt */
+ cgx_write(cgx, lmac->lmac_id, CGXX_CMRX_INT_ENA_W1S,
+ FW_CGX_INT);
+
+ /* Add reference */
+ cgx->lmac_idmap[i] = lmac;
+ }
+
+ return cgx_lmac_verify_fwi_version(cgx);
+}
+
+static int cgx_lmac_exit(struct cgx *cgx)
+{
+ struct lmac *lmac;
+ int i;
+
+ /* Free all lmac related resources */
+ for (i = 0; i < cgx->lmac_count; i++) {
+ lmac = cgx->lmac_idmap[i];
+ if (!lmac)
+ continue;
+ free_irq(pci_irq_vector(cgx->pdev, CGX_LMAC_FWI + i * 9), lmac);
+ kfree(lmac->name);
+ kfree(lmac);
+ }
+
+ return 0;
}
static int cgx_probe(struct pci_dev *pdev, const struct pci_device_id *id)
{
- int err;
struct device *dev = &pdev->dev;
struct cgx *cgx;
+ int err, nvec;
cgx = devm_kzalloc(dev, sizeof(*cgx), GFP_KERNEL);
if (!cgx)
@@ -123,14 +453,27 @@ static int cgx_probe(struct pci_dev *pdev, const struct pci_device_id *id)
goto err_release_regions;
}
+ nvec = CGX_NVEC;
+ err = pci_alloc_irq_vectors(pdev, nvec, nvec, PCI_IRQ_MSIX);
+ if (err < 0 || err != nvec) {
+ dev_err(dev, "Request for %d msix vectors failed, err %d\n",
+ nvec, err);
+ goto err_release_regions;
+ }
+
list_add(&cgx->cgx_list, &cgx_list);
cgx->cgx_id = cgx_get_cgx_cnt() - 1;
- cgx_lmac_init(cgx);
+
+ err = cgx_lmac_init(cgx);
+ if (err)
+ goto err_release_lmac;
return 0;
-err_release_regions:
+err_release_lmac:
+ cgx_lmac_exit(cgx);
list_del(&cgx->cgx_list);
+err_release_regions:
pci_release_regions(pdev);
err_disable_device:
pci_disable_device(pdev);
@@ -142,7 +485,9 @@ static void cgx_remove(struct pci_dev *pdev)
{
struct cgx *cgx = pci_get_drvdata(pdev);
+ cgx_lmac_exit(cgx);
list_del(&cgx->cgx_list);
+ pci_free_irq_vectors(pdev);
pci_release_regions(pdev);
pci_disable_device(pdev);
pci_set_drvdata(pdev, NULL);
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cgx.h b/drivers/net/ethernet/marvell/octeontx2/af/cgx.h
index acdc16e..a2a7a6d 100644
--- a/drivers/net/ethernet/marvell/octeontx2/af/cgx.h
+++ b/drivers/net/ethernet/marvell/octeontx2/af/cgx.h
@@ -11,6 +11,8 @@
#ifndef CGX_H
#define CGX_H
+#include "cgx_fw_if.h"
+
/* PCI device IDs */
#define PCI_DEVID_OCTEONTX2_CGX 0xA059
@@ -22,12 +24,42 @@
#define CGX_OFFSET(x) ((x) * MAX_LMAC_PER_CGX)
/* Registers */
+#define CGXX_CMRX_INT 0x040
+#define FW_CGX_INT BIT_ULL(1)
+#define CGXX_CMRX_INT_ENA_W1S 0x058
#define CGXX_CMRX_RX_ID_MAP 0x060
#define CGXX_CMRX_RX_LMACS 0x128
+#define CGXX_SCRATCH0_REG 0x1050
+#define CGXX_SCRATCH1_REG 0x1058
+#define CGX_CONST 0x2000
+
+#define CGX_COMMAND_REG CGXX_SCRATCH1_REG
+#define CGX_EVENT_REG CGXX_SCRATCH0_REG
+#define CGX_CMD_TIMEOUT 2200 /* msecs */
+
+#define CGX_NVEC 37
+#define CGX_LMAC_FWI 0
+
+struct cgx_link_event {
+ struct cgx_lnk_sts lstat;
+ u8 cgx_id;
+ u8 lmac_id;
+};
+
+/**
+ * struct cgx_event_cb
+ * @notify_link_chg: callback for link change notification
+ * @data: data passed to callback function
+ */
+struct cgx_event_cb {
+ int (*notify_link_chg)(struct cgx_link_event *event, void *data);
+ void *data;
+};
extern struct pci_driver cgx_driver;
int cgx_get_cgx_cnt(void);
int cgx_get_lmac_cnt(void *cgxd);
void *cgx_get_pdata(int cgx_id);
+int cgx_lmac_evh_register(struct cgx_event_cb *cb, void *cgxd, int lmac_id);
#endif /* CGX_H */
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cgx_fw_if.h b/drivers/net/ethernet/marvell/octeontx2/af/cgx_fw_if.h
new file mode 100644
index 0000000..ef556bd
--- /dev/null
+++ b/drivers/net/ethernet/marvell/octeontx2/af/cgx_fw_if.h
@@ -0,0 +1,187 @@
+/* SPDX-License-Identifier: GPL-2.0
+ * Marvell OcteonTx2 CGX driver
+ *
+ * Copyright (C) 2018 Marvell International Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __CGX_FW_INTF_H__
+#define __CGX_FW_INTF_H__
+
+#include <linux/bitops.h>
+#include <linux/bitfield.h>
+
+#define CGX_FIRMWARE_MAJOR_VER 1
+#define CGX_FIRMWARE_MINOR_VER 0
+
+#define CGX_EVENT_ACK 1UL
+
+/* CGX error types. set for cmd response status as CGX_STAT_FAIL */
+enum cgx_error_type {
+ CGX_ERR_NONE,
+ CGX_ERR_LMAC_NOT_ENABLED,
+ CGX_ERR_LMAC_MODE_INVALID,
+ CGX_ERR_REQUEST_ID_INVALID,
+ CGX_ERR_PREV_ACK_NOT_CLEAR,
+ CGX_ERR_PHY_LINK_DOWN,
+ CGX_ERR_PCS_RESET_FAIL,
+ CGX_ERR_AN_CPT_FAIL,
+ CGX_ERR_TX_NOT_IDLE,
+ CGX_ERR_RX_NOT_IDLE,
+ CGX_ERR_SPUX_BR_BLKLOCK_FAIL,
+ CGX_ERR_SPUX_RX_ALIGN_FAIL,
+ CGX_ERR_SPUX_TX_FAULT,
+ CGX_ERR_SPUX_RX_FAULT,
+ CGX_ERR_SPUX_RESET_FAIL,
+ CGX_ERR_SPUX_AN_RESET_FAIL,
+ CGX_ERR_SPUX_USX_AN_RESET_FAIL,
+ CGX_ERR_SMUX_RX_LINK_NOT_OK,
+ CGX_ERR_PCS_RECV_LINK_FAIL,
+ CGX_ERR_TRAINING_FAIL,
+ CGX_ERR_RX_EQU_FAIL,
+ CGX_ERR_SPUX_BER_FAIL,
+ CGX_ERR_SPUX_RSFEC_ALGN_FAIL, /* = 22 */
+};
+
+/* LINK speed types */
+enum cgx_link_speed {
+ CGX_LINK_NONE,
+ CGX_LINK_10M,
+ CGX_LINK_100M,
+ CGX_LINK_1G,
+ CGX_LINK_2HG,
+ CGX_LINK_5G,
+ CGX_LINK_10G,
+ CGX_LINK_20G,
+ CGX_LINK_25G,
+ CGX_LINK_40G,
+ CGX_LINK_50G,
+ CGX_LINK_100G,
+ CGX_LINK_SPEED_MAX,
+};
+
+/* REQUEST ID types. Input to firmware */
+enum cgx_cmd_id {
+ CGX_CMD_NONE,
+ CGX_CMD_GET_FW_VER,
+ CGX_CMD_GET_MAC_ADDR,
+ CGX_CMD_SET_MTU,
+ CGX_CMD_GET_LINK_STS, /* optional to user */
+ CGX_CMD_LINK_BRING_UP,
+ CGX_CMD_LINK_BRING_DOWN,
+ CGX_CMD_INTERNAL_LBK,
+ CGX_CMD_EXTERNAL_LBK,
+ CGX_CMD_HIGIG,
+ CGX_CMD_LINK_STATE_CHANGE,
+ CGX_CMD_MODE_CHANGE, /* hot plug support */
+ CGX_CMD_INTF_SHUTDOWN,
+ CGX_CMD_IRQ_ENABLE,
+ CGX_CMD_IRQ_DISABLE,
+};
+
+/* async event ids */
+enum cgx_evt_id {
+ CGX_EVT_NONE,
+ CGX_EVT_LINK_CHANGE,
+};
+
+/* event types - cause of interrupt */
+enum cgx_evt_type {
+ CGX_EVT_ASYNC,
+ CGX_EVT_CMD_RESP
+};
+
+enum cgx_stat {
+ CGX_STAT_SUCCESS,
+ CGX_STAT_FAIL
+};
+
+enum cgx_cmd_own {
+ CGX_CMD_OWN_NS,
+ CGX_CMD_OWN_FIRMWARE,
+};
+
+/* m - bit mask
+ * y - value to be written in the bitrange
+ * x - input value whose bitrange to be modified
+ */
+#define FIELD_SET(m, y, x) \
+ (((x) & ~(m)) | \
+ FIELD_PREP((m), (y)))
+
+/* scratchx(0) CSR used for ATF->non-secure SW communication.
+ * This acts as the status register
+ * Provides details on command ack/status, command response, error details
+ */
+#define EVTREG_ACK BIT_ULL(0)
+#define EVTREG_EVT_TYPE BIT_ULL(1)
+#define EVTREG_STAT BIT_ULL(2)
+#define EVTREG_ID GENMASK_ULL(8, 3)
+
+/* Response to command IDs with command status as CGX_STAT_FAIL
+ *
+ * Not applicable for commands :
+ * CGX_CMD_LINK_BRING_UP/DOWN/CGX_EVT_LINK_CHANGE
+ */
+#define EVTREG_ERRTYPE GENMASK_ULL(18, 9)
+
+/* Response to cmd ID as CGX_CMD_GET_FW_VER with cmd status as
+ * CGX_STAT_SUCCESS
+ */
+#define RESP_MAJOR_VER GENMASK_ULL(12, 9)
+#define RESP_MINOR_VER GENMASK_ULL(16, 13)
+
+/* Response to cmd ID as CGX_CMD_GET_MAC_ADDR with cmd status as
+ * CGX_STAT_SUCCESS
+ */
+#define RESP_MAC_ADDR GENMASK_ULL(56, 9)
+
+/* Response to cmd ID - CGX_CMD_LINK_BRING_UP/DOWN, event ID CGX_EVT_LINK_CHANGE
+ * status can be either CGX_STAT_FAIL or CGX_STAT_SUCCESS
+ *
+ * In case of CGX_STAT_FAIL, it indicates CGX configuration failed
+ * when processing link up/down/change command.
+ * Both err_type and current link status will be updated
+ *
+ * In case of CGX_STAT_SUCCESS, err_type will be CGX_ERR_NONE and current
+ * link status will be updated
+ */
+struct cgx_lnk_sts {
+ uint64_t reserved1:9;
+ uint64_t link_up:1;
+ uint64_t full_duplex:1;
+ uint64_t speed:4; /* cgx_link_speed */
+ uint64_t err_type:10;
+ uint64_t reserved2:39;
+};
+
+#define RESP_LINKSTAT_UP GENMASK_ULL(9, 9)
+#define RESP_LINKSTAT_FDUPLEX GENMASK_ULL(10, 10)
+#define RESP_LINKSTAT_SPEED GENMASK_ULL(14, 11)
+#define RESP_LINKSTAT_ERRTYPE GENMASK_ULL(24, 15)
+
+
+/* scratchx(1) CSR used for non-secure SW->ATF communication
+ * This CSR acts as a command register
+ */
+#define CMDREG_OWN BIT_ULL(0)
+#define CMDREG_ID GENMASK_ULL(7, 2)
+
+/* Any command using enable/disable as an argument need
+ * to set this bitfield.
+ * Ex: Loopback, HiGig...
+ */
+#define CMDREG_ENABLE BIT_ULL(8)
+
+/* command argument to be passed for cmd ID - CGX_CMD_SET_MTU */
+#define CMDMTU_SIZE GENMASK_ULL(23, 8)
+
+/* command argument to be passed for cmd ID - CGX_CMD_LINK_CHANGE */
+#define CMDLINKCHANGE_LINKUP BIT_ULL(8)
+#define CMDLINKCHANGE_FULLDPLX BIT_ULL(9)
+#define CMDLINKCHANGE_SPEED GENMASK_ULL(13, 10)
+
+#endif /* __CGX_FW_INTF_H__ */
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
new file mode 100644
index 0000000..bf81507
--- /dev/null
+++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c
@@ -0,0 +1,97 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Marvell OcteonTx2 RVU Admin Function driver
+ *
+ * Copyright (C) 2018 Marvell International Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+
+#include "rvu.h"
+#include "cgx.h"
+
+static inline u8 cgxlmac_id_to_bmap(u8 cgx_id, u8 lmac_id)
+{
+ return ((cgx_id & 0xF) << 4) | (lmac_id & 0xF);
+}
+
+static void *rvu_cgx_pdata(u8 cgx_id, struct rvu *rvu)
+{
+ if (cgx_id >= rvu->cgx_cnt)
+ return NULL;
+
+ return rvu->cgx_idmap[cgx_id];
+}
+
+static int rvu_map_cgx_lmac_pf(struct rvu *rvu)
+{
+ int cgx_cnt = rvu->cgx_cnt;
+ int cgx, lmac_cnt, lmac;
+ int pf = PF_CGXMAP_BASE;
+ int size;
+
+ if (!cgx_cnt)
+ return 0;
+
+ if (cgx_cnt > 0xF || MAX_LMAC_PER_CGX > 0xF)
+ return -EINVAL;
+
+ /* Alloc map table
+ * An additional entry is required since PF id starts from 1 and
+ * hence entry at offset 0 is invalid.
+ */
+ size = (cgx_cnt * MAX_LMAC_PER_CGX + 1) * sizeof(u8);
+ rvu->pf2cgxlmac_map = devm_kzalloc(rvu->dev, size, GFP_KERNEL);
+ if (!rvu->pf2cgxlmac_map)
+ return -ENOMEM;
+
+ /* Initialize offset 0 with an invalid cgx and lmac id */
+ rvu->pf2cgxlmac_map[0] = 0xFF;
+
+ /* Reverse map table */
+ rvu->cgxlmac2pf_map = devm_kzalloc(rvu->dev,
+ cgx_cnt * MAX_LMAC_PER_CGX * sizeof(u16),
+ GFP_KERNEL);
+ if (!rvu->cgxlmac2pf_map)
+ return -ENOMEM;
+
+ rvu->cgx_mapped_pfs = 0;
+ for (cgx = 0; cgx < cgx_cnt; cgx++) {
+ lmac_cnt = cgx_get_lmac_cnt(rvu_cgx_pdata(cgx, rvu));
+ for (lmac = 0; lmac < lmac_cnt; lmac++, pf++) {
+ rvu->pf2cgxlmac_map[pf] = cgxlmac_id_to_bmap(cgx, lmac);
+ rvu->cgxlmac2pf_map[CGX_OFFSET(cgx) + lmac] = 1 << pf;
+ rvu->cgx_mapped_pfs++;
+ }
+ }
+ return 0;
+}
+
+int rvu_cgx_probe(struct rvu *rvu)
+{
+ int i;
+
+ /* find available cgx ports */
+ rvu->cgx_cnt = cgx_get_cgx_cnt();
+ if (!rvu->cgx_cnt) {
+ dev_info(rvu->dev, "No CGX devices found!\n");
+ return -ENODEV;
+ }
+
+ rvu->cgx_idmap = devm_kzalloc(rvu->dev, rvu->cgx_cnt * sizeof(void *),
+ GFP_KERNEL);
+ if (!rvu->cgx_idmap)
+ return -ENOMEM;
+
+ /* Initialize the cgxdata table */
+ for (i = 0; i < rvu->cgx_cnt; i++)
+ rvu->cgx_idmap[i] = cgx_get_pdata(i);
+
+ /* Map CGX LMAC interfaces to RVU PFs */
+ return rvu_map_cgx_lmac_pf(rvu);
+}
--
2.7.4
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox