mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-18 22:54:00 +00:00
removed core/linux-sun4i
This commit is contained in:
parent
5c82068e87
commit
218349eb5c
7 changed files with 0 additions and 7595 deletions
|
@ -1,228 +0,0 @@
|
|||
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
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,632 +0,0 @@
|
|||
From dbef9fc3e1410edcd553989a3ddc1120609a5ad3 Mon Sep 17 00:00:00 2001
|
||||
From: Kevin Mihelich <kevin@archlinuxarm.org>
|
||||
Date: Fri, 2 Jan 2015 19:50:37 -0700
|
||||
Subject: [PATCH] Backport msdos partition UUIDs
|
||||
|
||||
Squashed commit of the following:
|
||||
|
||||
commit 2819ae1987539215d1ce91d80d831e0350107e1e
|
||||
Author: Stephen Warren <swarren@nvidia.com>
|
||||
Date: Thu Nov 8 16:12:28 2012 -0800
|
||||
|
||||
block: partition: msdos: provide UUIDs for partitions
|
||||
|
||||
The MSDOS/MBR partition table includes a 32-bit unique ID, often referred
|
||||
to as the NT disk signature. When combined with a partition number within
|
||||
the table, this can form a unique ID similar in concept to EFI/GPT's
|
||||
partition UUID. Constructing and recording this value in struct
|
||||
partition_meta_info allows MSDOS partitions to be referred to on the
|
||||
kernel command-line using the following syntax:
|
||||
|
||||
root=PARTUUID=0002dd75-01
|
||||
|
||||
Signed-off-by: Stephen Warren <swarren@nvidia.com>
|
||||
Cc: Tejun Heo <tj@kernel.org>
|
||||
Cc: Will Drewry <wad@chromium.org>
|
||||
Cc: Kay Sievers <kay.sievers@vrfy.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
|
||||
commit a4f7d3032fb20f11722d266f678a004ec0f9f0b1
|
||||
Author: Stephen Warren <swarren@nvidia.com>
|
||||
Date: Thu Nov 8 16:12:27 2012 -0800
|
||||
|
||||
init: reduce PARTUUID min length to 1 from 36
|
||||
|
||||
Reduce the minimum length for a root=PARTUUID= parameter to be considered
|
||||
valid from 36 to 1. EFI/GPT partition UUIDs are always exactly 36
|
||||
characters long, hence the previous limit. However, the next patch will
|
||||
support DOS/MBR UUIDs too, which have a different, shorter, format.
|
||||
Instead of validating any particular length, just ensure that at least
|
||||
some non-empty value was given by the user.
|
||||
|
||||
Also, consider a missing UUID value to be a parsing error, in the same
|
||||
vein as if /PARTNROFF exists and can't be parsed. As such, make both
|
||||
error cases print a message and disable rootwait. Convert to pr_err while
|
||||
we're at it.
|
||||
|
||||
Signed-off-by: Stephen Warren <swarren@nvidia.com>
|
||||
Cc: Tejun Heo <tj@kernel.org>
|
||||
Cc: Will Drewry <wad@chromium.org>
|
||||
Cc: Kay Sievers <kay.sievers@vrfy.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
|
||||
commit 0422f1d96772bf35a14bc87f3bb603b9ff825799
|
||||
Author: Stephen Warren <swarren@nvidia.com>
|
||||
Date: Thu Nov 8 16:12:25 2012 -0800
|
||||
|
||||
block: store partition_meta_info.uuid as a string
|
||||
|
||||
This will allow other types of UUID to be stored here, aside from true
|
||||
UUIDs. This also simplifies code that uses this field, since it's usually
|
||||
constructed from a, used as a, or compared to other, strings.
|
||||
|
||||
Note: A simplistic approach here would be to set uuid_str[36]=0 whenever a
|
||||
/PARTNROFF option was found to be present. However, this modifies the
|
||||
input string, and causes subsequent calls to devt_from_partuuid() not to
|
||||
see the /PARTNROFF option, which causes different results. In order to
|
||||
avoid misleading future maintainers, this parameter is marked const.
|
||||
|
||||
Signed-off-by: Stephen Warren <swarren@nvidia.com>
|
||||
Cc: Tejun Heo <tj@kernel.org>
|
||||
Cc: Will Drewry <wad@chromium.org>
|
||||
Cc: Kay Sievers <kay.sievers@vrfy.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
|
||||
commit 152f0b9a9d1d0ee8c01eaa1dda689bd5d0f9d512
|
||||
Author: Vivek Goyal <vgoyal@redhat.com>
|
||||
Date: Wed Aug 1 12:24:18 2012 +0200
|
||||
|
||||
block: add partition resize function to blkpg ioctl
|
||||
|
||||
Add a new operation code (BLKPG_RESIZE_PARTITION) to the BLKPG ioctl that
|
||||
allows altering the size of an existing partition, even if it is currently
|
||||
in use.
|
||||
|
||||
This patch converts hd_struct->nr_sects into sequence counter because
|
||||
One might extend a partition while IO is happening to it and update of
|
||||
nr_sects can be non-atomic on 32bit machines with 64bit sector_t. This
|
||||
can lead to issues like reading inconsistent size of a partition. Sequence
|
||||
counter have been used so that readers don't have to take bdev mutex lock
|
||||
as we call sector_in_part() very frequently.
|
||||
|
||||
Now all the access to hd_struct->nr_sects should happen using sequence
|
||||
counter read/update helper functions part_nr_sects_read/part_nr_sects_write.
|
||||
There is one exception though, set_capacity()/get_capacity(). I think
|
||||
theoritically race should exist there too but this patch does not
|
||||
modify set_capacity()/get_capacity() due to sheer number of call sites
|
||||
and I am afraid that change might break something. I have left that as a
|
||||
TODO item. We can handle it later if need be. This patch does not introduce
|
||||
any new races as such w.r.t set_capacity()/get_capacity().
|
||||
|
||||
v2: Add CONFIG_LBDAF test to UP preempt case as suggested by Phillip.
|
||||
|
||||
Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
|
||||
Signed-off-by: Phillip Susi <psusi@ubuntu.com>
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
block/genhd.c | 28 +++++++++++---------
|
||||
block/ioctl.c | 59 +++++++++++++++++++++++++++++++++++++++---
|
||||
block/partition-generic.c | 4 ++-
|
||||
block/partitions/efi.c | 7 +----
|
||||
block/partitions/msdos.c | 21 +++++++++++++--
|
||||
include/linux/blkpg.h | 1 +
|
||||
include/linux/genhd.h | 65 +++++++++++++++++++++++++++++++++++++++++++++--
|
||||
init/do_mounts.c | 61 +++++++++++++++++++++++++++++---------------
|
||||
8 files changed, 199 insertions(+), 47 deletions(-)
|
||||
|
||||
diff --git a/block/genhd.c b/block/genhd.c
|
||||
index dd44885..3d9d3f59 100644
|
||||
--- a/block/genhd.c
|
||||
+++ b/block/genhd.c
|
||||
@@ -154,7 +154,7 @@ struct hd_struct *disk_part_iter_next(struct disk_part_iter *piter)
|
||||
part = rcu_dereference(ptbl->part[piter->idx]);
|
||||
if (!part)
|
||||
continue;
|
||||
- if (!part->nr_sects &&
|
||||
+ if (!part_nr_sects_read(part) &&
|
||||
!(piter->flags & DISK_PITER_INCL_EMPTY) &&
|
||||
!(piter->flags & DISK_PITER_INCL_EMPTY_PART0 &&
|
||||
piter->idx == 0))
|
||||
@@ -191,7 +191,7 @@ EXPORT_SYMBOL_GPL(disk_part_iter_exit);
|
||||
static inline int sector_in_part(struct hd_struct *part, sector_t sector)
|
||||
{
|
||||
return part->start_sect <= sector &&
|
||||
- sector < part->start_sect + part->nr_sects;
|
||||
+ sector < part->start_sect + part_nr_sects_read(part);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -744,7 +744,6 @@ void __init printk_all_partitions(void)
|
||||
struct hd_struct *part;
|
||||
char name_buf[BDEVNAME_SIZE];
|
||||
char devt_buf[BDEVT_SIZE];
|
||||
- char uuid_buf[PARTITION_META_INFO_UUIDLTH * 2 + 5];
|
||||
|
||||
/*
|
||||
* Don't show empty devices or things that have been
|
||||
@@ -763,16 +762,11 @@ void __init printk_all_partitions(void)
|
||||
while ((part = disk_part_iter_next(&piter))) {
|
||||
bool is_part0 = part == &disk->part0;
|
||||
|
||||
- uuid_buf[0] = '\0';
|
||||
- if (part->info)
|
||||
- snprintf(uuid_buf, sizeof(uuid_buf), "%pU",
|
||||
- part->info->uuid);
|
||||
-
|
||||
printk("%s%s %10llu %s %s", is_part0 ? "" : " ",
|
||||
bdevt_str(part_devt(part), devt_buf),
|
||||
- (unsigned long long)part->nr_sects >> 1,
|
||||
- disk_name(disk, part->partno, name_buf),
|
||||
- uuid_buf);
|
||||
+ (unsigned long long)part_nr_sects_read(part) >> 1
|
||||
+ , disk_name(disk, part->partno, name_buf),
|
||||
+ part->info ? part->info->uuid : "");
|
||||
if (is_part0) {
|
||||
if (disk->driverfs_dev != NULL &&
|
||||
disk->driverfs_dev->driver != NULL)
|
||||
@@ -863,7 +857,7 @@ static int show_partition(struct seq_file *seqf, void *v)
|
||||
while ((part = disk_part_iter_next(&piter)))
|
||||
seq_printf(seqf, "%4d %7d %10llu %s\n",
|
||||
MAJOR(part_devt(part)), MINOR(part_devt(part)),
|
||||
- (unsigned long long)part->nr_sects >> 1,
|
||||
+ (unsigned long long)part_nr_sects_read(part) >> 1,
|
||||
disk_name(sgp, part->partno, buf));
|
||||
disk_part_iter_exit(&piter);
|
||||
|
||||
@@ -1286,6 +1280,16 @@ struct gendisk *alloc_disk_node(int minors, int node_id)
|
||||
}
|
||||
disk->part_tbl->part[0] = &disk->part0;
|
||||
|
||||
+ /*
|
||||
+ * set_capacity() and get_capacity() currently don't use
|
||||
+ * seqcounter to read/update the part0->nr_sects. Still init
|
||||
+ * the counter as we can read the sectors in IO submission
|
||||
+ * patch using seqence counters.
|
||||
+ *
|
||||
+ * TODO: Ideally set_capacity() and get_capacity() should be
|
||||
+ * converted to make use of bd_mutex and sequence counters.
|
||||
+ */
|
||||
+ seqcount_init(&disk->part0.nr_sects_seq);
|
||||
hd_ref_init(&disk->part0);
|
||||
|
||||
disk->minors = minors;
|
||||
diff --git a/block/ioctl.c b/block/ioctl.c
|
||||
index ba15b2d..4476e0e8 100644
|
||||
--- a/block/ioctl.c
|
||||
+++ b/block/ioctl.c
|
||||
@@ -13,7 +13,7 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user
|
||||
{
|
||||
struct block_device *bdevp;
|
||||
struct gendisk *disk;
|
||||
- struct hd_struct *part;
|
||||
+ struct hd_struct *part, *lpart;
|
||||
struct blkpg_ioctl_arg a;
|
||||
struct blkpg_partition p;
|
||||
struct disk_part_iter piter;
|
||||
@@ -36,8 +36,8 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user
|
||||
case BLKPG_ADD_PARTITION:
|
||||
start = p.start >> 9;
|
||||
length = p.length >> 9;
|
||||
- /* check for fit in a hd_struct */
|
||||
- if (sizeof(sector_t) == sizeof(long) &&
|
||||
+ /* check for fit in a hd_struct */
|
||||
+ if (sizeof(sector_t) == sizeof(long) &&
|
||||
sizeof(long long) > sizeof(long)) {
|
||||
long pstart = start, plength = length;
|
||||
if (pstart != start || plength != length
|
||||
@@ -92,6 +92,59 @@ static int blkpg_ioctl(struct block_device *bdev, struct blkpg_ioctl_arg __user
|
||||
bdput(bdevp);
|
||||
|
||||
return 0;
|
||||
+ case BLKPG_RESIZE_PARTITION:
|
||||
+ start = p.start >> 9;
|
||||
+ /* new length of partition in bytes */
|
||||
+ length = p.length >> 9;
|
||||
+ /* check for fit in a hd_struct */
|
||||
+ if (sizeof(sector_t) == sizeof(long) &&
|
||||
+ sizeof(long long) > sizeof(long)) {
|
||||
+ long pstart = start, plength = length;
|
||||
+ if (pstart != start || plength != length
|
||||
+ || pstart < 0 || plength < 0)
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ part = disk_get_part(disk, partno);
|
||||
+ if (!part)
|
||||
+ return -ENXIO;
|
||||
+ bdevp = bdget(part_devt(part));
|
||||
+ if (!bdevp) {
|
||||
+ disk_put_part(part);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+ mutex_lock(&bdevp->bd_mutex);
|
||||
+ mutex_lock_nested(&bdev->bd_mutex, 1);
|
||||
+ if (start != part->start_sect) {
|
||||
+ mutex_unlock(&bdevp->bd_mutex);
|
||||
+ mutex_unlock(&bdev->bd_mutex);
|
||||
+ bdput(bdevp);
|
||||
+ disk_put_part(part);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ /* overlap? */
|
||||
+ disk_part_iter_init(&piter, disk,
|
||||
+ DISK_PITER_INCL_EMPTY);
|
||||
+ while ((lpart = disk_part_iter_next(&piter))) {
|
||||
+ if (lpart->partno != partno &&
|
||||
+ !(start + length <= lpart->start_sect ||
|
||||
+ start >= lpart->start_sect + lpart->nr_sects)
|
||||
+ ) {
|
||||
+ disk_part_iter_exit(&piter);
|
||||
+ mutex_unlock(&bdevp->bd_mutex);
|
||||
+ mutex_unlock(&bdev->bd_mutex);
|
||||
+ bdput(bdevp);
|
||||
+ disk_put_part(part);
|
||||
+ return -EBUSY;
|
||||
+ }
|
||||
+ }
|
||||
+ disk_part_iter_exit(&piter);
|
||||
+ part_nr_sects_write(part, (sector_t)length);
|
||||
+ i_size_write(bdevp->bd_inode, p.length);
|
||||
+ mutex_unlock(&bdevp->bd_mutex);
|
||||
+ mutex_unlock(&bdev->bd_mutex);
|
||||
+ bdput(bdevp);
|
||||
+ disk_put_part(part);
|
||||
+ return 0;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
diff --git a/block/partition-generic.c b/block/partition-generic.c
|
||||
index 8d9281d..d5f9306 100644
|
||||
--- a/block/partition-generic.c
|
||||
+++ b/block/partition-generic.c
|
||||
@@ -89,7 +89,7 @@ ssize_t part_size_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct hd_struct *p = dev_to_part(dev);
|
||||
- return sprintf(buf, "%llu\n",(unsigned long long)p->nr_sects);
|
||||
+ return sprintf(buf, "%llu\n",(unsigned long long)part_nr_sects_read(p));
|
||||
}
|
||||
|
||||
static ssize_t part_ro_show(struct device *dev,
|
||||
@@ -310,6 +310,8 @@ struct hd_struct *add_partition(struct gendisk *disk, int partno,
|
||||
err = -ENOMEM;
|
||||
goto out_free;
|
||||
}
|
||||
+
|
||||
+ seqcount_init(&p->nr_sects_seq);
|
||||
pdev = part_to_dev(p);
|
||||
|
||||
p->start_sect = start;
|
||||
diff --git a/block/partitions/efi.c b/block/partitions/efi.c
|
||||
index 6296b40..b62fb88 100644
|
||||
--- a/block/partitions/efi.c
|
||||
+++ b/block/partitions/efi.c
|
||||
@@ -620,7 +620,6 @@ int efi_partition(struct parsed_partitions *state)
|
||||
gpt_entry *ptes = NULL;
|
||||
u32 i;
|
||||
unsigned ssz = bdev_logical_block_size(state->bdev) / 512;
|
||||
- u8 unparsed_guid[37];
|
||||
|
||||
if (!find_valid_gpt(state, &gpt, &ptes) || !gpt || !ptes) {
|
||||
kfree(gpt);
|
||||
@@ -649,11 +648,7 @@ int efi_partition(struct parsed_partitions *state)
|
||||
state->parts[i + 1].flags = ADDPART_FLAG_RAID;
|
||||
|
||||
info = &state->parts[i + 1].info;
|
||||
- /* Instead of doing a manual swap to big endian, reuse the
|
||||
- * common ASCII hex format as the interim.
|
||||
- */
|
||||
- efi_guid_unparse(&ptes[i].unique_partition_guid, unparsed_guid);
|
||||
- part_pack_uuid(unparsed_guid, info->uuid);
|
||||
+ efi_guid_unparse(&ptes[i].unique_partition_guid, info->uuid);
|
||||
|
||||
/* Naively convert UTF16-LE to 7 bits. */
|
||||
label_max = min(sizeof(info->volname) - 1,
|
||||
diff --git a/block/partitions/msdos.c b/block/partitions/msdos.c
|
||||
index 5f79a66..8752a5d 100644
|
||||
--- a/block/partitions/msdos.c
|
||||
+++ b/block/partitions/msdos.c
|
||||
@@ -94,6 +94,17 @@ static int aix_magic_present(struct parsed_partitions *state, unsigned char *p)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static void set_info(struct parsed_partitions *state, int slot,
|
||||
+ u32 disksig)
|
||||
+{
|
||||
+ struct partition_meta_info *info = &state->parts[slot].info;
|
||||
+
|
||||
+ snprintf(info->uuid, sizeof(info->uuid), "%08x-%02x", disksig,
|
||||
+ slot);
|
||||
+ info->volname[0] = 0;
|
||||
+ state->parts[slot].has_info = true;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Create devices for each logical partition in an extended partition.
|
||||
* The logical partitions form a linked list, with each entry being
|
||||
@@ -106,7 +117,8 @@ static int aix_magic_present(struct parsed_partitions *state, unsigned char *p)
|
||||
*/
|
||||
|
||||
static void parse_extended(struct parsed_partitions *state,
|
||||
- sector_t first_sector, sector_t first_size)
|
||||
+ sector_t first_sector, sector_t first_size,
|
||||
+ u32 disksig)
|
||||
{
|
||||
struct partition *p;
|
||||
Sector sect;
|
||||
@@ -166,6 +178,7 @@ static void parse_extended(struct parsed_partitions *state,
|
||||
}
|
||||
|
||||
put_partition(state, state->next, next, size);
|
||||
+ set_info(state, state->next, disksig);
|
||||
if (SYS_IND(p) == LINUX_RAID_PARTITION)
|
||||
state->parts[state->next].flags = ADDPART_FLAG_RAID;
|
||||
loopct = 0;
|
||||
@@ -437,6 +450,7 @@ int msdos_partition(struct parsed_partitions *state)
|
||||
struct partition *p;
|
||||
struct fat_boot_sector *fb;
|
||||
int slot;
|
||||
+ u32 disksig;
|
||||
|
||||
data = read_part_sector(state, 0, §);
|
||||
if (!data)
|
||||
@@ -491,6 +505,8 @@ int msdos_partition(struct parsed_partitions *state)
|
||||
#endif
|
||||
p = (struct partition *) (data + 0x1be);
|
||||
|
||||
+ disksig = le32_to_cpup((__le32 *)(data + 0x1b8));
|
||||
+
|
||||
/*
|
||||
* Look for partitions in two passes:
|
||||
* First find the primary and DOS-type extended partitions.
|
||||
@@ -515,11 +531,12 @@ int msdos_partition(struct parsed_partitions *state)
|
||||
put_partition(state, slot, start, n);
|
||||
|
||||
strlcat(state->pp_buf, " <", PAGE_SIZE);
|
||||
- parse_extended(state, start, size);
|
||||
+ parse_extended(state, start, size, disksig);
|
||||
strlcat(state->pp_buf, " >", PAGE_SIZE);
|
||||
continue;
|
||||
}
|
||||
put_partition(state, slot, start, size);
|
||||
+ set_info(state, slot, disksig);
|
||||
if (SYS_IND(p) == LINUX_RAID_PARTITION)
|
||||
state->parts[slot].flags = ADDPART_FLAG_RAID;
|
||||
if (SYS_IND(p) == DM6_PARTITION)
|
||||
diff --git a/include/linux/blkpg.h b/include/linux/blkpg.h
|
||||
index faf8a45..a851944 100644
|
||||
--- a/include/linux/blkpg.h
|
||||
+++ b/include/linux/blkpg.h
|
||||
@@ -40,6 +40,7 @@ struct blkpg_ioctl_arg {
|
||||
/* The subfunctions (for the op field) */
|
||||
#define BLKPG_ADD_PARTITION 1
|
||||
#define BLKPG_DEL_PARTITION 2
|
||||
+#define BLKPG_RESIZE_PARTITION 3
|
||||
|
||||
/* Sizes of name fields. Unused at present. */
|
||||
#define BLKPG_DEVNAMELTH 64
|
||||
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
|
||||
index 017a7fb..9747efc 100644
|
||||
--- a/include/linux/genhd.h
|
||||
+++ b/include/linux/genhd.h
|
||||
@@ -89,16 +89,26 @@ struct disk_stats {
|
||||
};
|
||||
|
||||
#define PARTITION_META_INFO_VOLNAMELTH 64
|
||||
-#define PARTITION_META_INFO_UUIDLTH 16
|
||||
+/*
|
||||
+ * Enough for the string representation of any kind of UUID plus NULL.
|
||||
+ * EFI UUID is 36 characters. MSDOS UUID is 11 characters.
|
||||
+ */
|
||||
+#define PARTITION_META_INFO_UUIDLTH 37
|
||||
|
||||
struct partition_meta_info {
|
||||
- u8 uuid[PARTITION_META_INFO_UUIDLTH]; /* always big endian */
|
||||
+ char uuid[PARTITION_META_INFO_UUIDLTH];
|
||||
u8 volname[PARTITION_META_INFO_VOLNAMELTH];
|
||||
};
|
||||
|
||||
struct hd_struct {
|
||||
sector_t start_sect;
|
||||
+ /*
|
||||
+ * nr_sects is protected by sequence counter. One might extend a
|
||||
+ * partition while IO is happening to it and update of nr_sects
|
||||
+ * can be non-atomic on 32bit machines with 64bit sector_t.
|
||||
+ */
|
||||
sector_t nr_sects;
|
||||
+ seqcount_t nr_sects_seq;
|
||||
sector_t alignment_offset;
|
||||
unsigned int discard_alignment;
|
||||
struct device __dev;
|
||||
@@ -648,6 +658,57 @@ static inline void hd_struct_put(struct hd_struct *part)
|
||||
__delete_partition(part);
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * Any access of part->nr_sects which is not protected by partition
|
||||
+ * bd_mutex or gendisk bdev bd_mutex, should be done using this
|
||||
+ * accessor function.
|
||||
+ *
|
||||
+ * Code written along the lines of i_size_read() and i_size_write().
|
||||
+ * CONFIG_PREEMPT case optimizes the case of UP kernel with preemption
|
||||
+ * on.
|
||||
+ */
|
||||
+static inline sector_t part_nr_sects_read(struct hd_struct *part)
|
||||
+{
|
||||
+#if BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_SMP)
|
||||
+ sector_t nr_sects;
|
||||
+ unsigned seq;
|
||||
+ do {
|
||||
+ seq = read_seqcount_begin(&part->nr_sects_seq);
|
||||
+ nr_sects = part->nr_sects;
|
||||
+ } while (read_seqcount_retry(&part->nr_sects_seq, seq));
|
||||
+ return nr_sects;
|
||||
+#elif BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_PREEMPT)
|
||||
+ sector_t nr_sects;
|
||||
+
|
||||
+ preempt_disable();
|
||||
+ nr_sects = part->nr_sects;
|
||||
+ preempt_enable();
|
||||
+ return nr_sects;
|
||||
+#else
|
||||
+ return part->nr_sects;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Should be called with mutex lock held (typically bd_mutex) of partition
|
||||
+ * to provide mutual exlusion among writers otherwise seqcount might be
|
||||
+ * left in wrong state leaving the readers spinning infinitely.
|
||||
+ */
|
||||
+static inline void part_nr_sects_write(struct hd_struct *part, sector_t size)
|
||||
+{
|
||||
+#if BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_SMP)
|
||||
+ write_seqcount_begin(&part->nr_sects_seq);
|
||||
+ part->nr_sects = size;
|
||||
+ write_seqcount_end(&part->nr_sects_seq);
|
||||
+#elif BITS_PER_LONG==32 && defined(CONFIG_LBDAF) && defined(CONFIG_PREEMPT)
|
||||
+ preempt_disable();
|
||||
+ part->nr_sects = size;
|
||||
+ preempt_enable();
|
||||
+#else
|
||||
+ part->nr_sects = size;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
#else /* CONFIG_BLOCK */
|
||||
|
||||
static inline void printk_all_partitions(void) { }
|
||||
diff --git a/init/do_mounts.c b/init/do_mounts.c
|
||||
index 7b81405..97fb6f0 100644
|
||||
--- a/init/do_mounts.c
|
||||
+++ b/init/do_mounts.c
|
||||
@@ -59,23 +59,28 @@ __setup("ro", readonly);
|
||||
__setup("rw", readwrite);
|
||||
|
||||
#ifdef CONFIG_BLOCK
|
||||
+struct uuidcmp {
|
||||
+ const char *uuid;
|
||||
+ int len;
|
||||
+};
|
||||
+
|
||||
/**
|
||||
* match_dev_by_uuid - callback for finding a partition using its uuid
|
||||
* @dev: device passed in by the caller
|
||||
- * @data: opaque pointer to a 36 byte char array with a UUID
|
||||
+ * @data: opaque pointer to the desired struct uuidcmp to match
|
||||
*
|
||||
* Returns 1 if the device matches, and 0 otherwise.
|
||||
*/
|
||||
static int match_dev_by_uuid(struct device *dev, void *data)
|
||||
{
|
||||
- u8 *uuid = data;
|
||||
+ struct uuidcmp *cmp = data;
|
||||
struct hd_struct *part = dev_to_part(dev);
|
||||
|
||||
if (!part->info)
|
||||
goto no_match;
|
||||
|
||||
- if (memcmp(uuid, part->info->uuid, sizeof(part->info->uuid)))
|
||||
- goto no_match;
|
||||
+ if (strncasecmp(cmp->uuid, part->info->uuid, cmp->len))
|
||||
+ goto no_match;
|
||||
|
||||
return 1;
|
||||
no_match:
|
||||
@@ -85,7 +90,7 @@ no_match:
|
||||
|
||||
/**
|
||||
* devt_from_partuuid - looks up the dev_t of a partition by its UUID
|
||||
- * @uuid: min 36 byte char array containing a hex ascii UUID
|
||||
+ * @uuid: char array containing ascii UUID
|
||||
*
|
||||
* The function will return the first partition which contains a matching
|
||||
* UUID value in its partition_meta_info struct. This does not search
|
||||
@@ -96,38 +101,41 @@ no_match:
|
||||
*
|
||||
* Returns the matching dev_t on success or 0 on failure.
|
||||
*/
|
||||
-static dev_t devt_from_partuuid(char *uuid_str)
|
||||
+static dev_t devt_from_partuuid(const char *uuid_str)
|
||||
{
|
||||
dev_t res = 0;
|
||||
+ struct uuidcmp cmp;
|
||||
struct device *dev = NULL;
|
||||
- u8 uuid[16];
|
||||
struct gendisk *disk;
|
||||
struct hd_struct *part;
|
||||
int offset = 0;
|
||||
+ bool clear_root_wait = false;
|
||||
+ char *slash;
|
||||
|
||||
- if (strlen(uuid_str) < 36)
|
||||
- goto done;
|
||||
+ cmp.uuid = uuid_str;
|
||||
|
||||
+ slash = strchr(uuid_str, '/');
|
||||
/* Check for optional partition number offset attributes. */
|
||||
- if (uuid_str[36]) {
|
||||
+ if (slash) {
|
||||
char c = 0;
|
||||
/* Explicitly fail on poor PARTUUID syntax. */
|
||||
- if (sscanf(&uuid_str[36],
|
||||
- "/PARTNROFF=%d%c", &offset, &c) != 1) {
|
||||
- printk(KERN_ERR "VFS: PARTUUID= is invalid.\n"
|
||||
- "Expected PARTUUID=<valid-uuid-id>[/PARTNROFF=%%d]\n");
|
||||
- if (root_wait)
|
||||
- printk(KERN_ERR
|
||||
- "Disabling rootwait; root= is invalid.\n");
|
||||
- root_wait = 0;
|
||||
+ if (sscanf(slash + 1,
|
||||
+ "PARTNROFF=%d%c", &offset, &c) != 1) {
|
||||
+ clear_root_wait = true;
|
||||
goto done;
|
||||
}
|
||||
+ cmp.len = slash - uuid_str;
|
||||
+ } else {
|
||||
+ cmp.len = strlen(uuid_str);
|
||||
}
|
||||
|
||||
- /* Pack the requested UUID in the expected format. */
|
||||
- part_pack_uuid(uuid_str, uuid);
|
||||
+ if (!cmp.len) {
|
||||
+ clear_root_wait = true;
|
||||
+ goto done;
|
||||
+ }
|
||||
|
||||
- dev = class_find_device(&block_class, NULL, uuid, &match_dev_by_uuid);
|
||||
+ dev = class_find_device(&block_class, NULL, &cmp,
|
||||
+ &match_dev_by_uuid);
|
||||
if (!dev)
|
||||
goto done;
|
||||
|
||||
@@ -148,6 +156,13 @@ static dev_t devt_from_partuuid(char *uuid_str)
|
||||
no_offset:
|
||||
put_device(dev);
|
||||
done:
|
||||
+ if (clear_root_wait) {
|
||||
+ pr_err("VFS: PARTUUID= is invalid.\n"
|
||||
+ "Expected PARTUUID=<valid-uuid-id>[/PARTNROFF=%%d]\n");
|
||||
+ if (root_wait)
|
||||
+ pr_err("Disabling rootwait; root= is invalid.\n");
|
||||
+ root_wait = 0;
|
||||
+ }
|
||||
return res;
|
||||
}
|
||||
#endif
|
||||
@@ -164,6 +179,10 @@ done:
|
||||
* used when disk name of partitioned disk ends on a digit.
|
||||
* 6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
|
||||
* unique id of a partition if the partition table provides it.
|
||||
+ * The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
|
||||
+ * partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
|
||||
+ * filled hex representation of the 32-bit "NT disk signature", and PP
|
||||
+ * is a zero-filled hex representation of the 1-based partition number.
|
||||
* 7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to
|
||||
* a partition with a known unique id.
|
||||
*
|
||||
--
|
||||
2.2.1
|
||||
|
|
@ -1,261 +0,0 @@
|
|||
# Maintainer: WarheadsSE <max@warheads.net>
|
||||
# Maintainer: Kevin Mihelich <kevin@archlinuxarm.org>
|
||||
|
||||
buildarch=4
|
||||
|
||||
pkgbase=linux-sun4i
|
||||
_commit=9a1cd034181af628d4145202289e1993c1687db6
|
||||
_srcname=linux-sunxi-${_commit}
|
||||
_kernelname=${pkgname#linux}
|
||||
_desc="AllWinner A10"
|
||||
pkgver=3.4.103
|
||||
pkgrel=3
|
||||
arch=('armv7h')
|
||||
url="http://www.kernel.org/"
|
||||
license=('GPL2')
|
||||
makedepends=('xmlto' 'docbook-xsl' 'uboot-mkimage' 'bc' 'kmod' 'inetutils' 'git')
|
||||
options=('!strip')
|
||||
source=("https://github.com/linux-sunxi/linux-sunxi/archive/${_commit}.tar.gz"
|
||||
'0001-Backport-BFP-XOR-operation.patch'
|
||||
'0001-Backport-firmware-loader.patch'
|
||||
'0001-Backport-msdos-partition-UUIDs.patch'
|
||||
'config')
|
||||
md5sums=('6cdd44f9131a854cdbf5ddad86187c57'
|
||||
'ca5b466850782493b99e824d6efbea4d'
|
||||
'520bde63dd6803f3332e9b26cb34cff9'
|
||||
'743724d560cf34dadefb8e976a31319c'
|
||||
'4592842f7b5702452815d5601f43ab7a')
|
||||
|
||||
prepare() {
|
||||
cd "${srcdir}/${_srcname}"
|
||||
|
||||
cat "${srcdir}/config" > ./.config
|
||||
|
||||
git apply ../0001-Backport-BFP-XOR-operation.patch
|
||||
git apply ../0001-Backport-firmware-loader.patch
|
||||
git apply ../0001-Backport-msdos-partition-UUIDs.patch
|
||||
|
||||
# add pkgrel to extraversion
|
||||
sed -ri "s|^(EXTRAVERSION =)(.*)|\1 \2-${pkgrel}|" Makefile
|
||||
|
||||
# don't run depmod on 'make install'. We'll do this ourselves in packaging
|
||||
sed -i '2iexit 0' scripts/depmod.sh
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "${srcdir}/${_srcname}"
|
||||
|
||||
LDFLAGS=""
|
||||
|
||||
# get kernel version
|
||||
make prepare
|
||||
|
||||
# load configuration
|
||||
# Configure the kernel. Replace the line below with one of your choice.
|
||||
#make menuconfig # CLI menu for configuration
|
||||
#make nconfig # new CLI menu for configuration
|
||||
#make xconfig # X-based configuration
|
||||
#make oldconfig # using old config from previous kernel version
|
||||
# ... or manually edit .config
|
||||
|
||||
# Copy back our configuration (use with new kernel version)
|
||||
#cp ./.config ../${pkgver}.config
|
||||
|
||||
####################
|
||||
# stop here
|
||||
# this is useful to configure the kernel
|
||||
#msg "Stopping build"
|
||||
#return 1
|
||||
####################
|
||||
|
||||
#yes "" | make config
|
||||
|
||||
# build!
|
||||
make ${MAKEFLAGS} modules uImage
|
||||
}
|
||||
|
||||
_package() {
|
||||
pkgdesc="The Linux Kernel and modules - ${_desc}"
|
||||
depends=('coreutils' 'linux-firmware' 'module-init-tools>=3.16')
|
||||
optdepends=('crda: to set the correct wireless channels of your country')
|
||||
provides=("kernel26" "linux=${pkgver}")
|
||||
conflicts=('kernel26' 'linux')
|
||||
install=${pkgname}.install
|
||||
|
||||
cd "${srcdir}/${_srcname}"
|
||||
|
||||
KARCH=arm
|
||||
|
||||
# get kernel version
|
||||
_kernver="$(make kernelrelease)"
|
||||
|
||||
mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot}
|
||||
make INSTALL_MOD_PATH="${pkgdir}" modules_install
|
||||
#cd arch/$KARCH/boot/
|
||||
|
||||
cd "${srcdir}/${_srcname}"
|
||||
#cp arch/$KARCH/boot/kernel.img ${pkgdir}/boot/kernel.img
|
||||
cp arch/$KARCH/boot/uImage "${pkgdir}/boot/uImage"
|
||||
|
||||
# set correct depmod command for install
|
||||
sed \
|
||||
-e "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/g" \
|
||||
-e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
|
||||
-i "${startdir}/${pkgname}.install"
|
||||
|
||||
# remove build and source links
|
||||
rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build}
|
||||
# remove the firmware
|
||||
rm -rf "${pkgdir}/lib/firmware"
|
||||
# gzip -9 all modules to save ~100MB of space
|
||||
find "${pkgdir}" -name '*.ko' |xargs -P 2 -n 1 gzip -9
|
||||
# make room for external modules
|
||||
ln -s "../extramodules-${pkgver}-${_kernelname:-ARCH}" "${pkgdir}/lib/modules/${_kernver}/extramodules"
|
||||
# add real version for building modules and running depmod from post_install/upgrade
|
||||
mkdir -p "${pkgdir}/lib/modules/extramodules-${pkgver}-${_kernelname:-ARCH}"
|
||||
echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${pkgver}-${_kernelname:-ARCH}/version"
|
||||
|
||||
# Now we call depmod...
|
||||
depmod -b "$pkgdir" -F System.map "$_kernver"
|
||||
|
||||
# move module tree /lib -> /usr/lib
|
||||
mkdir -p "${pkgdir}/usr"
|
||||
mv "$pkgdir/lib" "$pkgdir/usr"
|
||||
}
|
||||
|
||||
_package-headers() {
|
||||
pkgdesc="Header files and scripts for building modules for linux kernel - ${_desc}"
|
||||
provides=('kernel26-headers' "linux-headers=${pkgver}")
|
||||
conflicts=('kernel26-headers')
|
||||
replaces=('kernel26-headers')
|
||||
|
||||
install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}"
|
||||
|
||||
cd "${pkgdir}/usr/lib/modules/${_kernver}"
|
||||
ln -sf ../../../src/linux-${_kernver} build
|
||||
|
||||
cd "${srcdir}/${_srcname}"
|
||||
install -D -m644 Makefile \
|
||||
"${pkgdir}/usr/src/linux-${_kernver}/Makefile"
|
||||
install -D -m644 kernel/Makefile \
|
||||
"${pkgdir}/usr/src/linux-${_kernver}/kernel/Makefile"
|
||||
install -D -m644 .config \
|
||||
"${pkgdir}/usr/src/linux-${_kernver}/.config"
|
||||
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include"
|
||||
|
||||
for i in acpi asm-generic config crypto drm generated linux math-emu \
|
||||
media net pcmcia scsi sound trace video xen; do
|
||||
cp -a include/${i} "${pkgdir}/usr/src/linux-${_kernver}/include/"
|
||||
done
|
||||
|
||||
# copy arch includes for external modules
|
||||
mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH
|
||||
cp -a arch/$KARCH/include ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/
|
||||
mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/mach-sun4i
|
||||
cp -a arch/$KARCH/mach-sun4i/include ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/mach-sun4i/
|
||||
mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/plat-sunxi
|
||||
cp -a arch/$KARCH/plat-sunxi/include ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/plat-sunxi/
|
||||
|
||||
# copy files necessary for later builds, like nvidia and vmware
|
||||
cp Module.symvers "${pkgdir}/usr/src/linux-${_kernver}"
|
||||
cp -a scripts "${pkgdir}/usr/src/linux-${_kernver}"
|
||||
|
||||
# fix permissions on scripts dir
|
||||
chmod og-w -R "${pkgdir}/usr/src/linux-${_kernver}/scripts"
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/.tmp_versions"
|
||||
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel"
|
||||
|
||||
cp arch/${KARCH}/Makefile "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/"
|
||||
|
||||
if [ "${CARCH}" = "i686" ]; then
|
||||
cp arch/${KARCH}/Makefile_32.cpu "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/"
|
||||
fi
|
||||
|
||||
cp arch/${KARCH}/kernel/asm-offsets.s "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel/"
|
||||
|
||||
# add headers for lirc package
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video"
|
||||
|
||||
cp drivers/media/video/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/"
|
||||
|
||||
for i in bt8xx cpia2 cx25840 cx88 em28xx et61x251 pwc saa7134 sn9c102; do
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
|
||||
cp -a drivers/media/video/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
|
||||
done
|
||||
|
||||
# add docbook makefile
|
||||
install -D -m644 Documentation/DocBook/Makefile \
|
||||
"${pkgdir}/usr/src/linux-${_kernver}/Documentation/DocBook/Makefile"
|
||||
|
||||
# add dm headers
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/md"
|
||||
cp drivers/md/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/md"
|
||||
|
||||
# add inotify.h
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/linux"
|
||||
cp include/linux/inotify.h "${pkgdir}/usr/src/linux-${_kernver}/include/linux/"
|
||||
|
||||
# add wireless headers
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/"
|
||||
cp net/mac80211/*.h "${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/"
|
||||
|
||||
# add dvb headers for external modules
|
||||
# in reference to:
|
||||
# http://bugs.archlinux.org/task/9912
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core"
|
||||
cp drivers/media/dvb/dvb-core/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core/"
|
||||
# and...
|
||||
# http://bugs.archlinux.org/task/11194
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"
|
||||
cp include/config/dvb/*.h "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"
|
||||
|
||||
# add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
|
||||
# in reference to:
|
||||
# http://bugs.archlinux.org/task/13146
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
||||
cp drivers/media/dvb/frontends/lgdt330x.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
||||
cp drivers/media/video/msp3400-driver.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
||||
|
||||
# add dvb headers
|
||||
# in reference to:
|
||||
# http://bugs.archlinux.org/task/20402
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb"
|
||||
cp drivers/media/dvb/dvb-usb/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb/"
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends"
|
||||
cp drivers/media/dvb/frontends/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
|
||||
mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners"
|
||||
cp drivers/media/common/tuners/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners/"
|
||||
|
||||
# copy in Kconfig files
|
||||
for i in `find . -name "Kconfig*"`; do
|
||||
mkdir -p "${pkgdir}"/usr/src/linux-${_kernver}/`echo ${i} | sed 's|/Kconfig.*||'`
|
||||
cp ${i} "${pkgdir}/usr/src/linux-${_kernver}/${i}"
|
||||
done
|
||||
|
||||
chown -R root.root "${pkgdir}/usr/src/linux-${_kernver}"
|
||||
find "${pkgdir}/usr/src/linux-${_kernver}" -type d -exec chmod 755 {} \;
|
||||
|
||||
# strip scripts directory
|
||||
find "${pkgdir}/usr/src/linux-${_kernver}/scripts" -type f -perm -u+w 2>/dev/null | while read binary ; do
|
||||
case "$(file -bi "${binary}")" in
|
||||
*application/x-sharedlib*) # Libraries (.so)
|
||||
/usr/bin/strip ${STRIP_SHARED} "${binary}";;
|
||||
*application/x-archive*) # Libraries (.a)
|
||||
/usr/bin/strip ${STRIP_STATIC} "${binary}";;
|
||||
*application/x-executable*) # Binaries
|
||||
/usr/bin/strip ${STRIP_BINARIES} "${binary}";;
|
||||
esac
|
||||
done
|
||||
|
||||
# remove unneeded architectures
|
||||
rm -rf "${pkgdir}"/usr/src/linux-${_kernver}/arch/{alpha,arm26,avr32,blackfin,cris,frv,h8300,ia64,m32r,m68k,m68knommu,mips,microblaze,mn10300,parisc,powerpc,ppc,s390,sh,sh64,sparc,sparc64,um,v850,x86,xtensa}
|
||||
}
|
||||
|
||||
pkgname=("${pkgbase}" "${pkgbase}-headers")
|
||||
for _p in ${pkgname[@]}; do
|
||||
eval "package_${_p}() {
|
||||
_package${_p#${pkgbase}}
|
||||
}"
|
||||
done
|
File diff suppressed because it is too large
Load diff
|
@ -1,24 +0,0 @@
|
|||
# arg 1: the new package version
|
||||
# arg 2: the old package version
|
||||
|
||||
KERNEL_NAME=
|
||||
KERNEL_VERSION=3.4.79-1-ARCH
|
||||
|
||||
post_install () {
|
||||
# updating module dependencies
|
||||
echo ">>> Updating module dependencies. Please wait ..."
|
||||
depmod ${KERNEL_VERSION}
|
||||
}
|
||||
|
||||
post_upgrade() {
|
||||
if grep "^[^#]*[[:space:]]/boot" etc/fstab 2>&1 >/dev/null; then
|
||||
if ! grep "[[:space:]]/boot" etc/mtab 2>&1 >/dev/null; then
|
||||
echo "WARNING: /boot appears to be a seperate partition but is not mounted."
|
||||
echo " You probably just broke your system. Congratulations."
|
||||
fi
|
||||
fi
|
||||
|
||||
# updating module dependencies
|
||||
echo ">>> Updating module dependencies. Please wait ..."
|
||||
depmod ${KERNEL_VERSION}
|
||||
}
|
|
@ -1,204 +0,0 @@
|
|||
--- a/arch/arm/lib/memset.S
|
||||
+++ b/arch/arm/lib/memset.S
|
||||
@@ -19,9 +19,9 @@
|
||||
1: subs r2, r2, #4 @ 1 do we have enough
|
||||
blt 5f @ 1 bytes to align with?
|
||||
cmp r3, #2 @ 1
|
||||
- strltb r1, [r0], #1 @ 1
|
||||
- strleb r1, [r0], #1 @ 1
|
||||
- strb r1, [r0], #1 @ 1
|
||||
+ strltb r1, [ip], #1 @ 1
|
||||
+ strleb r1, [ip], #1 @ 1
|
||||
+ strb r1, [ip], #1 @ 1
|
||||
add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
|
||||
/*
|
||||
* The pointer is now aligned and the length is adjusted. Try doing the
|
||||
@@ -29,10 +29,14 @@
|
||||
*/
|
||||
|
||||
ENTRY(memset)
|
||||
- ands r3, r0, #3 @ 1 unaligned?
|
||||
+/*
|
||||
+ * Preserve the contents of r0 for the return value.
|
||||
+ */
|
||||
+ mov ip, r0
|
||||
+ ands r3, ip, #3 @ 1 unaligned?
|
||||
bne 1b @ 1
|
||||
/*
|
||||
- * we know that the pointer in r0 is aligned to a word boundary.
|
||||
+ * we know that the pointer in ip is aligned to a word boundary.
|
||||
*/
|
||||
orr r1, r1, r1, lsl #8
|
||||
orr r1, r1, r1, lsl #16
|
||||
@@ -43,29 +47,28 @@ ENTRY(memset)
|
||||
#if ! CALGN(1)+0
|
||||
|
||||
/*
|
||||
- * We need an extra register for this loop - save the return address and
|
||||
- * use the LR
|
||||
+ * We need 2 extra registers for this loop - use r8 and the LR
|
||||
*/
|
||||
- str lr, [sp, #-4]!
|
||||
- mov ip, r1
|
||||
+ stmfd sp!, {r8, lr}
|
||||
+ mov r8, r1
|
||||
mov lr, r1
|
||||
|
||||
2: subs r2, r2, #64
|
||||
- stmgeia r0!, {r1, r3, ip, lr} @ 64 bytes at a time.
|
||||
- stmgeia r0!, {r1, r3, ip, lr}
|
||||
- stmgeia r0!, {r1, r3, ip, lr}
|
||||
- stmgeia r0!, {r1, r3, ip, lr}
|
||||
+ stmgeia ip!, {r1, r3, r8, lr} @ 64 bytes at a time.
|
||||
+ stmgeia ip!, {r1, r3, r8, lr}
|
||||
+ stmgeia ip!, {r1, r3, r8, lr}
|
||||
+ stmgeia ip!, {r1, r3, r8, lr}
|
||||
bgt 2b
|
||||
- ldmeqfd sp!, {pc} @ Now <64 bytes to go.
|
||||
+ ldmeqfd sp!, {r8, pc} @ Now <64 bytes to go.
|
||||
/*
|
||||
* No need to correct the count; we're only testing bits from now on
|
||||
*/
|
||||
tst r2, #32
|
||||
- stmneia r0!, {r1, r3, ip, lr}
|
||||
- stmneia r0!, {r1, r3, ip, lr}
|
||||
+ stmneia ip!, {r1, r3, r8, lr}
|
||||
+ stmneia ip!, {r1, r3, r8, lr}
|
||||
tst r2, #16
|
||||
- stmneia r0!, {r1, r3, ip, lr}
|
||||
- ldr lr, [sp], #4
|
||||
+ stmneia ip!, {r1, r3, r8, lr}
|
||||
+ ldmfd sp!, {r8, lr}
|
||||
|
||||
#else
|
||||
|
||||
@@ -74,54 +77,54 @@ ENTRY(memset)
|
||||
* whole cache lines at once.
|
||||
*/
|
||||
|
||||
- stmfd sp!, {r4-r7, lr}
|
||||
+ stmfd sp!, {r4-r8, lr}
|
||||
mov r4, r1
|
||||
mov r5, r1
|
||||
mov r6, r1
|
||||
mov r7, r1
|
||||
- mov ip, r1
|
||||
+ mov r8, r1
|
||||
mov lr, r1
|
||||
|
||||
cmp r2, #96
|
||||
- tstgt r0, #31
|
||||
+ tstgt ip, #31
|
||||
ble 3f
|
||||
|
||||
- and ip, r0, #31
|
||||
- rsb ip, ip, #32
|
||||
- sub r2, r2, ip
|
||||
- movs ip, ip, lsl #(32 - 4)
|
||||
- stmcsia r0!, {r4, r5, r6, r7}
|
||||
- stmmiia r0!, {r4, r5}
|
||||
- tst ip, #(1 << 30)
|
||||
- mov ip, r1
|
||||
- strne r1, [r0], #4
|
||||
+ and r8, ip, #31
|
||||
+ rsb r8, r8, #32
|
||||
+ sub r2, r2, r8
|
||||
+ movs r8, r8, lsl #(32 - 4)
|
||||
+ stmcsia ip!, {r4, r5, r6, r7}
|
||||
+ stmmiia ip!, {r4, r5}
|
||||
+ tst r8, #(1 << 30)
|
||||
+ mov r8, r1
|
||||
+ strne r1, [ip], #4
|
||||
|
||||
3: subs r2, r2, #64
|
||||
- stmgeia r0!, {r1, r3-r7, ip, lr}
|
||||
- stmgeia r0!, {r1, r3-r7, ip, lr}
|
||||
+ stmgeia ip!, {r1, r3-r8, lr}
|
||||
+ stmgeia ip!, {r1, r3-r8, lr}
|
||||
bgt 3b
|
||||
- ldmeqfd sp!, {r4-r7, pc}
|
||||
+ ldmeqfd sp!, {r4-r8, pc}
|
||||
|
||||
tst r2, #32
|
||||
- stmneia r0!, {r1, r3-r7, ip, lr}
|
||||
+ stmneia ip!, {r1, r3-r8, lr}
|
||||
tst r2, #16
|
||||
- stmneia r0!, {r4-r7}
|
||||
- ldmfd sp!, {r4-r7, lr}
|
||||
+ stmneia ip!, {r4-r7}
|
||||
+ ldmfd sp!, {r4-r8, lr}
|
||||
|
||||
#endif
|
||||
|
||||
4: tst r2, #8
|
||||
- stmneia r0!, {r1, r3}
|
||||
+ stmneia ip!, {r1, r3}
|
||||
tst r2, #4
|
||||
- strne r1, [r0], #4
|
||||
+ strne r1, [ip], #4
|
||||
/*
|
||||
* When we get here, we've got less than 4 bytes to zero. We
|
||||
* may have an unaligned pointer as well.
|
||||
*/
|
||||
5: tst r2, #2
|
||||
- strneb r1, [r0], #1
|
||||
- strneb r1, [r0], #1
|
||||
+ strneb r1, [ip], #1
|
||||
+ strneb r1, [ip], #1
|
||||
tst r2, #1
|
||||
- strneb r1, [r0], #1
|
||||
+ strneb r1, [ip], #1
|
||||
mov pc, lr
|
||||
ENDPROC(memset)
|
||||
--- a/arch/arm/lib/memset.S
|
||||
+++ b/arch/arm/lib/memset.S
|
||||
@@ -14,31 +14,15 @@
|
||||
|
||||
.text
|
||||
.align 5
|
||||
- .word 0
|
||||
-
|
||||
-1: subs r2, r2, #4 @ 1 do we have enough
|
||||
- blt 5f @ 1 bytes to align with?
|
||||
- cmp r3, #2 @ 1
|
||||
- strltb r1, [ip], #1 @ 1
|
||||
- strleb r1, [ip], #1 @ 1
|
||||
- strb r1, [ip], #1 @ 1
|
||||
- add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
|
||||
-/*
|
||||
- * The pointer is now aligned and the length is adjusted. Try doing the
|
||||
- * memset again.
|
||||
- */
|
||||
|
||||
ENTRY(memset)
|
||||
-/*
|
||||
- * Preserve the contents of r0 for the return value.
|
||||
- */
|
||||
- mov ip, r0
|
||||
- ands r3, ip, #3 @ 1 unaligned?
|
||||
- bne 1b @ 1
|
||||
+ ands r3, r0, #3 @ 1 unaligned?
|
||||
+ mov ip, r0 @ preserve r0 as return value
|
||||
+ bne 6f @ 1
|
||||
/*
|
||||
* we know that the pointer in ip is aligned to a word boundary.
|
||||
*/
|
||||
- orr r1, r1, r1, lsl #8
|
||||
+1: orr r1, r1, r1, lsl #8
|
||||
orr r1, r1, r1, lsl #16
|
||||
mov r3, r1
|
||||
cmp r2, #16
|
||||
@@ -127,4 +111,13 @@ ENTRY(memset)
|
||||
tst r2, #1
|
||||
strneb r1, [ip], #1
|
||||
mov pc, lr
|
||||
+
|
||||
+6: subs r2, r2, #4 @ 1 do we have enough
|
||||
+ blt 5b @ 1 bytes to align with?
|
||||
+ cmp r3, #2 @ 1
|
||||
+ strltb r1, [ip], #1 @ 1
|
||||
+ strleb r1, [ip], #1 @ 1
|
||||
+ strb r1, [ip], #1 @ 1
|
||||
+ add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3))
|
||||
+ b 1b
|
||||
ENDPROC(memset)
|
Loading…
Reference in a new issue