sys-kernel/calculate-sources: delete 5.7.19

mhiretskiy
Alexander Tratsevskiy 4 years ago
parent 87cf1496b4
commit 558211f1b2

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

@ -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,5 +0,0 @@
# Calculate format=kernel name=.config
# CONFIG_KERNEL_XZ is not set
CONFIG_KERNEL_ZSTD=y
CONFIG_MODULE_COMPRESS_ZSTD=y
CONFIG_ZSTD_DECOMPRESS=y

@ -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.7.tar.xz 112690468 BLAKE2B b2b71e231507429b178b6b89be546c4a3ee2757f5d2c58b6137d383f16034a587225a75a9dbca6a01a433056ebe078487132c224e909a2971c9634687e47b1d1 SHA512 45bde01593f6147c8c169b9e46b4b56eee998142552ae0ff82f1dd21b1fd54f3b32f6283f6bd77ea717d374672167849e468c157f235d2f12f7d7816e4623bf6
DIST linux-5.8.tar.xz 114459324 BLAKE2B 7bd97f8fa4527840754434414c07283e89731dc8ebb1e95fa5bc1469a60af1122582c0d3b6e262e77882f023190068df3537bd8b65964b3caa820bb2c8e579c7 SHA512 45a53ecf351096ef6e98242cca4228b8da9b9139ecc6963695791ea6fb7a9484a4e1c19dcca7ce7cbfdfa49de0451b70973bb078f12bdae9cbaddbc3f8092556
DIST patch-4.19.139.xz 3287912 BLAKE2B 15af2c1ff765a3a00e6f3a7ef108bcc54ce10603666df655c92f3c7da48cf25054f7b1624e363e96fbc56a39ce021e28bb647552daebf8dcdc69db630dedb500 SHA512 b68fab236291799721977e7874b5b995eee6e4ee11d06e827a65af3610cbff11ef823831264050f96fecce2c0f7d186c03e881c025234ad8c8072a5eb0c1e44b
DIST patch-4.19.145.xz 3398080 BLAKE2B 20ae916cdf9a8d2d7642af0316a7fe07b0598f1109c26270e9da9f02b1d8d13cc4aba6cc340a755260f7e417fa33d9d5622b9b11b9e75fb78536dffa221fa474 SHA512 eedf90d3ba9510a091a7d28fe4945535a7f773a75375fe09c15845752ebca37ef27c699ec3a9993f1f01b4820d741da10892a5b76751da8dd0d0e00c6eb65a7b
DIST patch-5.4.57.xz 1752516 BLAKE2B 7a78abafd1de8580b91738461f4f44461a7582cdf10b9eb45485f6b7ac66939e44edbdc778b8c3d81dd939155607b0e4f6245426feeb3762cd379548a839e125 SHA512 79d2e85bd35222651959c9ed6b9c711d6cad2e23a57acfe92a5f01c5bb2f39fdd75d6c8a402f1341e13979ada4cd522bd4d3f2493be61f75e8a92a95b15776f9
DIST patch-5.4.65.xz 1958308 BLAKE2B f3db960e0d47c6ed19412cb31c60cde4eb484b90ca1b272b52c96775299d83e115ffb76d2844456096cfbf6e87dfe07d053aaf6de0c3153522249a4bac1be263 SHA512 67d50e3ac11a70ab99ce6864c3ac60f03e2a3026f572d31d788731269498c8146fb218799b18512fccfd42f5a6970b9afa0edd51b533bf3704844ac3d42cdd32
DIST patch-5.7.19.xz 775868 BLAKE2B cd8a43bfe5d593e920d5cb3efd9f1fd7f9a69481e185b3b428e082c30a93e0f774b00f1c3dbafffcde7e5b125ae02d038555ca6514bb482ef3afa7299ea25205 SHA512 0f908677886be528213655d3f307bbf6dde53d475f59e6731ba9729b3ea653af5b3da070cedef7f80ed15f7576ea6506c54333d17e427448ac005c243d5beb9a
DIST patch-5.8.9.xz 394172 BLAKE2B 757112da50e9a236180442c7df2a545b9be7ceaf810e6682f4dd45dfeef4cd02f900ddedf2901bebb3d7325a2ae3ba1e4385a7aec8dcaaf04ecff5e3e51e69e1 SHA512 75c4b0c41660da07e46280e0315d67964aae94730a5698c0384de2b8ae1ca42c191f0db5ce3e067ecfc425e523c5d7634651e81ea3a7f5dde95116baa1120fb9

@ -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-8 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-8_src_unpack
}
pkg_postinst() {
calculate-kernel-8_pkg_postinst
}
Loading…
Cancel
Save