diff options
author | Arnd Bergmann <arnd@arndb.de> | 2016-09-23 16:23:59 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-09-26 02:26:29 -0400 |
commit | b47c62c5de2bc43a26bcaca8d7a93bf9dee66ffe (patch) | |
tree | 2f55cb728bfb2cae2fd2143cddb3ccbbc5be7141 | |
parent | e2072600a24161b7ddcfb26814f69f5fbc8ef85a (diff) |
nfp: bpf: improve handling for disabled BPF syscall
I stumbled over a new warning during randconfig testing,
with CONFIG_BPF_SYSCALL disabled:
drivers/net/ethernet/netronome/nfp/nfp_net_offload.c: In function 'nfp_net_bpf_offload':
drivers/net/ethernet/netronome/nfp/nfp_net_offload.c:263:3: error: '*((void *)&res+4)' may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/net/ethernet/netronome/nfp/nfp_net_offload.c:263:3: error: 'res.n_instr' may be used uninitialized in this function [-Werror=maybe-uninitialized]
As far as I can tell, this is a false positive caused by the compiler
getting confused about a function that is partially inlined, but it's
easy to avoid while improving the code:
The nfp_bpf_jit() stub helper for that configuration is unusual as it
is defined in a header file but not marked 'static inline'. By moving
the compile-time check into the caller using the IS_ENABLED() macro,
we can remove that stub and simplify the nfp_net_bpf_offload_prepare()
function enough to unconfuse the compiler.
Fixes: 7533fdc0f77f ("nfp: bpf: add hardware bpf offload")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_bpf.h | 10 | ||||
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/nfp_net_offload.c | 3 |
2 files changed, 3 insertions, 10 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_bpf.h b/drivers/net/ethernet/netronome/nfp/nfp_bpf.h index fc220cd04115..87aa8a3e9112 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_bpf.h +++ b/drivers/net/ethernet/netronome/nfp/nfp_bpf.h | |||
@@ -192,20 +192,10 @@ struct nfp_bpf_result { | |||
192 | bool dense_mode; | 192 | bool dense_mode; |
193 | }; | 193 | }; |
194 | 194 | ||
195 | #ifdef CONFIG_BPF_SYSCALL | ||
196 | int | 195 | int |
197 | nfp_bpf_jit(struct bpf_prog *filter, void *prog, enum nfp_bpf_action_type act, | 196 | nfp_bpf_jit(struct bpf_prog *filter, void *prog, enum nfp_bpf_action_type act, |
198 | unsigned int prog_start, unsigned int prog_done, | 197 | unsigned int prog_start, unsigned int prog_done, |
199 | unsigned int prog_sz, struct nfp_bpf_result *res); | 198 | unsigned int prog_sz, struct nfp_bpf_result *res); |
200 | #else | ||
201 | int | ||
202 | nfp_bpf_jit(struct bpf_prog *filter, void *prog, enum nfp_bpf_action_type act, | ||
203 | unsigned int prog_start, unsigned int prog_done, | ||
204 | unsigned int prog_sz, struct nfp_bpf_result *res) | ||
205 | { | ||
206 | return -ENOTSUPP; | ||
207 | } | ||
208 | #endif | ||
209 | 199 | ||
210 | int nfp_prog_verify(struct nfp_prog *nfp_prog, struct bpf_prog *prog); | 200 | int nfp_prog_verify(struct nfp_prog *nfp_prog, struct bpf_prog *prog); |
211 | 201 | ||
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c b/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c index 43f42f842eda..8acfb631a0ea 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_offload.c | |||
@@ -148,6 +148,9 @@ nfp_net_bpf_offload_prepare(struct nfp_net *nn, | |||
148 | unsigned int max_mtu; | 148 | unsigned int max_mtu; |
149 | int ret; | 149 | int ret; |
150 | 150 | ||
151 | if (!IS_ENABLED(CONFIG_BPF_SYSCALL)) | ||
152 | return -ENOTSUPP; | ||
153 | |||
151 | ret = nfp_net_bpf_get_act(nn, cls_bpf); | 154 | ret = nfp_net_bpf_get_act(nn, cls_bpf); |
152 | if (ret < 0) | 155 | if (ret < 0) |
153 | return ret; | 156 | return ret; |