* [PATCH 2/3] net: qca_spi: Make sure the QCA7000 reset is triggered
From: Stefan Wahren @ 2018-07-18 6:31 UTC (permalink / raw)
To: David S. Miller; +Cc: netdev, linux-kernel, Stefan Wahren
In-Reply-To: <1531895505-26971-1-git-send-email-stefan.wahren@i2se.com>
In case the SPI thread is not running, a simple reset of sync
state won't fix the transmit timeout. We also need to wake up the kernel
thread.
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Fixes: ed7d42e24eff ("net: qca_spi: fix transmit queue timeout handling")
---
drivers/net/ethernet/qualcomm/qca_spi.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/ethernet/qualcomm/qca_spi.c b/drivers/net/ethernet/qualcomm/qca_spi.c
index 7db149f..7fa815d 100644
--- a/drivers/net/ethernet/qualcomm/qca_spi.c
+++ b/drivers/net/ethernet/qualcomm/qca_spi.c
@@ -760,6 +760,9 @@ qcaspi_netdev_tx_timeout(struct net_device *dev)
qca->net_dev->stats.tx_errors++;
/* Trigger tx queue flush and QCA7000 reset */
qca->sync = QCASPI_SYNC_UNKNOWN;
+
+ if (qca->spi_thread)
+ wake_up_process(qca->spi_thread);
}
static int
--
2.7.4
^ permalink raw reply related
* [PATCH 1/3] net: qca_spi: Avoid packet drop during initial sync
From: Stefan Wahren @ 2018-07-18 6:31 UTC (permalink / raw)
To: David S. Miller; +Cc: netdev, linux-kernel, Stefan Wahren
In-Reply-To: <1531895505-26971-1-git-send-email-stefan.wahren@i2se.com>
As long as the synchronization with the QCA7000 isn't finished, we
cannot accept packets from the upper layers. So let the SPI thread
enable the TX queue after sync and avoid unwanted packet drop.
Signed-off-by: Stefan Wahren <stefan.wahren@i2se.com>
Fixes: 291ab06ecf67 ("net: qualcomm: new Ethernet over SPI driver for QCA7000")
---
drivers/net/ethernet/qualcomm/qca_spi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/qualcomm/qca_spi.c b/drivers/net/ethernet/qualcomm/qca_spi.c
index 5803cd6..7db149f 100644
--- a/drivers/net/ethernet/qualcomm/qca_spi.c
+++ b/drivers/net/ethernet/qualcomm/qca_spi.c
@@ -658,7 +658,7 @@ qcaspi_netdev_open(struct net_device *dev)
return ret;
}
- netif_start_queue(qca->net_dev);
+ /* SPI thread takes care of TX queue */
return 0;
}
--
2.7.4
^ permalink raw reply related
* [PATCH 0/3] net: qca_spi: Minor bugfixes
From: Stefan Wahren @ 2018-07-18 6:31 UTC (permalink / raw)
To: David S. Miller; +Cc: netdev, linux-kernel, Stefan Wahren
This patch series contains some minor bugfixes for
the qca_spi driver.
Stefan Wahren (3):
net: qca_spi: Avoid packet drop during initial sync
net: qca_spi: Make sure the QCA7000 reset is triggered
net: qca_spi: Fix log level if probe fails
drivers/net/ethernet/qualcomm/qca_spi.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
--
2.7.4
^ permalink raw reply
* Re: [PATCH 0/7] pull request for net-next: batman-adv 2018-07-17
From: David Miller @ 2018-07-18 5:47 UTC (permalink / raw)
To: sw; +Cc: netdev, b.a.t.m.a.n
In-Reply-To: <20180717152649.32282-1-sw@simonwunderlich.de>
From: Simon Wunderlich <sw@simonwunderlich.de>
Date: Tue, 17 Jul 2018 17:26:42 +0200
> here is a little cleanup pull request of batman-adv to go into net-next.
>
> Please pull or let me know of any problem!
Pulled, thank you.
^ permalink raw reply
* Re: [PATCH 0/3] ravb: small sparse fixes
From: David Miller @ 2018-07-18 5:22 UTC (permalink / raw)
To: niklas.soderlund+renesas; +Cc: sergei.shtylyov, netdev, linux-renesas-soc
In-Reply-To: <20180716121927.21918-1-niklas.soderlund+renesas@ragnatech.se>
From: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Date: Mon, 16 Jul 2018 14:19:24 +0200
> This are fixes that have bugged me whenever I run sparse to check my own
> changes to the driver. It's based on the latest net-next tree and tested
> on M3-N.
Series applied, thanks Niklas.
^ permalink raw reply
* Re: [V9fs-developer] [PATCH] p9_parse_header() validate PDU length
From: Dominique Martinet @ 2018-07-18 5:08 UTC (permalink / raw)
To: Tomas Bortoli
Cc: ericvh, rminnich, lucho, viro, davem, v9fs-developer, netdev,
linux-kernel, syzkaller, Andrew Morton
In-Reply-To: <fed36388-4e18-49f4-ec26-2b6b3d08ef54@gmail.com>
Tomas Bortoli wrote on Thu, Jul 12, 2018:
> + Cc: Andrew Morton <akpm@linux-foundation.org>
>
> On 07/12/2018 01:43 PM, Dominique Martinet wrote:
> > Tomas Bortoli wrote on Thu, Jul 12, 2018:
> >> This patch adds checks to the p9_parse_header() function to
> >> verify that the length found within the header coincides with the actual
> >> length of the PDU. Furthermore, it checks that the length stays within the
> >> acceptable range. To do this the patch brings the actual length of the PDU
> >> from the different transport layers (rdma and virtio). For TCP (trans_fd.c)
> >> the length is not know before, so we get it from the header but we check it
> >> anyway that it's within the valid range.
>
> Still for TCP it you could read "garbage" pre-allocated memory but I
> don't know how much it is a risk, it might be a good idea to zero it
> post allocation (I mean pdu->sdata). Allocated at:
>
> https://github.com/torvalds/linux/blob/master/net/9p/client.c#L236
>
> > Just a note on transports here, I totally had forgotten about trans_xen
> > when we discussed this earlier as it is fairly new, but it looks like it
> > sets the length in the fcall properly so it should work without any
> > change.
> >
> > I however cannot test trans=xen, so if someone could either point me to
> > how to set that up (I couldn't find any decent documentation) or do some
> > very basic tests that would be great.
>
> >> Signed-off-by: Tomas Bortoli <tomasbortoli@gmail.com>
> >> Reported-by: syzbot+65c6b72f284a39d416b4@syzkaller.appspotmail.com
> > Looks good to me, as the rdma/virtio part come from my suggestion:
> > Signed-off-by: Dominique Martinet <dominique.martinet@cea.fr>
>
> True
> >
> >> diff --git a/net/9p/trans_rdma.c b/net/9p/trans_rdma.c
> >> index 3d414acb7015..002badbcc9c0 100644
> >> --- a/net/9p/trans_rdma.c
> >> +++ b/net/9p/trans_rdma.c
> >> @@ -319,7 +319,7 @@ recv_done(struct ib_cq *cq, struct ib_wc *wc)
> >>
> >> if (wc->status != IB_WC_SUCCESS)
> >> goto err_out;
> >> -
> >> + c->rc->size = wc->byte_len;
> > (nitpick, I'd keep the empty line here. If you don't mind I'll add it
> > back in my tree; this doesn't warrant a v2)
> >
>
> Sure,
>
> Tomas
>
^ permalink raw reply
* Re: [PATCH] net/rds: Remove unnecessary variable
From: David Miller @ 2018-07-18 5:44 UTC (permalink / raw)
To: Haakon.Bugge
Cc: santosh.shilimkar, netdev, linux-rdma, rds-devel, linux-kernel
In-Reply-To: <20180716130639.1591990-1-Haakon.Bugge@oracle.com>
From: Håkon Bugge <Haakon.Bugge@oracle.com>
Date: Mon, 16 Jul 2018 15:06:39 +0200
> Signed-off-by: Håkon Bugge <haakon.bugge@oracle.com>
Applied.
^ permalink raw reply
* Re: [PATCH] net/rds: void function cannot return -1
From: David Miller @ 2018-07-18 5:44 UTC (permalink / raw)
To: Haakon.Bugge
Cc: santosh.shilimkar, netdev, linux-rdma, rds-devel, linux-kernel
In-Reply-To: <20180716130009.1591379-1-Haakon.Bugge@oracle.com>
From: Håkon Bugge <Haakon.Bugge@oracle.com>
Date: Mon, 16 Jul 2018 15:00:09 +0200
> Commit b6fb0df12db6 ("RDS/IB: Make ib_recv_refill return void") did
> not change the comment accordingly.
>
> Fixes: b6fb0df12db6 ("RDS/IB: Make ib_recv_refill return void")
> Signed-off-by: Håkon Bugge <haakon.bugge@oracle.com>
Applied.
^ permalink raw reply
* Re: [PATCH v2] tcp: identify cryptic messages as TCP seq # bugs
From: Eric Dumazet @ 2018-07-18 5:03 UTC (permalink / raw)
To: Randy Dunlap, netdev@vger.kernel.org, Eric Dumazet, David Miller
Cc: 積丹尼 Dan Jacobson
In-Reply-To: <a492fbea-5d2f-7b47-8692-e852957d798b@infradead.org>
On 07/17/2018 06:27 PM, Randy Dunlap wrote:
> From: Randy Dunlap <rdunlap@infradead.org>
>
> Attempt to make cryptic TCP seq number error messages clearer by
> (1) identifying the source of the message as "TCP", (2) identifying the
> errors as "seq # bug", and (3) grouping the field identifiers and values
> by separating them with commas.
>
> E.g., the following message is changed from:
>
> recvmsg bug 2: copied 73BCB6CD seq 70F17CBE rcvnxt 73BCB9AA fl 0
> WARNING: CPU: 2 PID: 1501 at /linux/net/ipv4/tcp.c:1881 tcp_recvmsg+0x649/0xb90
>
> to:
>
> TCP recvmsg seq # bug 2: copied 73BCB6CD, seq 70F17CBE, rcvnxt 73BCB9AA, fl 0
> WARNING: CPU: 2 PID: 1501 at /linux/net/ipv4/tcp.c:2011 tcp_recvmsg+0x694/0xba0
>
> Suggested-by: 積丹尼 Dan Jacobson <jidanni@jidanni.org>
> Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
Thanks Randy
Signed-off-by: Eric Dumazet <edumazet@google.com>
^ permalink raw reply
* Re: [PATCH v2] datagram: return from __skb_recv_datagram() as soon as possible
From: David Miller @ 2018-07-18 5:15 UTC (permalink / raw)
To: willemdebruijn.kernel
Cc: baoyou.xie, willemb, viro, gregkh, pombredanne, tklauser, matthew,
netdev, linux-kernel
In-Reply-To: <CAF=yD-+N6BBcbKFo3B=FmVcp9VD+NUr2mfk-qkvtkVZYDhsRHQ@mail.gmail.com>
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: Mon, 16 Jul 2018 15:17:54 -0700
> If the above occurs, that implies that the queue is not empty so the
> next iteration of the loop in __skb_recv_datagram should return
> the oldest packet on the queue.
Isn't it possible, with two threads pulling from the socket in
parallel, for one of them to be constantly unable to pass that
test:
if (sk->sk_receive_queue.prev != skb)
goto out;
because the other one empties the queue too quickly every time?
We sample 'last' with the queue lock held, but the above test is done
without that lock.
^ permalink raw reply
* Re: [V9fs-developer] [PATCH] p9_parse_header() validate PDU length
From: Dominique Martinet @ 2018-07-18 5:13 UTC (permalink / raw)
To: Tomas Bortoli
Cc: ericvh, rminnich, lucho, viro, davem, v9fs-developer, netdev,
linux-kernel, syzkaller
In-Reply-To: <20180712110211.25535-1-tomasbortoli@gmail.com>
Tomas Bortoli wrote on Thu, Jul 12, 2018:
> This patch adds checks to the p9_parse_header() function to
> verify that the length found within the header coincides with the actual
> length of the PDU. Furthermore, it checks that the length stays within the
> acceptable range. To do this the patch brings the actual length of the PDU
> from the different transport layers (rdma and virtio). For TCP (trans_fd.c)
> the length is not know before, so we get it from the header but we check it
> anyway that it's within the valid range.
>
> Signed-off-by: Tomas Bortoli <tomasbortoli@gmail.com>
> Reported-by: syzbot+65c6b72f284a39d416b4@syzkaller.appspotmail.com
> ---
> [..]
> @@ -498,6 +489,21 @@ p9_parse_header(struct p9_fcall *pdu, int32_t *size, int8_t *type, int16_t *tag,
> if (size)
> *size = r_size;
>
> + if (pdu->size != r_size) {
> + err = -EINVAL;
> + goto rewind_and_exit;
> + }
> + if (pdu->size >= pdu->capacity || pdu->size < 7) {
> + p9_debug(P9_DEBUG_ERROR,
> + "requested packet size too big or too small: %d\n",
> + pdu->size);
> + return -EIO;
> + }
Actually, I've been bad advice - this breaks on virtio with zc packets -
a read or ls in a big directory fails with this in dmesg
[ 1006.853775] 9pnet: -- p9_parse_header (17123): requested packet size too big or too small: 4306
[ 1006.853780] 9pnet: -- p9_check_zc_errors (17123): couldn't parse header -5
I haven't given this any thought yet, but dropping the patch for now
--
Dominique
^ permalink raw reply
* Re: [PATCH] octeon_mgmt: Fix MIX registers configuration on MTU setup
From: David Miller @ 2018-07-18 4:13 UTC (permalink / raw)
To: alexander.sverdlin; +Cc: netdev, alexander.sverdlin, steven.hill
In-Reply-To: <20180713153150.2414-1-alexander.sverdlin@nokia.com>
From: Alexander Sverdlin <alexander.sverdlin@nokia.com>
Date: Fri, 13 Jul 2018 17:31:50 +0200
> From: Alexander Sverdlin <alexander.sverdlin@nsn.com>
>
> octeon_mgmt driver doesn't drop RX frames that are 1-4 bytes bigger than
> MTU set for the corresponding interface. The problem is in the
> AGL_GMX_RX0/1_FRM_MAX register setting, which should not account for VLAN
> tagging.
>
> According to Octeon HW manual:
> "For tagged frames, MAX increases by four bytes for each VLAN found up to a
> maximum of two VLANs, or MAX + 8 bytes."
>
> OCTEON_FRAME_HEADER_LEN "define" is fine for ring buffer management, but
> should not be used for AGL_GMX_RX0/1_FRM_MAX.
>
> The problem could be easily reproduced using "ping" command. If affected
> system has default MTU 1500, other host (having MTU >= 1504) can
> successfully "ping" the affected system with payload size 1473-1476,
> resulting in IP packets of size 1501-1504 accepted by the mgmt driver.
> Fixed system still accepts IP packets of 1500 bytes even with VLAN tagging,
> because the limits are lifted in HW as expected, for every VLAN tag.
>
> Signed-off-by: Alexander Sverdlin <alexander.sverdlin@nokia.com>
Applied, thank you.
^ permalink raw reply
* Re: [PATCH v2 net-next 0/7] Make /sys/class/net per net namespace objects belong to container
From: David Miller @ 2018-07-18 4:41 UTC (permalink / raw)
To: tyhicks
Cc: bridge, gregkh, containers, dmitry.torokhov, linux-kernel,
ebiederm, netdev, tj
In-Reply-To: <20180718.131734.1797450417729100374.davem@davemloft.net>
From: David Miller <davem@davemloft.net>
Date: Wed, 18 Jul 2018 13:17:34 +0900 (KST)
> Ok, I can't let this series rot forever, so I'll apply it to net-next.
Unfortunately, I had to revert, this breaks the build:
arch/x86/kernel/cpu/intel_rdt_rdtgroup.c:1506:7: error: too few arguments to function ‘__kernfs_create_file’
kn = __kernfs_create_file(parent_kn, name, 0444, 0,
^ permalink raw reply
* [PATCH 1/1] net-next/hinic: fix a problem in hinic_xmit_frame()
From: Zhao Chen @ 2018-07-18 4:33 UTC (permalink / raw)
To: davem
Cc: linux-kernel, netdev, aviad.krawczyk, zhaochen6, tony.qu,
yin.yinshi, luoshaokai
The calculation of "wqe_size" is not correct when the tx queue is busy in
hinic_xmit_frame().
When there are no free WQEs, the tx flow will unmap the skb buffer, then
ring the doobell for the pending packets. But the "wqe_size" which used
to calculate the doorbell address is not correct. The wqe size should be
cleared to 0, otherwise, it will cause a doorbell error.
This patch fixes the problem.
Reported-by: Zhou Wang <wangzhou1@hisilicon.com>
Signed-off-by: Zhao Chen <zhaochen6@huawei.com>
---
drivers/net/ethernet/huawei/hinic/hinic_tx.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_tx.c b/drivers/net/ethernet/huawei/hinic/hinic_tx.c
index 9128858479c4..2353ec829c04 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_tx.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_tx.c
@@ -229,6 +229,7 @@ netdev_tx_t hinic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
txq->txq_stats.tx_busy++;
u64_stats_update_end(&txq->txq_stats.syncp);
err = NETDEV_TX_BUSY;
+ wqe_size = 0;
goto flush_skbs;
}
--
2.17.0
^ permalink raw reply related
* [PATCH RFC bpf-next] bpf: per-register parent pointers
From: Alexei Starovoitov @ 2018-07-18 3:54 UTC (permalink / raw)
To: ecree; +Cc: davem, daniel, netdev
By giving each register its own liveness chain, we elide the skip_callee()
logic. Instead, each register's parent is the state it inherits from;
both check_func_call() and prepare_func_exit() automatically connect
reg states to the correct chain since when they copy the reg state across
(r1-r5 into the callee as args, and r0 out as the return value) they also
copy the parent pointer.
Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
---
Ed,
I've started analyzing this old patch and it looks great.
I'd like to apply it, but I see the difference in insn_processed.
Several cilium tests show favorable difference towards new liveness approach.
selftests/bpf/test_xdp_noinline.o also shows the difference.
I'm struggling to see why this patch would make such difference.
Could you please help me analyze why such difference exists?
In particular if you hack test_progs.c to run only test_xdp_noinline
with verifier log_level=1 you will see this delta:
-from 237 to 273: frame2: R0=inv1 R1=pkt(id=0,off=54,r=14,imm=0) R2=fp-95,call_13 R3=fp-94,call_13 R4=pkt(id=0,off=0,r=14,imm=0) R5=pkt_end(id=0,off=0,imm=0) R6=fp-56,call_13 R10=fp0,call_44
-273: (95) exit
-returning from callee:
- frame2: R0=inv1 R1=pkt(id=0,off=54,r=14,imm=0) R2=fp-95,call_13 R3=fp-94,call_13 R4=pkt(id=0,off=0,r=14,imm=0) R5=pkt_end(id=0,off=0,imm=0) R6=fp-56,call_13 R10=fp0,call_44
-to caller at 45:
- frame1: R0=inv1 R6=pkt(id=0,off=0,r=14,imm=0) R7=inv1 R9=pkt_end(id=0,off=0,imm=0) R10=fp0,call_13 fp-8=0 fp-24=0 fp-32=0 fp-40=0 fp-48=0 fp-56=0 fp-64=0 fp-72=0 fp-80=0 fp-112=ctx
-
-from 273 to 45: frame1: R0=inv1 R6=pkt(id=0,off=0,r=14,imm=0) R7=inv1 R9=pkt_end(id=0,off=0,imm=0) R10=fp0,call_13 fp-8=0 fp-24=0 fp-32=0 fp-40=0 fp-48=0 fp-56=0 fp-64=0 fp-72=0 fp-80=0 fp-112=ctx
-45: (05) goto pc+9
-55: safe
+from 237 to 273: safe
-processed 2971 insns (limit 131072), stack depth 0+112+0+0+8+0+4+24+8+16+0+16+8+0+0+0+0+0+32+0+0
-test_xdp_noinline:PASS:ipv4 3292 nsec
-test_xdp_noinline:PASS:ipv6 3105 nsec
+processed 2957 insns (limit 131072), stack depth 0+112+0+0+8+0+4+24+8+16+0+16+8+0+0+0+0+0+32+0+0
+test_xdp_noinline:PASS:ipv4 2922 nsec
+test_xdp_noinline:PASS:ipv6 4296 nsec
Did we miss liveness propagation before or there is a bug in this patch?
Thanks
include/linux/bpf_verifier.h | 8 +-
kernel/bpf/verifier.c | 180 ++++++++---------------------------
2 files changed, 45 insertions(+), 143 deletions(-)
diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h
index 38b04f559ad3..b42b60a83e19 100644
--- a/include/linux/bpf_verifier.h
+++ b/include/linux/bpf_verifier.h
@@ -41,6 +41,7 @@ enum bpf_reg_liveness {
};
struct bpf_reg_state {
+ /* Ordering of fields matters. See states_equal() */
enum bpf_reg_type type;
union {
/* valid when type == PTR_TO_PACKET */
@@ -59,7 +60,6 @@ struct bpf_reg_state {
* came from, when one is tested for != NULL.
*/
u32 id;
- /* Ordering of fields matters. See states_equal() */
/* For scalar types (SCALAR_VALUE), this represents our knowledge of
* the actual value.
* For pointer types, this represents the variable part of the offset
@@ -76,15 +76,15 @@ struct bpf_reg_state {
s64 smax_value; /* maximum possible (s64)value */
u64 umin_value; /* minimum possible (u64)value */
u64 umax_value; /* maximum possible (u64)value */
+ /* parentage chain for liveness checking */
+ struct bpf_reg_state *parent;
/* Inside the callee two registers can be both PTR_TO_STACK like
* R1=fp-8 and R2=fp-8, but one of them points to this function stack
* while another to the caller's stack. To differentiate them 'frameno'
* is used which is an index in bpf_verifier_state->frame[] array
* pointing to bpf_func_state.
- * This field must be second to last, for states_equal() reasons.
*/
u32 frameno;
- /* This field must be last, for states_equal() reasons. */
enum bpf_reg_liveness live;
};
@@ -107,7 +107,6 @@ struct bpf_stack_state {
*/
struct bpf_func_state {
struct bpf_reg_state regs[MAX_BPF_REG];
- struct bpf_verifier_state *parent;
/* index of call instruction that called into this func */
int callsite;
/* stack frame number of this function state from pov of
@@ -129,7 +128,6 @@ struct bpf_func_state {
struct bpf_verifier_state {
/* call stack tracking */
struct bpf_func_state *frame[MAX_CALL_FRAMES];
- struct bpf_verifier_state *parent;
u32 curframe;
};
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 9e2bf834f13a..5dc379f05b08 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -380,9 +380,9 @@ static int copy_stack_state(struct bpf_func_state *dst,
/* do_check() starts with zero-sized stack in struct bpf_verifier_state to
* make it consume minimal amount of memory. check_stack_write() access from
* the program calls into realloc_func_state() to grow the stack size.
- * Note there is a non-zero 'parent' pointer inside bpf_verifier_state
- * which this function copies over. It points to previous bpf_verifier_state
- * which is never reallocated
+ * Note there is a non-zero parent pointer inside each reg of bpf_verifier_state
+ * which this function copies over. It points to corresponding reg in previous
+ * bpf_verifier_state which is never reallocated
*/
static int realloc_func_state(struct bpf_func_state *state, int size,
bool copy_old)
@@ -466,7 +466,6 @@ static int copy_verifier_state(struct bpf_verifier_state *dst_state,
dst_state->frame[i] = NULL;
}
dst_state->curframe = src->curframe;
- dst_state->parent = src->parent;
for (i = 0; i <= src->curframe; i++) {
dst = dst_state->frame[i];
if (!dst) {
@@ -732,6 +731,7 @@ static void init_reg_state(struct bpf_verifier_env *env,
for (i = 0; i < MAX_BPF_REG; i++) {
mark_reg_not_init(env, regs, i);
regs[i].live = REG_LIVE_NONE;
+ regs[i].parent = NULL;
}
/* frame pointer */
@@ -876,74 +876,21 @@ static int check_subprogs(struct bpf_verifier_env *env)
return 0;
}
-static
-struct bpf_verifier_state *skip_callee(struct bpf_verifier_env *env,
- const struct bpf_verifier_state *state,
- struct bpf_verifier_state *parent,
- u32 regno)
-{
- struct bpf_verifier_state *tmp = NULL;
-
- /* 'parent' could be a state of caller and
- * 'state' could be a state of callee. In such case
- * parent->curframe < state->curframe
- * and it's ok for r1 - r5 registers
- *
- * 'parent' could be a callee's state after it bpf_exit-ed.
- * In such case parent->curframe > state->curframe
- * and it's ok for r0 only
- */
- if (parent->curframe == state->curframe ||
- (parent->curframe < state->curframe &&
- regno >= BPF_REG_1 && regno <= BPF_REG_5) ||
- (parent->curframe > state->curframe &&
- regno == BPF_REG_0))
- return parent;
-
- if (parent->curframe > state->curframe &&
- regno >= BPF_REG_6) {
- /* for callee saved regs we have to skip the whole chain
- * of states that belong to callee and mark as LIVE_READ
- * the registers before the call
- */
- tmp = parent;
- while (tmp && tmp->curframe != state->curframe) {
- tmp = tmp->parent;
- }
- if (!tmp)
- goto bug;
- parent = tmp;
- } else {
- goto bug;
- }
- return parent;
-bug:
- verbose(env, "verifier bug regno %d tmp %p\n", regno, tmp);
- verbose(env, "regno %d parent frame %d current frame %d\n",
- regno, parent->curframe, state->curframe);
- return NULL;
-}
-
+/* Parentage chain of this register (or stack slot) should take care of all
+ * issues like callee-saved registers, stack slot allocation time, etc.
+ */
static int mark_reg_read(struct bpf_verifier_env *env,
- const struct bpf_verifier_state *state,
- struct bpf_verifier_state *parent,
- u32 regno)
+ const struct bpf_reg_state *state,
+ struct bpf_reg_state *parent)
{
bool writes = parent == state->parent; /* Observe write marks */
- if (regno == BPF_REG_FP)
- /* We don't need to worry about FP liveness because it's read-only */
- return 0;
-
while (parent) {
/* if read wasn't screened by an earlier write ... */
- if (writes && state->frame[state->curframe]->regs[regno].live & REG_LIVE_WRITTEN)
+ if (writes && state->live & REG_LIVE_WRITTEN)
break;
- parent = skip_callee(env, state, parent, regno);
- if (!parent)
- return -EFAULT;
/* ... then we depend on parent's value */
- parent->frame[parent->curframe]->regs[regno].live |= REG_LIVE_READ;
+ parent->live |= REG_LIVE_READ;
state = parent;
parent = state->parent;
writes = true;
@@ -969,7 +916,10 @@ static int check_reg_arg(struct bpf_verifier_env *env, u32 regno,
verbose(env, "R%d !read_ok\n", regno);
return -EACCES;
}
- return mark_reg_read(env, vstate, vstate->parent, regno);
+ /* We don't need to worry about FP liveness because it's read-only */
+ if (regno != BPF_REG_FP)
+ return mark_reg_read(env, ®s[regno],
+ regs[regno].parent);
} else {
/* check whether register used as dest operand can be written to */
if (regno == BPF_REG_FP) {
@@ -1106,61 +1056,6 @@ static int check_stack_write(struct bpf_verifier_env *env,
return 0;
}
-/* registers of every function are unique and mark_reg_read() propagates
- * the liveness in the following cases:
- * - from callee into caller for R1 - R5 that were used as arguments
- * - from caller into callee for R0 that used as result of the call
- * - from caller to the same caller skipping states of the callee for R6 - R9,
- * since R6 - R9 are callee saved by implicit function prologue and
- * caller's R6 != callee's R6, so when we propagate liveness up to
- * parent states we need to skip callee states for R6 - R9.
- *
- * stack slot marking is different, since stacks of caller and callee are
- * accessible in both (since caller can pass a pointer to caller's stack to
- * callee which can pass it to another function), hence mark_stack_slot_read()
- * has to propagate the stack liveness to all parent states at given frame number.
- * Consider code:
- * f1() {
- * ptr = fp - 8;
- * *ptr = ctx;
- * call f2 {
- * .. = *ptr;
- * }
- * .. = *ptr;
- * }
- * First *ptr is reading from f1's stack and mark_stack_slot_read() has
- * to mark liveness at the f1's frame and not f2's frame.
- * Second *ptr is also reading from f1's stack and mark_stack_slot_read() has
- * to propagate liveness to f2 states at f1's frame level and further into
- * f1 states at f1's frame level until write into that stack slot
- */
-static void mark_stack_slot_read(struct bpf_verifier_env *env,
- const struct bpf_verifier_state *state,
- struct bpf_verifier_state *parent,
- int slot, int frameno)
-{
- bool writes = parent == state->parent; /* Observe write marks */
-
- while (parent) {
- if (parent->frame[frameno]->allocated_stack <= slot * BPF_REG_SIZE)
- /* since LIVE_WRITTEN mark is only done for full 8-byte
- * write the read marks are conservative and parent
- * state may not even have the stack allocated. In such case
- * end the propagation, since the loop reached beginning
- * of the function
- */
- break;
- /* if read wasn't screened by an earlier write ... */
- if (writes && state->frame[frameno]->stack[slot].spilled_ptr.live & REG_LIVE_WRITTEN)
- break;
- /* ... then we depend on parent's value */
- parent->frame[frameno]->stack[slot].spilled_ptr.live |= REG_LIVE_READ;
- state = parent;
- parent = state->parent;
- writes = true;
- }
-}
-
static int check_stack_read(struct bpf_verifier_env *env,
struct bpf_func_state *reg_state /* func where register points to */,
int off, int size, int value_regno)
@@ -1198,8 +1093,8 @@ static int check_stack_read(struct bpf_verifier_env *env,
*/
state->regs[value_regno].live |= REG_LIVE_WRITTEN;
}
- mark_stack_slot_read(env, vstate, vstate->parent, spi,
- reg_state->frameno);
+ mark_reg_read(env, ®_state->stack[spi].spilled_ptr,
+ reg_state->stack[spi].spilled_ptr.parent);
return 0;
} else {
int zeros = 0;
@@ -1215,8 +1110,8 @@ static int check_stack_read(struct bpf_verifier_env *env,
off, i, size);
return -EACCES;
}
- mark_stack_slot_read(env, vstate, vstate->parent, spi,
- reg_state->frameno);
+ mark_reg_read(env, ®_state->stack[spi].spilled_ptr,
+ reg_state->stack[spi].spilled_ptr.parent);
if (value_regno >= 0) {
if (zeros == size) {
/* any size read into register is zero extended,
@@ -1907,8 +1802,8 @@ static int check_stack_boundary(struct bpf_verifier_env *env, int regno,
/* reading any byte out of 8-byte 'spill_slot' will cause
* the whole slot to be marked as 'read'
*/
- mark_stack_slot_read(env, env->cur_state, env->cur_state->parent,
- spi, state->frameno);
+ mark_reg_read(env, &state->stack[spi].spilled_ptr,
+ state->stack[spi].spilled_ptr.parent);
}
return update_stack_depth(env, state, off);
}
@@ -2349,11 +2244,13 @@ static int check_func_call(struct bpf_verifier_env *env, struct bpf_insn *insn,
state->curframe + 1 /* frameno within this callchain */,
subprog /* subprog number within this prog */);
- /* copy r1 - r5 args that callee can access */
+ /* copy r1 - r5 args that callee can access. The copy includes parent
+ * pointers, which connects us up to the liveness chain
+ */
for (i = BPF_REG_1; i <= BPF_REG_5; i++)
callee->regs[i] = caller->regs[i];
- /* after the call regsiters r0 - r5 were scratched */
+ /* after the call registers r0 - r5 were scratched */
for (i = 0; i < CALLER_SAVED_REGS; i++) {
mark_reg_not_init(env, caller->regs, caller_saved[i]);
check_reg_arg(env, caller_saved[i], DST_OP_NO_MARK);
@@ -4337,7 +4234,7 @@ static bool regsafe(struct bpf_reg_state *rold, struct bpf_reg_state *rcur,
/* explored state didn't use this */
return true;
- equal = memcmp(rold, rcur, offsetof(struct bpf_reg_state, frameno)) == 0;
+ equal = memcmp(rold, rcur, offsetof(struct bpf_reg_state, parent)) == 0;
if (rold->type == PTR_TO_STACK)
/* two stack pointers are equal only if they're pointing to
@@ -4570,7 +4467,7 @@ static bool states_equal(struct bpf_verifier_env *env,
* equivalent state (jump target or such) we didn't arrive by the straight-line
* code, so read marks in the state must propagate to the parent regardless
* of the state's write marks. That's what 'parent == state->parent' comparison
- * in mark_reg_read() and mark_stack_slot_read() is for.
+ * in mark_reg_read() is for.
*/
static int propagate_liveness(struct bpf_verifier_env *env,
const struct bpf_verifier_state *vstate,
@@ -4591,7 +4488,8 @@ static int propagate_liveness(struct bpf_verifier_env *env,
if (vparent->frame[vparent->curframe]->regs[i].live & REG_LIVE_READ)
continue;
if (vstate->frame[vstate->curframe]->regs[i].live & REG_LIVE_READ) {
- err = mark_reg_read(env, vstate, vparent, i);
+ err = mark_reg_read(env, &vstate->frame[vstate->curframe]->regs[i],
+ &vparent->frame[vstate->curframe]->regs[i]);
if (err)
return err;
}
@@ -4606,7 +4504,8 @@ static int propagate_liveness(struct bpf_verifier_env *env,
if (parent->stack[i].spilled_ptr.live & REG_LIVE_READ)
continue;
if (state->stack[i].spilled_ptr.live & REG_LIVE_READ)
- mark_stack_slot_read(env, vstate, vparent, i, frame);
+ mark_reg_read(env, &state->stack[i].spilled_ptr,
+ &parent->stack[i].spilled_ptr);
}
}
return err;
@@ -4616,7 +4515,7 @@ static int is_state_visited(struct bpf_verifier_env *env, int insn_idx)
{
struct bpf_verifier_state_list *new_sl;
struct bpf_verifier_state_list *sl;
- struct bpf_verifier_state *cur = env->cur_state;
+ struct bpf_verifier_state *cur = env->cur_state, *new;
int i, j, err;
sl = env->explored_states[insn_idx];
@@ -4658,16 +4557,18 @@ static int is_state_visited(struct bpf_verifier_env *env, int insn_idx)
return -ENOMEM;
/* add new state to the head of linked list */
- err = copy_verifier_state(&new_sl->state, cur);
+ new = &new_sl->state;
+ err = copy_verifier_state(new, cur);
if (err) {
- free_verifier_state(&new_sl->state, false);
+ free_verifier_state(new, false);
kfree(new_sl);
return err;
}
new_sl->next = env->explored_states[insn_idx];
env->explored_states[insn_idx] = new_sl;
/* connect new state to parentage chain */
- cur->parent = &new_sl->state;
+ for (i = 0; i < BPF_REG_FP; i++)
+ cur_regs(env)[i].parent = &new->frame[new->curframe]->regs[i];
/* clear write marks in current state: the writes we did are not writes
* our child did, so they don't screen off its reads from us.
* (There are no read marks in current state, because reads always mark
@@ -4680,9 +4581,13 @@ static int is_state_visited(struct bpf_verifier_env *env, int insn_idx)
/* all stack frames are accessible from callee, clear them all */
for (j = 0; j <= cur->curframe; j++) {
struct bpf_func_state *frame = cur->frame[j];
+ struct bpf_func_state *newframe = new->frame[j];
- for (i = 0; i < frame->allocated_stack / BPF_REG_SIZE; i++)
+ for (i = 0; i < frame->allocated_stack / BPF_REG_SIZE; i++) {
frame->stack[i].spilled_ptr.live = REG_LIVE_NONE;
+ frame->stack[i].spilled_ptr.parent =
+ &newframe->stack[i].spilled_ptr;
+ }
}
return 0;
}
@@ -4701,7 +4606,6 @@ static int do_check(struct bpf_verifier_env *env)
if (!state)
return -ENOMEM;
state->curframe = 0;
- state->parent = NULL;
state->frame[0] = kzalloc(sizeof(struct bpf_func_state), GFP_KERNEL);
if (!state->frame[0]) {
kfree(state);
--
2.17.1
^ permalink raw reply related
* Re: [PATCH net-next 0/8] PTP support for mv88e6165 family
From: Richard Cochran @ 2018-07-18 3:42 UTC (permalink / raw)
To: Andrew Lunn; +Cc: David Miller, Vivien Didelot, netdev
In-Reply-To: <1531864140-31233-1-git-send-email-andrew@lunn.ch>
On Tue, Jul 17, 2018 at 11:48:52PM +0200, Andrew Lunn wrote:
> The mv88e6165 family of switches supports PTP. It is however not fully
> compatible with the current PTP support in the mv88e6xxx driver. This
> patchset adds a level of abstraction to the PTP code, and then adds
> the code needed to support the mv88e6165 family.
For the series:
Acked-by: Richard Cochran <richardcochran@gmail.com>
^ permalink raw reply
* Re: [PATCH v2 net-next 0/7] Make /sys/class/net per net namespace objects belong to container
From: David Miller @ 2018-07-18 4:17 UTC (permalink / raw)
To: tyhicks
Cc: bridge, gregkh, containers, dmitry.torokhov, linux-kernel,
ebiederm, netdev, tj
In-Reply-To: <1531497949-1766-1-git-send-email-tyhicks@canonical.com>
From: Tyler Hicks <tyhicks@canonical.com>
Date: Fri, 13 Jul 2018 16:05:42 +0000
> I'm reviving this patch set because we would like this feature for
> system containers. One specific use case that we have is that libvirt is
> unable to configure its bridge device inside of a system container due
> to the bridge files in /sys/class/net/ being owned by init root instead
> of container root. The last two patches in this set are patches that
> I've added to Dmitry's original set to allow such configuration of the
> bridge device.
>
> Eric had previously provided feedback that he didn't favor these changes
> affecting all layers of the stack and that most of the changes could
> remain local to drivers/base/core.c. That feedback is certainly sensible
> but I wanted to send out v2 of the patch set without making that large
> of a change since quite a bit of time has passed and the bridge changes
> in the last patch of this set shows that not all of the changes will be
> local to drivers/base/core.c. I'm happy to make the changes if the
> original request still stands.
>
> I've verified that all of the bridge related files affected by patch 7
> have proper access control checks for CAP_NET_ADMIN inside of the
> user namespace. I have *not* yet verified that all of the network
> device related sysfs files affected by patch 5 have proper access
> control checks. I was working under the assumption that those code paths
> already were verified when the first iteration of the patches were sent
> out.
Ok, I can't let this series rot forever, so I'll apply it to net-next.
Thank you.
^ permalink raw reply
* Re: [PATCH net-next V2 0/8] Packed virtqueue support for vhost
From: David Miller @ 2018-07-18 4:09 UTC (permalink / raw)
To: mst; +Cc: kvm, netdev, linux-kernel, virtualization, maxime.coquelin, wexu
In-Reply-To: <20180716154102-mutt-send-email-mst@kernel.org>
From: "Michael S. Tsirkin" <mst@redhat.com>
Date: Mon, 16 Jul 2018 15:49:04 +0300
> I'm not sure I understand this approach. Packed ring is just an
> optimization. What value is there in merging it if it does not help
> speed?
So it seems that both Tiwei's and Jason's packed patch sets are kind
of in limbo due to this discussion.
If I understand Jason correctly, he's trying to say that although this
work doesn't show improvements by itself, however it paves the way
such that optimizaations done in the future will be more visible.
I kind of can see Michael's viewpoint too, in that we should put this
stuff in later when it does actually show some difference.
Therefore, I'll mark both patch sets as "deferred" for now.
Let me know if I should do something else.
Thanks!
^ permalink raw reply
* [PATCH net-next v2 2/2] docs: networking: Convert bridge.txt to rst
From: Tobin C. Harding @ 2018-07-18 3:27 UTC (permalink / raw)
To: David S. Miller
Cc: Tobin C. Harding, Markus Heiser, linux-doc, netdev, linux-kernel
In-Reply-To: <20180718032736.8000-1-me@tobin.cc>
The kernel documentation is now restructured text. Convert the Ethernet
Bridge documentation and include it in the toplevel kernel
documentation.
- Fix heading adornments.
- Add license identifier.
Signed-off-by: Tobin C. Harding <me@tobin.cc>
---
Documentation/networking/{bridge.txt => bridge.rst} | 6 ++++++
Documentation/networking/index.rst | 1 +
2 files changed, 7 insertions(+)
rename Documentation/networking/{bridge.txt => bridge.rst} (85%)
diff --git a/Documentation/networking/bridge.txt b/Documentation/networking/bridge.rst
similarity index 85%
rename from Documentation/networking/bridge.txt
rename to Documentation/networking/bridge.rst
index a27cb6214ed7..4aef9cddde2f 100644
--- a/Documentation/networking/bridge.txt
+++ b/Documentation/networking/bridge.rst
@@ -1,3 +1,9 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=================
+Ethernet Bridging
+=================
+
In order to use the Ethernet bridging functionality, you'll need the
userspace tools.
diff --git a/Documentation/networking/index.rst b/Documentation/networking/index.rst
index 65502f2031a8..d75da2ff25c7 100644
--- a/Documentation/networking/index.rst
+++ b/Documentation/networking/index.rst
@@ -18,6 +18,7 @@ Contents:
failover
net_failover
alias
+ bridge
.. only:: subproject
--
2.17.1
^ permalink raw reply related
* [PATCH net-next v2 1/2] docs: networking: Convert alias.txt to rst
From: Tobin C. Harding @ 2018-07-18 3:27 UTC (permalink / raw)
To: David S. Miller
Cc: Tobin C. Harding, Markus Heiser, linux-doc, netdev, linux-kernel
In-Reply-To: <20180718032736.8000-1-me@tobin.cc>
The kernel documentation is now restructured text. Convert the IP
aliasing documentation and include it in the toplevel kernel
documentation.
- Fix heading adornments.
- Correctly indent code snippets.
- Limit line length to 72 characters inline with kernel documentation
standards.
- Add license identifier.
Signed-off-by: Tobin C. Harding <me@tobin.cc>
---
Documentation/networking/00-INDEX | 2 --
Documentation/networking/alias.rst | 49 ++++++++++++++++++++++++++++++
Documentation/networking/alias.txt | 40 ------------------------
Documentation/networking/index.rst | 1 +
4 files changed, 50 insertions(+), 42 deletions(-)
create mode 100644 Documentation/networking/alias.rst
delete mode 100644 Documentation/networking/alias.txt
diff --git a/Documentation/networking/00-INDEX b/Documentation/networking/00-INDEX
index 2b89d91b376f..1e5153ed8990 100644
--- a/Documentation/networking/00-INDEX
+++ b/Documentation/networking/00-INDEX
@@ -18,8 +18,6 @@ README.ipw2200
- README for the Intel PRO/Wireless 2915ABG and 2200BG driver.
README.sb1000
- info on General Instrument/NextLevel SURFboard1000 cable modem.
-alias.txt
- - info on using alias network devices.
altera_tse.txt
- Altera Triple-Speed Ethernet controller.
arcnet-hardware.txt
diff --git a/Documentation/networking/alias.rst b/Documentation/networking/alias.rst
new file mode 100644
index 000000000000..af7c5ee92014
--- /dev/null
+++ b/Documentation/networking/alias.rst
@@ -0,0 +1,49 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+===========
+IP-Aliasing
+===========
+
+IP-aliases are an obsolete way to manage multiple IP-addresses/masks
+per interface. Newer tools such as iproute2 support multiple
+address/prefixes per interface, but aliases are still supported
+for backwards compatibility.
+
+An alias is formed by adding a colon and a string when running ifconfig.
+This string is usually numeric, but this is not a must.
+
+
+Alias creation
+==============
+
+Alias creation is done by 'magic' interface naming: eg. to create a
+200.1.1.1 alias for eth0 ...
+::
+
+ # ifconfig eth0:0 200.1.1.1 etc,etc....
+ ~~ -> request alias #0 creation (if not yet exists) for eth0
+
+The corresponding route is also set up by this command. Please note:
+The route always points to the base interface.
+
+
+Alias deletion
+==============
+
+The alias is removed by shutting the alias down::
+
+ # ifconfig eth0:0 down
+ ~~~~~~~~~~ -> will delete alias
+
+
+Alias (re-)configuring
+======================
+
+Aliases are not real devices, but programs should be able to configure
+and refer to them as usual (ifconfig, route, etc).
+
+
+Relationship with main device
+=============================
+
+If the base device is shut down the added aliases will be deleted too.
diff --git a/Documentation/networking/alias.txt b/Documentation/networking/alias.txt
deleted file mode 100644
index 85046f53fcfc..000000000000
--- a/Documentation/networking/alias.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-
-IP-Aliasing:
-============
-
-IP-aliases are an obsolete way to manage multiple IP-addresses/masks
-per interface. Newer tools such as iproute2 support multiple
-address/prefixes per interface, but aliases are still supported
-for backwards compatibility.
-
-An alias is formed by adding a colon and a string when running ifconfig.
-This string is usually numeric, but this is not a must.
-
-o Alias creation.
- Alias creation is done by 'magic' interface naming: eg. to create a
- 200.1.1.1 alias for eth0 ...
-
- # ifconfig eth0:0 200.1.1.1 etc,etc....
- ~~ -> request alias #0 creation (if not yet exists) for eth0
-
- The corresponding route is also set up by this command.
- Please note: The route always points to the base interface.
-
-
-o Alias deletion.
- The alias is removed by shutting the alias down:
-
- # ifconfig eth0:0 down
- ~~~~~~~~~~ -> will delete alias
-
-
-o Alias (re-)configuring
-
- Aliases are not real devices, but programs should be able to configure and
- refer to them as usual (ifconfig, route, etc).
-
-
-o Relationship with main device
-
- If the base device is shut down the added aliases will be deleted
- too.
diff --git a/Documentation/networking/index.rst b/Documentation/networking/index.rst
index a4bbde70bcb9..65502f2031a8 100644
--- a/Documentation/networking/index.rst
+++ b/Documentation/networking/index.rst
@@ -17,6 +17,7 @@ Contents:
msg_zerocopy
failover
net_failover
+ alias
.. only:: subproject
--
2.17.1
^ permalink raw reply related
* Re: [PATCH RFC/RFT net-next 00/17] net: Convert neighbor tables to per-namespace
From: David Miller @ 2018-07-18 3:59 UTC (permalink / raw)
To: dsahern
Cc: xiyou.wangcong, netdev, nikita.leshchenko, roopa, stephen, idosch,
jiri, saeedm, alex.aring, linux-wpan, netfilter-devel,
linux-kernel
In-Reply-To: <1a27e301-3275-b349-a2f8-afdfdc02f04f@gmail.com>
From: David Ahern <dsahern@gmail.com>
Date: Tue, 17 Jul 2018 13:02:18 -0600
> I understand the concern about global resource and limits: as it stands
> you have to increase the limits in init_net to the max expected and hope
> for the best. With per namespace limits you can lower the limits of each
> namespace better control the total impact on the total memory used.
> Perhaps the defaults for namespaces after init_net could have really low
> defaults (e.g., 16 / 32 / 64 for gc_thresh 1/2/3) requiring admin
> intervention.
How does this work when a namespace creates another namespace?
Changing the defaults for non-init_net namespaces could work, but that
could be a surprise to some people.
^ permalink raw reply
* Re: [PATCH] ptp: fix missing break in switch
From: Richard Cochran @ 2018-07-18 3:46 UTC (permalink / raw)
To: Gustavo A. R. Silva
Cc: Stefan Sørensen, David S. Miller, netdev, linux-kernel
In-Reply-To: <20180718011733.GA27872@embeddedor.com>
On Tue, Jul 17, 2018 at 08:17:33PM -0500, Gustavo A. R. Silva wrote:
> It seems that a *break* is missing in order to avoid falling through
> to the default case. Otherwise, checking *chan* makes no sense.
Good catch.
Acked-by: Richard Cochran <richardcochran@gmail.com>
^ permalink raw reply
* [PATCH net-next v2 0/2] docs: Convert alias and bridge to rst
From: Tobin C. Harding @ 2018-07-18 3:27 UTC (permalink / raw)
To: David S. Miller
Cc: Tobin C. Harding, Markus Heiser, linux-doc, netdev, linux-kernel
Hi Dave,
Here is my first attempt at working on converting docs in
Documentation/networking to rst format. I've picked a couple of trivial
ones to start with. If there is anything extra I can do to make your
life easier during documentation conversion please say. (Also if there
is some reason that it would be preferable to _not_ embark on this task
please say :)
This set does not make any changes to the converted files apart from
formatting.
thanks,
Tobin.
v2:
- remove incorrect patch from set (changing 'Indices' indentation)
Tobin C. Harding (2):
docs: networking: Convert alias.txt to rst
docs: networking: Convert bridge.txt to rst
Documentation/networking/00-INDEX | 2 -
Documentation/networking/alias.rst | 49 +++++++++++++++++++
Documentation/networking/alias.txt | 40 ---------------
.../networking/{bridge.txt => bridge.rst} | 6 +++
Documentation/networking/index.rst | 2 +
5 files changed, 57 insertions(+), 42 deletions(-)
create mode 100644 Documentation/networking/alias.rst
delete mode 100644 Documentation/networking/alias.txt
rename Documentation/networking/{bridge.txt => bridge.rst} (85%)
--
2.17.1
^ permalink raw reply
* Re: [PATCH net-next 1/3] docs: networking: Fix indices heading indentation
From: Tobin C. Harding @ 2018-07-18 3:23 UTC (permalink / raw)
To: Markus Heiser; +Cc: David S. Miller, linux-doc, netdev, linux-kernel
In-Reply-To: <1d7a309eb7561b9bb4c31f5deb9a0b63b6263232.camel@darmarit.de>
On Tue, Jul 17, 2018 at 10:28:15AM +0200, Markus Heiser wrote:
> Am Dienstag, den 17.07.2018, 14:29 +1000 schrieb Tobin C. Harding:
> > Currently the 'Indices' heading is not aligned with column 0, it should
> > be.
>
> Hi Tobin, thats not correct. The 'Indices' heading is a part of the 'only'
> block:
Thanks for picking this up Markus. A little knowledge is dangerous eh
:) Will remove this patch from the set and re-spin.
thanks,
Tobin.
^ permalink raw reply
* Re: [PATCH iproute2 0/5] Various BPF improvements
From: David Ahern @ 2018-07-18 2:43 UTC (permalink / raw)
To: Daniel Borkmann; +Cc: jakub.kicinski, alexei.starovoitov, netdev
In-Reply-To: <20180717233122.29390-1-daniel@iogearbox.net>
On 7/17/18 5:31 PM, Daniel Borkmann wrote:
> Main part of this set is to: i) avoid strict af_alg kernel dependency,
> ii) add loader support for bpf to bpf calls and iii) add btf loader
> support with an option to annotate maps. For details please see the
> individual patches. Thanks!
>
> Daniel Borkmann (5):
> bpf: import btf uapi kernel header
> bpf: move bpf_elf_map fixup notification under verbose
> bpf: remove strict dependency on af_alg
> bpf: implement bpf to bpf calls support
> bpf: implement btf handling and map annotation
>
> include/bpf_elf.h | 9 +
> include/bpf_util.h | 1 +
> include/uapi/linux/btf.h | 113 +++++++++
> lib/bpf.c | 645 +++++++++++++++++++++++++++++++++++++----------
> 4 files changed, 639 insertions(+), 129 deletions(-)
> create mode 100644 include/uapi/linux/btf.h
>
Applied 2-5 to iproute2-next. Pulled btf.h from the last header sync
point for consistency.
^ permalink raw reply
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