sys-kernel/calculate-sources: version bump to 5.6.13, 5.4.41, 4.19.123, delete 5.5

mhiretskiy
Alexander Tratsevskiy 4 years ago
parent 8b5328e356
commit f9aa6f3466

@ -1 +0,0 @@
# Calculate append=skip merge(sys-kernel/calculate-sources)=>5.5,5.6

@ -1,2 +0,0 @@
# Calculate format=kernel name=.config
CONFIG_USB_PRINTER=m

@ -1,2 +0,0 @@
# Calculate format=kernel name=.config merge(sys-kernel/calculate-sources[pae])!=
CONFIG_HIGHMEM64G=y

@ -1,14 +0,0 @@
# Calculate format=kernel name=.config merge(sys-kernel/calculate-sources[-desktop])!=
# CONFIG_BT is not set
# CONFIG_GAMEPORT is not set
# CONFIG_HZ_1000 is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_MACINTOSH_DRIVERS is not set
# CONFIG_MEDIA_SUPPORT is not set
# CONFIG_PREEMPT is not set
# CONFIG_RC_CORE is not set
# CONFIG_SOUND is not set
# CONFIG_USB_GADGET is not set

@ -1,326 +0,0 @@
# Calculate format=diff merge(sys-kernel/calculate-sources[fsync])!=
Squashed futex-wait-multiple patchset onto stable release v5.2.1
https://gitlab.collabora.com/krisman/linux/commits/futex-wait-multiple-master
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
index a89eb0accd5e..c34e52e0f787 100644
--- a/include/uapi/linux/futex.h
+++ b/include/uapi/linux/futex.h
@@ -21,6 +21,7 @@
#define FUTEX_WAKE_BITSET 10
#define FUTEX_WAIT_REQUEUE_PI 11
#define FUTEX_CMP_REQUEUE_PI 12
+#define FUTEX_WAIT_MULTIPLE 31
#define FUTEX_PRIVATE_FLAG 128
#define FUTEX_CLOCK_REALTIME 256
@@ -150,4 +151,10 @@ struct robust_list_head {
(((op & 0xf) << 28) | ((cmp & 0xf) << 24) \
| ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
+struct futex_wait_block {
+ __u32 __user *uaddr;
+ __u32 val;
+ __u32 bitset;
+};
+
#endif /* _UAPI_LINUX_FUTEX_H */
diff --git a/kernel/futex.c b/kernel/futex.c
index 6d50728ef2e7..338ae60bd86c 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -183,6 +183,7 @@ static int __read_mostly futex_cmpxchg_enabled;
#endif
#define FLAGS_CLOCKRT 0x02
#define FLAGS_HAS_TIMEOUT 0x04
+#define FLAGS_WAKE_MULTIPLE 0x08
/*
* Priority Inheritance state:
@@ -2631,6 +2632,39 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
__set_current_state(TASK_RUNNING);
}
+static int __futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
+ struct futex_q *q, struct futex_hash_bucket **hb)
+{
+
+ u32 uval;
+ int ret;
+
+retry_private:
+ *hb = queue_lock(q);
+
+ ret = get_futex_value_locked(&uval, uaddr);
+
+ if (ret) {
+ queue_unlock(*hb);
+
+ ret = get_user(uval, uaddr);
+ if (ret)
+ return ret;
+
+ if (!(flags & FLAGS_SHARED))
+ goto retry_private;
+
+ return 1;
+ }
+
+ if (uval != val) {
+ queue_unlock(*hb);
+ ret = -EWOULDBLOCK;
+ }
+
+ return ret;
+}
+
/**
* futex_wait_setup() - Prepare to wait on a futex
* @uaddr: the futex userspace address
@@ -2651,7 +2685,6 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
struct futex_q *q, struct futex_hash_bucket **hb)
{
- u32 uval;
int ret;
/*
@@ -2672,38 +2705,161 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
* absorb a wakeup if *uaddr does not match the desired values
* while the syscall executes.
*/
-retry:
- ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q->key, FUTEX_READ);
- if (unlikely(ret != 0))
- return ret;
+ do {
+ ret = get_futex_key(uaddr, flags & FLAGS_SHARED,
+ &q->key, FUTEX_READ);
+ if (unlikely(ret != 0))
+ return ret;
-retry_private:
- *hb = queue_lock(q);
+ ret = __futex_wait_setup(uaddr, val, flags, q, hb);
- ret = get_futex_value_locked(&uval, uaddr);
+ /* Drop key reference if retry or error. */
+ if (ret)
+ put_futex_key(&q->key);
+ } while (ret > 0);
- if (ret) {
- queue_unlock(*hb);
+ return ret;
+}
- ret = get_user(uval, uaddr);
- if (ret)
+static int do_futex_wait_multiple(struct futex_wait_block *wb,
+ u32 count, unsigned int flags,
+ ktime_t *abs_time)
+{
+
+ struct hrtimer_sleeper timeout, *to;
+ struct futex_hash_bucket *hb;
+ struct futex_q *qs = NULL;
+ int ret;
+ int i;
+
+ qs = kcalloc(count, sizeof(struct futex_q), GFP_KERNEL);
+ if (!qs)
+ return -ENOMEM;
+
+ to = futex_setup_timer(abs_time, &timeout, flags,
+ current->timer_slack_ns);
+ retry:
+ for (i = 0; i < count; i++) {
+ qs[i].key = FUTEX_KEY_INIT;
+ qs[i].bitset = wb[i].bitset;
+
+ ret = get_futex_key(wb[i].uaddr, flags & FLAGS_SHARED,
+ &qs[i].key, FUTEX_READ);
+ if (unlikely(ret != 0)) {
+ for (--i; i >= 0; i--)
+ put_futex_key(&qs[i].key);
goto out;
+ }
+ }
- if (!(flags & FLAGS_SHARED))
- goto retry_private;
+ set_current_state(TASK_INTERRUPTIBLE);
+
+ for (i = 0; i < count; i++) {
+ ret = __futex_wait_setup(wb[i].uaddr, wb[i].val,
+ flags, &qs[i], &hb);
+ if (ret) {
+ /* Drop the failed key directly. keys 0..(i-1)
+ * will be put by unqueue_me. */
+ put_futex_key(&qs[i].key);
+
+ /* Undo the partial work we did. */
+ for (--i; i >= 0; i--)
+ unqueue_me(&qs[i]);
+
+ __set_current_state(TASK_RUNNING);
+ if (ret > 0)
+ goto retry;
+ goto out;
+ }
+
+ /* We can't hold to the bucket lock when dealing with
+ * the next futex. Queue ourselves now so we can unlock
+ * it before moving on. */
+ queue_me(&qs[i], hb);
+ }
+
+ if (to)
+ hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS);
+
+ /* There is no easy to way to check if we are wake already on
+ * multiple futexes without waking through each one of them. So
+ * just sleep and let the scheduler handle it.
+ */
+ if (!to || to->task)
+ freezable_schedule();
+
+ __set_current_state(TASK_RUNNING);
- put_futex_key(&q->key);
+ ret = -ETIMEDOUT;
+ /* If we were woken (and unqueued), we succeeded. */
+ for (i = 0; i < count; i++)
+ if (!unqueue_me(&qs[i]))
+ ret = i;
+
+ /* Succeed wakeup */
+ if (ret >= 0)
+ goto out;
+
+ /* Woken by triggered timeout */
+ if (to && !to->task)
+ goto out;
+
+ /*
+ * We expect signal_pending(current), but we might be the
+ * victim of a spurious wakeup as well.
+ */
+ if (!signal_pending(current))
goto retry;
+
+ ret = -ERESTARTSYS;
+ if (!abs_time)
+ goto out;
+
+ ret = -ERESTART_RESTARTBLOCK;
+ out:
+ if (to) {
+ hrtimer_cancel(&to->timer);
+ destroy_hrtimer_on_stack(&to->timer);
}
- if (uval != val) {
- queue_unlock(*hb);
- ret = -EWOULDBLOCK;
+ kfree(qs);
+ return ret;
+}
+
+static int futex_wait_multiple(u32 __user *uaddr, unsigned int flags,
+ u32 count, ktime_t *abs_time)
+{
+ struct futex_wait_block *wb;
+ struct restart_block *restart;
+ int ret;
+
+ if (!count)
+ return -EINVAL;
+
+ wb = kcalloc(count, sizeof(struct futex_wait_block), GFP_KERNEL);
+ if (!wb)
+ return -ENOMEM;
+
+ if (copy_from_user(wb, uaddr,
+ count * sizeof(struct futex_wait_block))) {
+ ret = -EFAULT;
+ goto out;
+ }
+
+ ret = do_futex_wait_multiple(wb, count, flags, abs_time);
+
+ if (ret == -ERESTART_RESTARTBLOCK) {
+ restart = &current->restart_block;
+ restart->fn = futex_wait_restart;
+ restart->futex.uaddr = uaddr;
+ restart->futex.val = count;
+ restart->futex.time = *abs_time;
+ restart->futex.flags = (flags | FLAGS_HAS_TIMEOUT |
+ FLAGS_WAKE_MULTIPLE);
}
out:
- if (ret)
- put_futex_key(&q->key);
+ kfree(wb);
return ret;
}
@@ -2784,6 +2940,10 @@ static long futex_wait_restart(struct restart_block *restart)
}
restart->fn = do_no_restart_syscall;
+ if (restart->futex.flags & FLAGS_WAKE_MULTIPLE)
+ return (long)futex_wait_multiple(uaddr, restart->futex.flags,
+ restart->futex.val, tp);
+
return (long)futex_wait(uaddr, restart->futex.flags,
restart->futex.val, tp, restart->futex.bitset);
}
@@ -3667,6 +3827,8 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
uaddr2);
case FUTEX_CMP_REQUEUE_PI:
return futex_requeue(uaddr, flags, uaddr2, val, val2, &val3, 1);
+ case FUTEX_WAIT_MULTIPLE:
+ return futex_wait_multiple(uaddr, flags, val, timeout);
}
return -ENOSYS;
}
@@ -3683,7 +3845,8 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI ||
cmd == FUTEX_WAIT_BITSET ||
- cmd == FUTEX_WAIT_REQUEUE_PI)) {
+ cmd == FUTEX_WAIT_REQUEUE_PI ||
+ cmd == FUTEX_WAIT_MULTIPLE)) {
if (unlikely(should_fail_futex(!(op & FUTEX_PRIVATE_FLAG))))
return -EFAULT;
if (get_timespec64(&ts, utime))
@@ -3692,7 +3855,7 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
return -EINVAL;
t = timespec64_to_ktime(ts);
- if (cmd == FUTEX_WAIT)
+ if (cmd == FUTEX_WAIT || cmd == FUTEX_WAIT_MULTIPLE)
t = ktime_add_safe(ktime_get(), t);
tp = &t;
}
@@ -3876,14 +4039,15 @@ SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI ||
cmd == FUTEX_WAIT_BITSET ||
- cmd == FUTEX_WAIT_REQUEUE_PI)) {
+ cmd == FUTEX_WAIT_REQUEUE_PI ||
+ cmd == FUTEX_WAIT_MULTIPLE)) {
if (get_old_timespec32(&ts, utime))
return -EFAULT;
if (!timespec64_valid(&ts))
return -EINVAL;
t = timespec64_to_ktime(ts);
- if (cmd == FUTEX_WAIT)
+ if (cmd == FUTEX_WAIT || cmd == FUTEX_WAIT_MULTIPLE)
t = ktime_add_safe(ktime_get(), t);
tp = &t;
}

