mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
core/linux-odroid-xu to 3.4.103-3
This commit is contained in:
parent
96727afcba
commit
43923b1746
2 changed files with 233 additions and 1 deletions
228
core/linux-odroid-xu/0001-Backport-BFP-XOR-operation.patch
Normal file
228
core/linux-odroid-xu/0001-Backport-BFP-XOR-operation.patch
Normal file
|
@ -0,0 +1,228 @@
|
|||
From 83e230739cb578049f62c626946e04a79b46c85b Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Mihelich <kevin@archlinuxarm.org>
|
||||
Date: Mon, 29 Sep 2014 12:14:00 -0600
|
||||
Subject: [PATCH] Backport BFP XOR operation
|
||||
|
||||
Squashed commit of the following:
|
||||
|
||||
commit 210b6dd797945571a92ae1f502be6b885cdeae23
|
||||
Author: Daniel Borkmann <dxchgb@gmail.com>
|
||||
Date: Mon Sep 24 02:23:59 2012 +0000
|
||||
|
||||
filter: add XOR instruction for use with X/K
|
||||
|
||||
SKF_AD_ALU_XOR_X has been added a while ago, but as an 'ancillary'
|
||||
operation that is invoked through a negative offset in K within BPF
|
||||
load operations. Since BPF_MOD has recently been added, BPF_XOR should
|
||||
also be part of the common ALU operations. Removing SKF_AD_ALU_XOR_X
|
||||
might not be an option since this is exposed to user space.
|
||||
|
||||
Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>
|
||||
Acked-by: Eric Dumazet <edumazet@google.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
commit 11acc6e3fc94f8b18483af729760b9025d708409
|
||||
Author: Eric Dumazet <edumazet@google.com>
|
||||
Date: Fri Sep 7 22:03:35 2012 +0000
|
||||
|
||||
filter: add MOD operation
|
||||
|
||||
Add a new ALU opcode, to compute a modulus.
|
||||
|
||||
Commit ffe06c17afbbb used an ancillary to implement XOR_X,
|
||||
but here we reserve one of the available ALU opcode to implement both
|
||||
MOD_X and MOD_K
|
||||
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Suggested-by: George Bakos <gbakos@alpinista.org>
|
||||
Cc: Jay Schulist <jschlst@samba.org>
|
||||
Cc: Jiri Pirko <jpirko@redhat.com>
|
||||
Cc: Andi Kleen <ak@linux.intel.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
commit 3026fca84f0230d96693ba6d3e6089343874ca09
|
||||
Author: Daniel Borkmann <dxchgb@gmail.com>
|
||||
Date: Mon Sep 24 07:34:51 2012 +0000
|
||||
|
||||
x86: bpf_jit_comp: add XOR instruction for BPF JIT
|
||||
|
||||
This patch is a follow-up for patch "filter: add XOR instruction for use
|
||||
with X/K" that implements BPF x86 JIT parts for the BPF XOR operation.
|
||||
|
||||
Signed-off-by: Daniel Borkmann <daniel.borkmann@tik.ee.ethz.ch>
|
||||
Acked-by: Eric Dumazet <edumazet@google.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
commit cf2f055d4abff198aaa0128aa06e458a6ff767d7
|
||||
Author: Eric Dumazet <edumazet@google.com>
|
||||
Date: Mon Jun 4 21:26:30 2012 +0000
|
||||
|
||||
x86 bpf_jit: support BPF_S_ANC_ALU_XOR_X instruction
|
||||
|
||||
commit ffe06c17afbb (filter: add XOR operation) added generic support
|
||||
for XOR operation.
|
||||
|
||||
This patch implements the XOR instruction in x86 jit.
|
||||
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Cc: Jiri Pirko <jpirko@redhat.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
commit e0d7a646c8684dac88c6ebbeb155313ad7fc624d
|
||||
Author: Jiri Pirko <jpirko@redhat.com>
|
||||
Date: Sat Mar 31 11:01:20 2012 +0000
|
||||
|
||||
filter: add XOR operation
|
||||
|
||||
Add XOR instruction fo BPF machine. Needed for computing packet hashes.
|
||||
|
||||
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
arch/x86/net/bpf_jit_comp.c | 13 +++++++++++++
|
||||
include/linux/filter.h | 11 ++++++++++-
|
||||
net/core/filter.c | 25 +++++++++++++++++++++++++
|
||||
3 files changed, 48 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
|
||||
index 0597f95..db99f9a 100644
|
||||
--- a/arch/x86/net/bpf_jit_comp.c
|
||||
+++ b/arch/x86/net/bpf_jit_comp.c
|
||||
@@ -309,6 +309,19 @@ void bpf_jit_compile(struct sk_filter *fp)
|
||||
else
|
||||
EMIT1_off32(0x0d, K); /* or imm32,%eax */
|
||||
break;
|
||||
+ case BPF_S_ANC_ALU_XOR_X: /* A ^= X; */
|
||||
+ case BPF_S_ALU_XOR_X:
|
||||
+ seen |= SEEN_XREG;
|
||||
+ EMIT2(0x31, 0xd8); /* xor %ebx,%eax */
|
||||
+ break;
|
||||
+ case BPF_S_ALU_XOR_K: /* A ^= K; */
|
||||
+ if (K == 0)
|
||||
+ break;
|
||||
+ if (is_imm8(K))
|
||||
+ EMIT3(0x83, 0xf0, K); /* xor imm8,%eax */
|
||||
+ else
|
||||
+ EMIT1_off32(0x35, K); /* xor imm32,%eax */
|
||||
+ break;
|
||||
case BPF_S_ALU_LSH_X: /* A <<= X; */
|
||||
seen |= SEEN_XREG;
|
||||
EMIT4(0x89, 0xd9, 0xd3, 0xe0); /* mov %ebx,%ecx; shl %cl,%eax */
|
||||
diff --git a/include/linux/filter.h b/include/linux/filter.h
|
||||
index 8eeb205..0031feb 100644
|
||||
--- a/include/linux/filter.h
|
||||
+++ b/include/linux/filter.h
|
||||
@@ -73,6 +73,9 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */
|
||||
#define BPF_LSH 0x60
|
||||
#define BPF_RSH 0x70
|
||||
#define BPF_NEG 0x80
|
||||
+#define BPF_MOD 0x90
|
||||
+#define BPF_XOR 0xa0
|
||||
+
|
||||
#define BPF_JA 0x00
|
||||
#define BPF_JEQ 0x10
|
||||
#define BPF_JGT 0x20
|
||||
@@ -126,7 +129,8 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */
|
||||
#define SKF_AD_HATYPE 28
|
||||
#define SKF_AD_RXHASH 32
|
||||
#define SKF_AD_CPU 36
|
||||
-#define SKF_AD_MAX 40
|
||||
+#define SKF_AD_ALU_XOR_X 40
|
||||
+#define SKF_AD_MAX 44
|
||||
#define SKF_NET_OFF (-0x100000)
|
||||
#define SKF_LL_OFF (-0x200000)
|
||||
|
||||
@@ -181,10 +185,14 @@ enum {
|
||||
BPF_S_ALU_MUL_K,
|
||||
BPF_S_ALU_MUL_X,
|
||||
BPF_S_ALU_DIV_X,
|
||||
+ BPF_S_ALU_MOD_K,
|
||||
+ BPF_S_ALU_MOD_X,
|
||||
BPF_S_ALU_AND_K,
|
||||
BPF_S_ALU_AND_X,
|
||||
BPF_S_ALU_OR_K,
|
||||
BPF_S_ALU_OR_X,
|
||||
+ BPF_S_ALU_XOR_K,
|
||||
+ BPF_S_ALU_XOR_X,
|
||||
BPF_S_ALU_LSH_K,
|
||||
BPF_S_ALU_LSH_X,
|
||||
BPF_S_ALU_RSH_K,
|
||||
@@ -228,6 +236,7 @@ enum {
|
||||
BPF_S_ANC_HATYPE,
|
||||
BPF_S_ANC_RXHASH,
|
||||
BPF_S_ANC_CPU,
|
||||
+ BPF_S_ANC_ALU_XOR_X,
|
||||
};
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
diff --git a/net/core/filter.c b/net/core/filter.c
|
||||
index 3b7398a..26c7bbe 100644
|
||||
--- a/net/core/filter.c
|
||||
+++ b/net/core/filter.c
|
||||
@@ -158,6 +158,14 @@ unsigned int sk_run_filter(const struct sk_buff *skb,
|
||||
case BPF_S_ALU_DIV_K:
|
||||
A = reciprocal_divide(A, K);
|
||||
continue;
|
||||
+ case BPF_S_ALU_MOD_X:
|
||||
+ if (X == 0)
|
||||
+ return 0;
|
||||
+ A %= X;
|
||||
+ continue;
|
||||
+ case BPF_S_ALU_MOD_K:
|
||||
+ A %= K;
|
||||
+ continue;
|
||||
case BPF_S_ALU_AND_X:
|
||||
A &= X;
|
||||
continue;
|
||||
@@ -170,6 +178,13 @@ unsigned int sk_run_filter(const struct sk_buff *skb,
|
||||
case BPF_S_ALU_OR_K:
|
||||
A |= K;
|
||||
continue;
|
||||
+ case BPF_S_ANC_ALU_XOR_X:
|
||||
+ case BPF_S_ALU_XOR_X:
|
||||
+ A ^= X;
|
||||
+ continue;
|
||||
+ case BPF_S_ALU_XOR_K:
|
||||
+ A ^= K;
|
||||
+ continue;
|
||||
case BPF_S_ALU_LSH_X:
|
||||
A <<= X;
|
||||
continue;
|
||||
@@ -456,10 +471,14 @@ int sk_chk_filter(struct sock_filter *filter, unsigned int flen)
|
||||
[BPF_ALU|BPF_MUL|BPF_K] = BPF_S_ALU_MUL_K,
|
||||
[BPF_ALU|BPF_MUL|BPF_X] = BPF_S_ALU_MUL_X,
|
||||
[BPF_ALU|BPF_DIV|BPF_X] = BPF_S_ALU_DIV_X,
|
||||
+ [BPF_ALU|BPF_MOD|BPF_K] = BPF_S_ALU_MOD_K,
|
||||
+ [BPF_ALU|BPF_MOD|BPF_X] = BPF_S_ALU_MOD_X,
|
||||
[BPF_ALU|BPF_AND|BPF_K] = BPF_S_ALU_AND_K,
|
||||
[BPF_ALU|BPF_AND|BPF_X] = BPF_S_ALU_AND_X,
|
||||
[BPF_ALU|BPF_OR|BPF_K] = BPF_S_ALU_OR_K,
|
||||
[BPF_ALU|BPF_OR|BPF_X] = BPF_S_ALU_OR_X,
|
||||
+ [BPF_ALU|BPF_XOR|BPF_K] = BPF_S_ALU_XOR_K,
|
||||
+ [BPF_ALU|BPF_XOR|BPF_X] = BPF_S_ALU_XOR_X,
|
||||
[BPF_ALU|BPF_LSH|BPF_K] = BPF_S_ALU_LSH_K,
|
||||
[BPF_ALU|BPF_LSH|BPF_X] = BPF_S_ALU_LSH_X,
|
||||
[BPF_ALU|BPF_RSH|BPF_K] = BPF_S_ALU_RSH_K,
|
||||
@@ -518,6 +537,11 @@ int sk_chk_filter(struct sock_filter *filter, unsigned int flen)
|
||||
return -EINVAL;
|
||||
ftest->k = reciprocal_value(ftest->k);
|
||||
break;
|
||||
+ case BPF_S_ALU_MOD_K:
|
||||
+ /* check for division by zero */
|
||||
+ if (ftest->k == 0)
|
||||
+ return -EINVAL;
|
||||
+ break;
|
||||
case BPF_S_LD_MEM:
|
||||
case BPF_S_LDX_MEM:
|
||||
case BPF_S_ST:
|
||||
@@ -565,6 +589,7 @@ int sk_chk_filter(struct sock_filter *filter, unsigned int flen)
|
||||
ANCILLARY(HATYPE);
|
||||
ANCILLARY(RXHASH);
|
||||
ANCILLARY(CPU);
|
||||
+ ANCILLARY(ALU_XOR_X);
|
||||
}
|
||||
}
|
||||
ftest->code = code;
|
||||
--
|
||||
2.1.1
|
||||
|
|
@ -9,15 +9,17 @@ _srcname=linux-${_commit}
|
|||
_kernelname=${pkgbase#linux}
|
||||
_desc="ODROID-XU"
|
||||
pkgver=3.4.103
|
||||
pkgrel=2
|
||||
pkgrel=3
|
||||
arch=('armv7h')
|
||||
url="http://www.kernel.org/"
|
||||
license=('GPL2')
|
||||
makedepends=('xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc' 'git')
|
||||
options=('!strip')
|
||||
source=("https://github.com/hardkernel/linux/archive/${_commit}.tar.gz"
|
||||
'0001-Backport-BFP-XOR-operation.patch'
|
||||
'config')
|
||||
md5sums=('dcac9617c8bb67da04bf0d5d22741ddd'
|
||||
'ca5b466850782493b99e824d6efbea4d'
|
||||
'022fd4efae2d70afad21c5e3982269fd')
|
||||
|
||||
prepare() {
|
||||
|
@ -25,6 +27,8 @@ prepare() {
|
|||
|
||||
cat "${srcdir}/config" > ./.config
|
||||
|
||||
git apply ../0001-Backport-BFP-XOR-operation.patch
|
||||
|
||||
# add pkgrel to extraversion
|
||||
sed -ri "s|^(EXTRAVERSION =)(.*)|\1 \2-${pkgrel}|" Makefile
|
||||
|
||||
|
|
Loading…
Reference in a new issue