linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: yang.shi@linaro.org (Yang Shi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/2] arm64: bpf: add BPF XADD instruction
Date: Tue, 10 Nov 2015 14:41:41 -0800	[thread overview]
Message-ID: <1447195301-16757-3-git-send-email-yang.shi@linaro.org> (raw)
In-Reply-To: <1447195301-16757-1-git-send-email-yang.shi@linaro.org>

aarch64 doesn't have native support for XADD instruction, implement it by
the below instruction sequence:

Load (dst + off) to a register
Add src to it
Store it back to (dst + off)

Signed-off-by: Yang Shi <yang.shi@linaro.org>
CC: Zi Shen Lim <zlim.lnx@gmail.com>
CC: Xi Wang <xi.wang@gmail.com>
---
 arch/arm64/net/bpf_jit_comp.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
index 49c1f1b..0b1d2d3 100644
--- a/arch/arm64/net/bpf_jit_comp.c
+++ b/arch/arm64/net/bpf_jit_comp.c
@@ -609,7 +609,21 @@ emit_cond_jmp:
 	case BPF_STX | BPF_XADD | BPF_W:
 	/* STX XADD: lock *(u64 *)(dst + off) += src */
 	case BPF_STX | BPF_XADD | BPF_DW:
-		goto notyet;
+		ctx->tmp_used = 1;
+		emit_a64_mov_i(1, tmp2, off, ctx);
+		switch (BPF_SIZE(code)) {
+		case BPF_W:
+			emit(A64_LDR32(tmp, dst, tmp2), ctx);
+			emit(A64_ADD(is64, tmp, tmp, src), ctx);
+			emit(A64_STR32(tmp, dst, tmp2), ctx);
+			break;
+		case BPF_DW:
+			emit(A64_LDR64(tmp, dst, tmp2), ctx);
+			emit(A64_ADD(is64, tmp, tmp, src), ctx);
+			emit(A64_STR64(tmp, dst, tmp2), ctx);
+			break;
+		}
+		break;
 
 	/* R0 = ntohx(*(size *)(((struct sk_buff *)R6)->data + imm)) */
 	case BPF_LD | BPF_ABS | BPF_W:
@@ -679,9 +693,6 @@ emit_cond_jmp:
 		}
 		break;
 	}
-notyet:
-		pr_info_once("*** NOT YET: opcode %02x ***\n", code);
-		return -EFAULT;
 
 	default:
 		pr_err_once("unknown opcode %02x\n", code);
-- 
2.0.2

  parent reply	other threads:[~2015-11-10 22:41 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-10 22:41 [PATCH 0/2] arm64: bpf: add BPF_ST and BPF_XADD instructions support Yang Shi
2015-11-10 22:41 ` [PATCH 1/2] arm64: bpf: add 'store immediate' instruction Yang Shi
2015-11-11  2:45   ` Z Lim
2015-11-11 12:12     ` Will Deacon
2015-11-11 12:39       ` Will Deacon
2015-11-12 19:33         ` Shi, Yang
2015-11-13  3:45           ` Z Lim
2015-11-23 19:34             ` Shi, Yang
2015-11-10 22:41 ` Yang Shi [this message]
2015-11-11  0:08   ` [PATCH 2/2] arm64: bpf: add BPF XADD instruction Eric Dumazet
2015-11-11  0:26     ` Shi, Yang
2015-11-11  0:42       ` Alexei Starovoitov
2015-11-11  2:52         ` Z Lim
2015-11-11  8:49           ` Arnd Bergmann
2015-11-11 10:24             ` Will Deacon
2015-11-11 10:42               ` Daniel Borkmann
2015-11-11 11:58                 ` Will Deacon
2015-11-11 12:21                   ` Daniel Borkmann
2015-11-11 12:38                     ` Will Deacon
2015-11-11 12:58                       ` Peter Zijlstra
2015-11-11 15:52                         ` Daniel Borkmann
2015-11-11 16:23                           ` Will Deacon
2015-11-11 17:27                             ` Alexei Starovoitov
2015-11-11 17:35                               ` David Miller
2015-11-11 17:44                                 ` Will Deacon
2015-11-11 19:01                                   ` David Miller
2015-11-11 17:57                                 ` Peter Zijlstra
2015-11-11 18:11                                   ` Alexei Starovoitov
2015-11-11 18:31                                     ` Peter Zijlstra
2015-11-11 18:41                                       ` Peter Zijlstra
2015-11-11 18:44                                       ` Peter Zijlstra
2015-11-11 18:54                                         ` Peter Zijlstra
2015-11-11 19:55                                           ` Alexei Starovoitov
2015-11-11 22:21                                             ` Peter Zijlstra
2015-11-11 23:40                                               ` Alexei Starovoitov
2015-11-12  8:57                                                 ` Peter Zijlstra
2015-11-11 18:50                                       ` Daniel Borkmann
2015-11-11 19:04                                         ` David Miller
2015-11-11 19:23                                         ` Peter Zijlstra
2015-11-11 19:41                                           ` Daniel Borkmann
2015-11-11 18:46                                     ` Will Deacon
2015-11-11 19:01                                     ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1447195301-16757-3-git-send-email-yang.shi@linaro.org \
    --to=yang.shi@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).