@ -1,10 +1,8 @@
DIST linux-4.19.tar.xz 103117552 BLAKE2B 1dbf16cf410867412d17568fe42bc1e90c034183b654d270b650621ff7664a321950943d0639205bc1ee7ef6210be170c1f2c785a042ed8a4ec5e3a486d890e0 SHA512 ab67cc746b375a8b135e8b23e35e1d6787930d19b3c26b2679787d62951cbdbc3bb66f8ededeb9b890e5008b2459397f9018f1a6772fdef67780b06a4cb9f6f4
DIST linux-5.4.tar.xz 109441440 BLAKE2B 193bc4a3147e147d5529956164ec4912fad5d5c6fb07f909ff1056e57235834173194afc686993ccd785c1ff15804de0961b625f3008cca0e27493efc8f27b13 SHA512 9f60f77e8ab972b9438ac648bed17551c8491d6585a5e85f694b2eaa4c623fbc61eb18419b2656b6795eac5deec0edaa04547fc6723fbda52256bd7f3486898f
DIST linux-5.5.tar.xz 110713660 BLAKE2B 36b990d3650c409652206c319c93c0cf68885334050bc286b479c8b844bc47354547e19eebb58caafb026b96d134f39f0c7ce38b4eebe9da7ea6d1610a1e2af2 SHA512 fa74fdabb5e63384a39e54da05b86a9ae9ea16179524b041fbbdffc7177e80b53600ae98d76be127ba216148f9dc55fe07ab20637e22c6d6030cb4aa09eb2f86
DIST linux-5.6.tar.xz 111785252 BLAKE2B 8dbe02a8ca7fd3dcf512a15c5d8098c1e7f94257e65173fed43fcc45480e4ab790df8cd39bbbb4e2a21dc9a00385bc9bbe98215a31e7f7e1d9c8f21cd8ace69e SHA512 80846fe2b4e4a7ff471d2dde28a8216ae807a3209f959e93d39ea4fc9a189ea28ec3db9d303b3fe15a28c2cb90e7446876678e93e23353c2d6f262e364a06bc9
DIST patch-4.19.112.xz 2915692 BLAKE2B ba693b3f2ae8b829ae0296f10a6d84af0626a12c951d4b06d0eb9d5a34d63c3e91796284afd49c8a90e309ad325f84a17ffaa064834387d8b3da91dd515acaa3 SHA512 315c61abe919fff07b7043a739f5cda2607465c67313fa61a2082191670a859b43c1dbba8f18e1cb01fd804f726232ddf830879d852d71b9f7636003ac413718
DIST patch-4.19.122.xz 3048300 BLAKE2B 667364f22660c8d7288545356f0c4cc5360dfd3d918a1a89ce1a75b08dcd7ac228756cece81762c0abce6136f5fb4721e1c8704bbdf2ee57d86f728c9d8b0f36 SHA512 47dabb8eae44f7b32f143f2aeb8877bcae684d8573ccb63fbbfdfd68d48312f224b7da7416c558740c9d88e55db97d4b84071df08155c6a4c0707125506a8227
DIST patch-4.19.123.xz 3056924 BLAKE2B b747a22847bf3c3ae6035bde1ba18cb935ff560c2716a4ec1f987de84a284696383685c2ecd59ffa4f6b2c8ba77751a50504a49d11458433de0135da4880a7d1 SHA512 f3f9deda34647bb2d4efc8b6028645422d0dd1964d05254cafa6e843144c39d3e151ed6ab717bb6c567a79d17f1e754976eeb78e968a0a2a8314e1398e4ce6b8
DIST patch-5.4.32.xz 1125564 BLAKE2B 4196df933b9e2ca05c1858e37fa6c7f2a8dfa549b0dcef7079e3cc28c325f9353bc93731c1879031c056281fb3f1eadbcc72877bfb23b382994aaf047d0b8a38 SHA512 cc837f7c4089e942ede2acf482f0e62d98282c44274706f92e527c0cf1d17094bacdb1243b71d8a29e61a72886d500413a88eac51202f62af22a0f0fa4225980
DIST patch-5.4.40.xz 1309032 BLAKE2B cb06b3177762c5401801e71cd089f6f40f2582dff9b00618f3647152d70813bff0c5a7c6cd9bfdccd5ca5ecc7be3f57aafbd7d5bfc7e0fdde27dade1e189bb36 SHA512 20c19808a7e2af62ea93a4ae187db5e80078da8c4b268424c8d6f945a98eeb0ce7b1f09086813fbd9a9220ff5f062c1fcb8292abedfdc7f9d23a2d804898cd16
DIST patch-5.5.19.xz 738400 BLAKE2B ec61291b134f70f79209e780328ba03d98c14edaa8085d87a5b8c1401e5bfdd96974da57ac0d01264e26c64ba48d0453105a8e5e2d2d46910b40a75f41c357f3 SHA512 c472b98a1c22b42f8acf1f14d47e639c880b45e5eb3dfcf0aedd601c259db920c0071d128d975c21caf31cb58f33cfeebae18135ba3c1f43cf8dc90562c73b27
DIST patch-5.6.12.xz 294016 BLAKE2B 08199e34e7524c23bfb123396c03200198a7a96b8a3d0e8e3c0ac2a1d979879d32f1816f26eaa00be7a263fbb4a6d1b3997cca43e0084b2ef4357ff1ec408520 SHA512 e057961567d8482482ce8e27467b4fc47ddff604a3fd47f5e4f4092a29cc9ef5d180dd739f3edff91ab373108b699c04e55131722e8d4f153f4dd7e7833b48cd
DIST patch-5.4.41.xz 1327972 BLAKE2B 4e1c95d681900a6819cc71cd4a0f895f1ce99eb592491015184bd7785e04b799d492cf4cbce36329d8a2851e0d825078acb836fcbce22ee705dce572f261afc3 SHA512 a21cbef99a5709b97dd8402ac7c2a5637f8af9db6b0a791ed5c0fd24010a0d7d5074635167078b3c5f2a393345e6ec84b35129e6c640e933609920a98b744d5e
DIST patch-5.6.13.xz 324636 BLAKE2B e04f1c4f9ae037b3a06f28446e782f7aecdd54907e4d05862ca913265c2d738fc114727a36603bdea3323007637568682a3696dd375028c09ecdaa9f84bbfc9f SHA512 10eabe59db21b0d82932b8122d3f07f12aec435900350a6d7f3e281676a1036860e24284252425c5b08fea02215166e3f65c49e5b4af8dbb7e03bcfbc6a86148

@ -1,24 +0,0 @@
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI=5
ETYPE="sources"
inherit calculate-kernel-7 eutils
DESCRIPTION="Calculate Linux kernel image"
KEYWORDS="~amd64"
HOMEPAGE="http://www.calculate-linux.org"
SRC_URI="${KERNEL_URI} ${ARCH_URI}"
IUSE="fsync muqss uksm"
src_unpack() {
calculate-kernel-7_src_unpack
}
pkg_postinst() {
calculate-kernel-7_pkg_postinst
}
Loading…
Cancel
Save