aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Kicinski <jakub.kicinski@netronome.com>2018-01-16 18:51:49 -0500
committerDaniel Borkmann <daniel@iogearbox.net>2018-01-16 19:15:06 -0500
commit7dfa4d87cfc48f3d4171f4a1b886bbbe4faf5c07 (patch)
treebd85481799b2e5989148571e982918febd218557
parentd77be68955475fc2321e73fe006240248f2f8fef (diff)
nfp: bpf: print map lookup problems into verifier log
Use the verifier log to output error messages if map lookup can't be offloaded. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Acked-by: Quentin Monnet <quentin.monnet@netronome.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
-rw-r--r--drivers/net/ethernet/netronome/nfp/bpf/verifier.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c
index 741438896cc7..81dab462456c 100644
--- a/drivers/net/ethernet/netronome/nfp/bpf/verifier.c
+++ b/drivers/net/ethernet/netronome/nfp/bpf/verifier.c
@@ -132,22 +132,24 @@ nfp_bpf_check_call(struct nfp_prog *nfp_prog, struct bpf_verifier_env *env,
132 132
133 case BPF_FUNC_map_lookup_elem: 133 case BPF_FUNC_map_lookup_elem:
134 if (!bpf->helpers.map_lookup) { 134 if (!bpf->helpers.map_lookup) {
135 pr_info("map_lookup: not supported by FW\n"); 135 pr_vlog(env, "map_lookup: not supported by FW\n");
136 return -EOPNOTSUPP; 136 return -EOPNOTSUPP;
137 } 137 }
138 if (reg2->type != PTR_TO_STACK) { 138 if (reg2->type != PTR_TO_STACK) {
139 pr_info("map_lookup: unsupported key ptr type %d\n", 139 pr_vlog(env,
140 "map_lookup: unsupported key ptr type %d\n",
140 reg2->type); 141 reg2->type);
141 return -EOPNOTSUPP; 142 return -EOPNOTSUPP;
142 } 143 }
143 if (!tnum_is_const(reg2->var_off)) { 144 if (!tnum_is_const(reg2->var_off)) {
144 pr_info("map_lookup: variable key pointer\n"); 145 pr_vlog(env, "map_lookup: variable key pointer\n");
145 return -EOPNOTSUPP; 146 return -EOPNOTSUPP;
146 } 147 }
147 148
148 off = reg2->var_off.value + reg2->off; 149 off = reg2->var_off.value + reg2->off;
149 if (-off % 4) { 150 if (-off % 4) {
150 pr_info("map_lookup: unaligned stack pointer %lld\n", 151 pr_vlog(env,
152 "map_lookup: unaligned stack pointer %lld\n",
151 -off); 153 -off);
152 return -EOPNOTSUPP; 154 return -EOPNOTSUPP;
153 } 155 }
@@ -160,7 +162,7 @@ nfp_bpf_check_call(struct nfp_prog *nfp_prog, struct bpf_verifier_env *env,
160 meta->arg2_var_off |= off != old_off; 162 meta->arg2_var_off |= off != old_off;
161 163
162 if (meta->arg1.map_ptr != reg1->map_ptr) { 164 if (meta->arg1.map_ptr != reg1->map_ptr) {
163 pr_info("map_lookup: called for different map\n"); 165 pr_vlog(env, "map_lookup: called for different map\n");
164 return -EOPNOTSUPP; 166 return -EOPNOTSUPP;
165 } 167 }
166 break; 168 break;
@@ -263,7 +265,7 @@ nfp_bpf_check_ptr(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta,
263 265
264 if (reg->type == PTR_TO_MAP_VALUE) { 266 if (reg->type == PTR_TO_MAP_VALUE) {
265 if (is_mbpf_store(meta)) { 267 if (is_mbpf_store(meta)) {
266 pr_info("map writes not supported\n"); 268 pr_vlog(env, "map writes not supported\n");
267 return -EOPNOTSUPP; 269 return -EOPNOTSUPP;
268 } 270 }
269 } 271 }