summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO24
-rw-r--r--0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch2
-rw-r--r--0002-PCI-EDR-Log-only-ACPI_NOTIFY_DISCONNECT_RECOVER-even.patch2
-rw-r--r--0004-drm-amd-display-Clear-dm_state-for-fast-updates.patch97
-rw-r--r--0004-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch645
-rw-r--r--PKGBUILD14
-rw-r--r--config7
7 files changed, 123 insertions, 668 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 99ff2df5c28..f5911c26c3a 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,5 +1,5 @@
pkgbase = linux-ck
- pkgver = 5.7.10
+ pkgver = 5.7.11
pkgrel = 1
url = https://wiki.archlinux.org/index.php/Linux-ck
arch = x86_64
@@ -8,8 +8,8 @@ pkgbase = linux-ck
makedepends = kmod
makedepends = libelf
options = !strip
- source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.7.10.tar.xz
- source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.7.10.tar.sign
+ source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.7.11.tar.xz
+ source = https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.7.11.tar.sign
source = config
source = enable_additional_cpu_optimizations-20200615.tar.gz::https://github.com/graysky2/kernel_gcc_patch/archive/20200615.tar.gz
source = http://ck.kolivas.org/patches/5.0/5.7/5.7-ck1/patch-5.7-ck1.xz
@@ -19,21 +19,21 @@ pkgbase = linux-ck
source = 0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
source = 0002-PCI-EDR-Log-only-ACPI_NOTIFY_DISCONNECT_RECOVER-even.patch
source = 0003-iwlwifi-Make-some-Killer-Wireless-AC-1550-cards-work.patch
- source = 0004-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch
+ source = 0004-drm-amd-display-Clear-dm_state-for-fast-updates.patch
validpgpkeys = ABAF11C65A2970B130ABE3C479BE3E4300411886
validpgpkeys = 647F28654894E3BD457199BE38DBBDC86092693E
- sha256sums = 4725430c65b7573b7d26c402dd9ffdad18529a302ce2e342c849e7800f193d44
+ sha256sums = 93293032aa13c3998eeb2afd910f11c0f2e8a76ffec46f74ce3fcfac53ed60f1
sha256sums = SKIP
- sha256sums = ed60b20ee841e16038da0d145fbf3f53fac94122c4001d6cd03abe64e9e760f6
+ sha256sums = 6313ccad7f8e4d8ce09dd5bdb51b8dfa124d0034d7097ba47008380a14a84f09
sha256sums = 278fe9ffb29d92cc5220e7beac34a8e3a2006e714d16a21a0427069f9634af90
sha256sums = e4a201e984cf229b66fbab713c49fa3a0e0e8f238f2216e503f9452a7a7a5e06
sha256sums = 5a08ac04975fe784d16d6c8ec2be733c73cdcfc19795f5c7b97d7a1aa7f12328
sha256sums = 961ed94b8d905f1e901cacb08d253c4170af0a25828111b7558d9c874e923558
sha256sums = 8cb21e0b3411327b627a9dd15b8eb773295a0d2782b1a41b2a8839d1b2f5778c
- sha256sums = f8f16c971882312c91618e4305b63f7aa2265af12208a902f87b6d3c1b1cf6ee
- sha256sums = a0bd98f1056d06126532350a55f633c92a43e3adb94d96c94f4d22f54e4d9807
+ sha256sums = 06a9861b434f81c0d0f54c6c122df56cf0a730d0eafad888db8804152a7b9ea3
+ sha256sums = db7f7a86bba9a4959f3e4ab7d1beb51e09099ef8beb638dd4250aa375532b2c2
sha256sums = 4c5b15c39e7d8f7b8c0fbee16bcc3992cecf38bb790df494b411a57366e3b677
- sha256sums = 18f22c5c095049cf3eebe4ec2c63e659dd35af6e49d2092865643d6ae2f7c411
+ sha256sums = e9b37c73e0d81b70bc92dec7703549ab5e54f6c1d2b076e2f851e27f0b38e123
pkgname = linux-ck
pkgdesc = The Linux-ck kernel and modules with the ck1 patchset featuring MuQSS CPU scheduler
@@ -42,11 +42,11 @@ pkgname = linux-ck
depends = initramfs
optdepends = crda: to set the correct wireless channels of your country
optdepends = linux-firmware: firmware images needed for some devices
- provides = linux-ck=5.7.10
+ provides = linux-ck=5.7.11
pkgname = linux-ck-headers
pkgdesc = Headers and scripts for building modules for Linux-ck kernel
depends = linux-ck
- provides = linux-ck-headers=5.7.10
- provides = linux-headers=5.7.10
+ provides = linux-ck-headers=5.7.11
+ provides = linux-headers=5.7.11
diff --git a/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch b/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
index a40d2c23b3c..8e0f71975ef 100644
--- a/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
+++ b/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
@@ -1,4 +1,4 @@
-From c701fa45808d40c6ce027c31c3e318bb678cb5b3 Mon Sep 17 00:00:00 2001
+From cf305eab76eb76eb1dfc7038ec3d738f57249b22 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Mon, 16 Sep 2019 04:53:20 +0200
Subject: [PATCH 1/5] ZEN: Add sysctl and CONFIG to disallow unprivileged
diff --git a/0002-PCI-EDR-Log-only-ACPI_NOTIFY_DISCONNECT_RECOVER-even.patch b/0002-PCI-EDR-Log-only-ACPI_NOTIFY_DISCONNECT_RECOVER-even.patch
index 741e8e7cfeb..2df20905fe3 100644
--- a/0002-PCI-EDR-Log-only-ACPI_NOTIFY_DISCONNECT_RECOVER-even.patch
+++ b/0002-PCI-EDR-Log-only-ACPI_NOTIFY_DISCONNECT_RECOVER-even.patch
@@ -1,4 +1,4 @@
-From 18693ce191f146cea8dd6299f40e3db3a9367e82 Mon Sep 17 00:00:00 2001
+From a0df6b44e7df165a1108e23d4e27e91c30e69a3b Mon Sep 17 00:00:00 2001
From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Date: Wed, 15 Apr 2020 17:38:32 -0700
Subject: [PATCH 2/5] PCI/EDR: Log only ACPI_NOTIFY_DISCONNECT_RECOVER events
diff --git a/0004-drm-amd-display-Clear-dm_state-for-fast-updates.patch b/0004-drm-amd-display-Clear-dm_state-for-fast-updates.patch
new file mode 100644
index 00000000000..76ab95070e3
--- /dev/null
+++ b/0004-drm-amd-display-Clear-dm_state-for-fast-updates.patch
@@ -0,0 +1,97 @@
+From 6ab7cba72fbdc4eb3c3547eb278924e06dd68fe4 Mon Sep 17 00:00:00 2001
+From: Mazin Rezk <mnrzk@protonmail.com>
+Date: Mon, 27 Jul 2020 05:40:46 +0000
+Subject: [PATCH 4/5] drm/amd/display: Clear dm_state for fast updates
+
+This patch fixes a race condition that causes a use-after-free during
+amdgpu_dm_atomic_commit_tail. This can occur when 2 non-blocking commits
+are requested and the second one finishes before the first. Essentially,
+this bug occurs when the following sequence of events happens:
+
+1. Non-blocking commit #1 is requested w/ a new dm_state #1 and is
+deferred to the workqueue.
+
+2. Non-blocking commit #2 is requested w/ a new dm_state #2 and is
+deferred to the workqueue.
+
+3. Commit #2 starts before commit #1, dm_state #1 is used in the
+commit_tail and commit #2 completes, freeing dm_state #1.
+
+4. Commit #1 starts after commit #2 completes, uses the freed dm_state
+1 and dereferences a freelist pointer while setting the context.
+
+Since this bug has only been spotted with fast commits, this patch fixes
+the bug by clearing the dm_state instead of using the old dc_state for
+fast updates. In addition, since dm_state is only used for its dc_state
+and amdgpu_dm_atomic_commit_tail will retain the dc_state if none is found,
+removing the dm_state should not have any consequences in fast updates.
+
+This use-after-free bug has existed for a while now, but only caused a
+noticeable issue starting from 5.7-rc1 due to 3202fa62f ("slub: relocate
+freelist pointer to middle of object") moving the freelist pointer from
+dm_state->base (which was unused) to dm_state->context (which is
+dereferenced).
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=207383
+Fixes: bd200d190f45 ("drm/amd/display: Don't replace the dc_state for fast updates")
+Reported-by: Duncan <1i5t5.duncan@cox.net>
+Signed-off-by: Mazin Rezk <mnrzk@protonmail.com>
+---
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 36 ++++++++++++++-----
+ 1 file changed, 27 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index 837a286469ec..d50751ae73f1 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -8489,20 +8489,38 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
+ * the same resource. If we have a new DC context as part of
+ * the DM atomic state from validation we need to free it and
+ * retain the existing one instead.
++ *
++ * Furthermore, since the DM atomic state only contains the DC
++ * context and can safely be annulled, we can free the state
++ * and clear the associated private object now to free
++ * some memory and avoid a possible use-after-free later.
+ */
+- struct dm_atomic_state *new_dm_state, *old_dm_state;
+
+- new_dm_state = dm_atomic_get_new_state(state);
+- old_dm_state = dm_atomic_get_old_state(state);
++ for (i = 0; i < state->num_private_objs; i++) {
++ struct drm_private_obj *obj = state->private_objs[i].ptr;
+
+- if (new_dm_state && old_dm_state) {
+- if (new_dm_state->context)
+- dc_release_state(new_dm_state->context);
++ if (obj->funcs == adev->dm.atomic_obj.funcs) {
++ int j = state->num_private_objs-1;
+
+- new_dm_state->context = old_dm_state->context;
++ dm_atomic_destroy_state(obj,
++ state->private_objs[i].state);
++
++ /* If i is not at the end of the array then the
++ * last element needs to be moved to where i was
++ * before the array can safely be truncated.
++ */
++ if (i != j)
++ state->private_objs[i] =
++ state->private_objs[j];
+
+- if (old_dm_state->context)
+- dc_retain_state(old_dm_state->context);
++ state->private_objs[j].ptr = NULL;
++ state->private_objs[j].state = NULL;
++ state->private_objs[j].old_state = NULL;
++ state->private_objs[j].new_state = NULL;
++
++ state->num_private_objs = j;
++ break;
++ }
+ }
+ }
+
+--
+2.27.0
+
diff --git a/0004-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch b/0004-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch
deleted file mode 100644
index 9d1b0d24f52..00000000000
--- a/0004-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch
+++ /dev/null
@@ -1,645 +0,0 @@
-From d14a96d0a5e05d99c5fe083c49d33197c215dbe1 Mon Sep 17 00:00:00 2001
-From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
-Date: Wed, 15 Jul 2020 22:42:07 +0200
-Subject: [PATCH 4/5] virt: vbox: Add support for the new
- VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES ioctl
-
-https://lore.kernel.org/patchwork/cover/1270301/
-
-Needed for https://bugs.archlinux.org/task/67253
-
-Squashed commit of the following:
-
-commit 0d7bec556896815f4920a5ed87339732c697175c
-Author: Hans de Goede <hdegoede@redhat.com>
-Date: Thu Jul 9 14:08:58 2020 +0200
-
- virt: vbox: Fix some comments which talk about the "session spinlock"
-
- The session lock is a mutex, not a spinlock, fix the comments to match.
-
- Acked-by: Arnd Bergmann <arnd@arndb.de>
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-
-commit fed91350029e0c3bf626bd55a148e766587ec439
-Author: Hans de Goede <hdegoede@redhat.com>
-Date: Thu Jul 9 14:08:57 2020 +0200
-
- virt: vbox: Log unknown ioctl requests as error
-
- Every now and then upstream adds new ioctls without notifying us,
- log unknown ioctl requests as an error to catch these.
-
- Acked-by: Arnd Bergmann <arnd@arndb.de>
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-
-commit 245d06f4c1b8f84cde07d14c09296a4fe90a26f0
-Author: Hans de Goede <hdegoede@redhat.com>
-Date: Thu Jul 9 14:08:56 2020 +0200
-
- virt: vbox: Add a few new vmmdev request types to the userspace whitelist
-
- Upstream VirtualBox has defined and is using a few new request types for
- vmmdev requests passed through /dev/vboxguest to the hypervisor.
-
- Add the defines for these to vbox_vmmdev_types.h and add add them to the
- whitelists of vmmdev requests which userspace is allowed to make.
-
- BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1789545
- Acked-by: Arnd Bergmann <arnd@arndb.de>
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-
-commit 2f24f5446915322bbbb1ccf4ee2297512feab942
-Author: Hans de Goede <hdegoede@redhat.com>
-Date: Thu Jul 9 14:08:55 2020 +0200
-
- virt: vbox: Add support for the new VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES ioctl
-
- Add support for the new VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES ioctl, this
- is necessary for automatic resizing of the guest resolution to match the
- VM-window size to work with the new VMSVGA virtual GPU which is now the
- new default in VirtualBox.
-
- BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1789545
- Acked-by: Arnd Bergmann <arnd@arndb.de>
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-
-commit 2fc9822453e8dd215765cd2b28e5e6e26338829e
-Author: Hans de Goede <hdegoede@redhat.com>
-Date: Thu Jul 9 14:08:54 2020 +0200
-
- virt: vbox: Add vbg_set_host_capabilities() helper function
-
- Add vbg_set_host_capabilities() helper function, this is a preparation
- patch for adding support for the VBGL_IOCTL_GUEST_CAPS_ACQUIRE ioctl.
-
- Acked-by: Arnd Bergmann <arnd@arndb.de>
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-
-commit 1594daf929c8691849c00e49e4a1ed977048addc
-Author: Hans de Goede <hdegoede@redhat.com>
-Date: Thu Jul 9 14:08:53 2020 +0200
-
- virt: vbox: Rename guest_caps struct members to set_guest_caps
-
- Rename guest_caps[_tracker] struct members to set_guest_caps[_tracker]
- this is a preparation patch for adding support for the
- VBGL_IOCTL_GUEST_CAPS_ACQUIRE ioctl.
-
- Acked-by: Arnd Bergmann <arnd@arndb.de>
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-
-commit d7f3b7cec66d171cf5194ad37f647f4562da6ccc
-Author: Hans de Goede <hdegoede@redhat.com>
-Date: Thu Jul 9 14:08:52 2020 +0200
-
- virt: vbox: Fix guest capabilities mask check
-
- Check the passed in capabilities against VMMDEV_GUEST_CAPABILITIES_MASK
- instead of against VMMDEV_EVENT_VALID_EVENT_MASK.
- This tightens the allowed mask from 0x7ff to 0x7.
-
- Fixes: 0ba002bc4393 ("virt: Add vboxguest driver for Virtual Box Guest integration")
- Cc: stable@vger.kernel.org
- Acked-by: Arnd Bergmann <arnd@arndb.de>
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-
-commit f6694fa90e2183874def2d022d097795e2269a15
-Author: Hans de Goede <hdegoede@redhat.com>
-Date: Thu Jul 9 14:08:51 2020 +0200
-
- virt: vbox: Fix VBGL_IOCTL_VMMDEV_REQUEST_BIG and _LOG req numbers to match upstream
-
- Until this commit the mainline kernel version (this version) of the
- vboxguest module contained a bug where it defined
- VBGL_IOCTL_VMMDEV_REQUEST_BIG and VBGL_IOCTL_LOG using
- _IOC(_IOC_READ | _IOC_WRITE, 'V', ...) instead of
- _IO(V, ...) as the out of tree VirtualBox upstream version does.
-
- Since the VirtualBox userspace bits are always built against VirtualBox
- upstream's headers, this means that so far the mainline kernel version
- of the vboxguest module has been failing these 2 ioctls with -ENOTTY.
- I guess that VBGL_IOCTL_VMMDEV_REQUEST_BIG is never used causing us to
- not hit that one and sofar the vboxguest driver has failed to actually
- log any log messages passed it through VBGL_IOCTL_LOG.
-
- This commit changes the VBGL_IOCTL_VMMDEV_REQUEST_BIG and VBGL_IOCTL_LOG
- defines to match the out of tree VirtualBox upstream vboxguest version,
- while keeping compatibility with the old wrong request defines so as
- to not break the kernel ABI in case someone has been using the old
- request defines.
-
- Fixes: f6ddd094f579 ("virt: Add vboxguest driver for Virtual Box Guest integration UAPI")
- Cc: stable@vger.kernel.org
- Acked-by: Arnd Bergmann <arnd@arndb.de>
- Reviewed-by: Arnd Bergmann <arnd@arndb.de>
- Signed-off-by: Hans de Goede <hdegoede@redhat.com>
----
- drivers/virt/vboxguest/vboxguest_core.c | 266 +++++++++++++++++++----
- drivers/virt/vboxguest/vboxguest_core.h | 23 +-
- drivers/virt/vboxguest/vboxguest_utils.c | 1 +
- include/linux/vbox_utils.h | 1 +
- include/uapi/linux/vbox_vmmdev_types.h | 3 +
- include/uapi/linux/vboxguest.h | 24 ++
- 6 files changed, 269 insertions(+), 49 deletions(-)
-
-diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
-index 18ebd7a6af98..0b43efddea22 100644
---- a/drivers/virt/vboxguest/vboxguest_core.c
-+++ b/drivers/virt/vboxguest/vboxguest_core.c
-@@ -559,7 +559,7 @@ static int vbg_reset_host_event_filter(struct vbg_dev *gdev,
- * Changes the event filter mask for the given session.
- *
- * This is called in response to VBG_IOCTL_CHANGE_FILTER_MASK as well as to
-- * do session cleanup. Takes the session spinlock.
-+ * do session cleanup. Takes the session mutex.
- *
- * Return: 0 or negative errno value.
- * @gdev: The Guest extension device.
-@@ -662,7 +662,156 @@ static int vbg_reset_host_capabilities(struct vbg_dev *gdev)
- }
-
- /**
-- * Sets the guest capabilities for a session. Takes the session spinlock.
-+ * Set guest capabilities on the host.
-+ * Must be called with gdev->session_mutex hold.
-+ * Return: 0 or negative errno value.
-+ * @gdev: The Guest extension device.
-+ * @session: The session.
-+ * @session_termination: Set if we're called by the session cleanup code.
-+ */
-+static int vbg_set_host_capabilities(struct vbg_dev *gdev,
-+ struct vbg_session *session,
-+ bool session_termination)
-+{
-+ struct vmmdev_mask *req;
-+ u32 caps;
-+ int rc;
-+
-+ WARN_ON(!mutex_is_locked(&gdev->session_mutex));
-+
-+ caps = gdev->acquired_guest_caps | gdev->set_guest_caps_tracker.mask;
-+
-+ if (gdev->guest_caps_host == caps)
-+ return 0;
-+
-+ /* On termination the requestor is the kernel, as we're cleaning up. */
-+ req = vbg_req_alloc(sizeof(*req), VMMDEVREQ_SET_GUEST_CAPABILITIES,
-+ session_termination ? VBG_KERNEL_REQUEST :
-+ session->requestor);
-+ if (!req) {
-+ gdev->guest_caps_host = U32_MAX;
-+ return -ENOMEM;
-+ }
-+
-+ req->or_mask = caps;
-+ req->not_mask = ~caps;
-+ rc = vbg_req_perform(gdev, req);
-+ vbg_req_free(req, sizeof(*req));
-+
-+ gdev->guest_caps_host = (rc >= 0) ? caps : U32_MAX;
-+
-+ return vbg_status_code_to_errno(rc);
-+}
-+
-+/**
-+ * Acquire (get exclusive access) guest capabilities for a session.
-+ * Takes the session mutex.
-+ * Return: 0 or negative errno value.
-+ * @gdev: The Guest extension device.
-+ * @session: The session.
-+ * @flags: Flags (VBGL_IOC_AGC_FLAGS_XXX).
-+ * @or_mask: The capabilities to add.
-+ * @not_mask: The capabilities to remove.
-+ * @session_termination: Set if we're called by the session cleanup code.
-+ * This tweaks the error handling so we perform
-+ * proper session cleanup even if the host
-+ * misbehaves.
-+ */
-+static int vbg_acquire_session_capabilities(struct vbg_dev *gdev,
-+ struct vbg_session *session,
-+ u32 or_mask, u32 not_mask,
-+ u32 flags, bool session_termination)
-+{
-+ unsigned long irqflags;
-+ bool wakeup = false;
-+ int ret = 0;
-+
-+ mutex_lock(&gdev->session_mutex);
-+
-+ if (gdev->set_guest_caps_tracker.mask & or_mask) {
-+ vbg_err("%s error: cannot acquire caps which are currently set\n",
-+ __func__);
-+ ret = -EINVAL;
-+ goto out;
-+ }
-+
-+ /*
-+ * Mark any caps in the or_mask as now being in acquire-mode. Note
-+ * once caps are in acquire_mode they always stay in this mode.
-+ * This impacts event handling, so we take the event-lock.
-+ */
-+ spin_lock_irqsave(&gdev->event_spinlock, irqflags);
-+ gdev->acquire_mode_guest_caps |= or_mask;
-+ spin_unlock_irqrestore(&gdev->event_spinlock, irqflags);
-+
-+ /* If we only have to switch the caps to acquire mode, we're done. */
-+ if (flags & VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE)
-+ goto out;
-+
-+ not_mask &= ~or_mask; /* or_mask takes priority over not_mask */
-+ not_mask &= session->acquired_guest_caps;
-+ or_mask &= ~session->acquired_guest_caps;
-+
-+ if (or_mask == 0 && not_mask == 0)
-+ goto out;
-+
-+ if (gdev->acquired_guest_caps & or_mask) {
-+ ret = -EBUSY;
-+ goto out;
-+ }
-+
-+ gdev->acquired_guest_caps |= or_mask;
-+ gdev->acquired_guest_caps &= ~not_mask;
-+ /* session->acquired_guest_caps impacts event handling, take the lock */
-+ spin_lock_irqsave(&gdev->event_spinlock, irqflags);
-+ session->acquired_guest_caps |= or_mask;
-+ session->acquired_guest_caps &= ~not_mask;
-+ spin_unlock_irqrestore(&gdev->event_spinlock, irqflags);
-+
-+ ret = vbg_set_host_capabilities(gdev, session, session_termination);
-+ /* Roll back on failure, unless it's session termination time. */
-+ if (ret < 0 && !session_termination) {
-+ gdev->acquired_guest_caps &= ~or_mask;
-+ gdev->acquired_guest_caps |= not_mask;
-+ spin_lock_irqsave(&gdev->event_spinlock, irqflags);
-+ session->acquired_guest_caps &= ~or_mask;
-+ session->acquired_guest_caps |= not_mask;
-+ spin_unlock_irqrestore(&gdev->event_spinlock, irqflags);
-+ }
-+
-+ /*
-+ * If we added a capability, check if that means some other thread in
-+ * our session should be unblocked because there are events pending
-+ * (the result of vbg_get_allowed_event_mask_for_session() may change).
-+ *
-+ * HACK ALERT! When the seamless support capability is added we generate
-+ * a seamless change event so that the ring-3 client can sync with
-+ * the seamless state.
-+ */
-+ if (ret == 0 && or_mask != 0) {
-+ spin_lock_irqsave(&gdev->event_spinlock, irqflags);
-+
-+ if (or_mask & VMMDEV_GUEST_SUPPORTS_SEAMLESS)
-+ gdev->pending_events |=
-+ VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST;
-+
-+ if (gdev->pending_events)
-+ wakeup = true;
-+
-+ spin_unlock_irqrestore(&gdev->event_spinlock, irqflags);
-+
-+ if (wakeup)
-+ wake_up(&gdev->event_wq);
-+ }
-+
-+out:
-+ mutex_unlock(&gdev->session_mutex);
-+
-+ return ret;
-+}
-+
-+/**
-+ * Sets the guest capabilities for a session. Takes the session mutex.
- * Return: 0 or negative errno value.
- * @gdev: The Guest extension device.
- * @session: The session.
-@@ -678,62 +827,40 @@ static int vbg_set_session_capabilities(struct vbg_dev *gdev,
- u32 or_mask, u32 not_mask,
- bool session_termination)
- {
-- struct vmmdev_mask *req;
- u32 changed, previous;
-- int rc, ret = 0;
--
-- /*
-- * Allocate a request buffer before taking the spinlock, when
-- * the session is being terminated the requestor is the kernel,
-- * as we're cleaning up.
-- */
-- req = vbg_req_alloc(sizeof(*req), VMMDEVREQ_SET_GUEST_CAPABILITIES,
-- session_termination ? VBG_KERNEL_REQUEST :
-- session->requestor);
-- if (!req) {
-- if (!session_termination)
-- return -ENOMEM;
-- /* Ignore allocation failure, we must do session cleanup. */
-- }
-+ int ret = 0;
-
- mutex_lock(&gdev->session_mutex);
-
-+ if (gdev->acquire_mode_guest_caps & or_mask) {
-+ vbg_err("%s error: cannot set caps which are in acquire_mode\n",
-+ __func__);
-+ ret = -EBUSY;
-+ goto out;
-+ }
-+
- /* Apply the changes to the session mask. */
-- previous = session->guest_caps;
-- session->guest_caps |= or_mask;
-- session->guest_caps &= ~not_mask;
-+ previous = session->set_guest_caps;
-+ session->set_guest_caps |= or_mask;
-+ session->set_guest_caps &= ~not_mask;
-
- /* If anything actually changed, update the global usage counters. */
-- changed = previous ^ session->guest_caps;
-+ changed = previous ^ session->set_guest_caps;
- if (!changed)
- goto out;
-
-- vbg_track_bit_usage(&gdev->guest_caps_tracker, changed, previous);
-- or_mask = gdev->guest_caps_tracker.mask;
--
-- if (gdev->guest_caps_host == or_mask || !req)
-- goto out;
-+ vbg_track_bit_usage(&gdev->set_guest_caps_tracker, changed, previous);
-
-- gdev->guest_caps_host = or_mask;
-- req->or_mask = or_mask;
-- req->not_mask = ~or_mask;
-- rc = vbg_req_perform(gdev, req);
-- if (rc < 0) {
-- ret = vbg_status_code_to_errno(rc);
--
-- /* Failed, roll back (unless it's session termination time). */
-- gdev->guest_caps_host = U32_MAX;
-- if (session_termination)
-- goto out;
--
-- vbg_track_bit_usage(&gdev->guest_caps_tracker, changed,
-- session->guest_caps);
-- session->guest_caps = previous;
-+ ret = vbg_set_host_capabilities(gdev, session, session_termination);
-+ /* Roll back on failure, unless it's session termination time. */
-+ if (ret < 0 && !session_termination) {
-+ vbg_track_bit_usage(&gdev->set_guest_caps_tracker, changed,
-+ session->set_guest_caps);
-+ session->set_guest_caps = previous;
- }
-
- out:
- mutex_unlock(&gdev->session_mutex);
-- vbg_req_free(req, sizeof(*req));
-
- return ret;
- }
-@@ -949,6 +1076,7 @@ void vbg_core_close_session(struct vbg_session *session)
- struct vbg_dev *gdev = session->gdev;
- int i, rc;
-
-+ vbg_acquire_session_capabilities(gdev, session, 0, U32_MAX, 0, true);
- vbg_set_session_capabilities(gdev, session, 0, U32_MAX, true);
- vbg_set_session_event_filter(gdev, session, 0, U32_MAX, true);
-
-@@ -1006,6 +1134,25 @@ static int vbg_ioctl_driver_version_info(
- return 0;
- }
-
-+/* Must be called with the event_lock held */
-+static u32 vbg_get_allowed_event_mask_for_session(struct vbg_dev *gdev,
-+ struct vbg_session *session)
-+{
-+ u32 acquire_mode_caps = gdev->acquire_mode_guest_caps;
-+ u32 session_acquired_caps = session->acquired_guest_caps;
-+ u32 allowed_events = VMMDEV_EVENT_VALID_EVENT_MASK;
-+
-+ if ((acquire_mode_caps & VMMDEV_GUEST_SUPPORTS_GRAPHICS) &&
-+ !(session_acquired_caps & VMMDEV_GUEST_SUPPORTS_GRAPHICS))
-+ allowed_events &= ~VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST;
-+
-+ if ((acquire_mode_caps & VMMDEV_GUEST_SUPPORTS_SEAMLESS) &&
-+ !(session_acquired_caps & VMMDEV_GUEST_SUPPORTS_SEAMLESS))
-+ allowed_events &= ~VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST;
-+
-+ return allowed_events;
-+}
-+
- static bool vbg_wait_event_cond(struct vbg_dev *gdev,
- struct vbg_session *session,
- u32 event_mask)
-@@ -1017,6 +1164,7 @@ static bool vbg_wait_event_cond(struct vbg_dev *gdev,
- spin_lock_irqsave(&gdev->event_spinlock, flags);
-
- events = gdev->pending_events & event_mask;
-+ events &= vbg_get_allowed_event_mask_for_session(gdev, session);
- wakeup = events || session->cancel_waiters;
-
- spin_unlock_irqrestore(&gdev->event_spinlock, flags);
-@@ -1031,6 +1179,7 @@ static u32 vbg_consume_events_locked(struct vbg_dev *gdev,
- {
- u32 events = gdev->pending_events & event_mask;
-
-+ events &= vbg_get_allowed_event_mask_for_session(gdev, session);
- gdev->pending_events &= ~events;
- return events;
- }
-@@ -1150,7 +1299,9 @@ static int vbg_req_allowed(struct vbg_dev *gdev, struct vbg_session *session,
- case VMMDEVREQ_VIDEO_ACCEL_ENABLE:
- case VMMDEVREQ_VIDEO_ACCEL_FLUSH:
- case VMMDEVREQ_VIDEO_SET_VISIBLE_REGION:
-+ case VMMDEVREQ_VIDEO_UPDATE_MONITOR_POSITIONS:
- case VMMDEVREQ_GET_DISPLAY_CHANGE_REQEX:
-+ case VMMDEVREQ_GET_DISPLAY_CHANGE_REQ_MULTI:
- case VMMDEVREQ_GET_SEAMLESS_CHANGE_REQ:
- case VMMDEVREQ_GET_VRDPCHANGE_REQ:
- case VMMDEVREQ_LOG_STRING:
-@@ -1432,6 +1583,29 @@ static int vbg_ioctl_change_filter_mask(struct vbg_dev *gdev,
- false);
- }
-
-+static int vbg_ioctl_acquire_guest_capabilities(struct vbg_dev *gdev,
-+ struct vbg_session *session,
-+ struct vbg_ioctl_acquire_guest_caps *caps)
-+{
-+ u32 flags, or_mask, not_mask;
-+
-+ if (vbg_ioctl_chk(&caps->hdr, sizeof(caps->u.in), 0))
-+ return -EINVAL;
-+
-+ flags = caps->u.in.flags;
-+ or_mask = caps->u.in.or_mask;
-+ not_mask = caps->u.in.not_mask;
-+
-+ if (flags & ~VBGL_IOC_AGC_FLAGS_VALID_MASK)
-+ return -EINVAL;
-+
-+ if ((or_mask | not_mask) & ~VMMDEV_GUEST_CAPABILITIES_MASK)
-+ return -EINVAL;
-+
-+ return vbg_acquire_session_capabilities(gdev, session, or_mask,
-+ not_mask, flags, false);
-+}
-+
- static int vbg_ioctl_change_guest_capabilities(struct vbg_dev *gdev,
- struct vbg_session *session, struct vbg_ioctl_set_guest_caps *caps)
- {
-@@ -1452,7 +1626,7 @@ static int vbg_ioctl_change_guest_capabilities(struct vbg_dev *gdev,
- if (ret)
- return ret;
-
-- caps->u.out.session_caps = session->guest_caps;
-+ caps->u.out.session_caps = session->set_guest_caps;
- caps->u.out.global_caps = gdev->guest_caps_host;
-
- return 0;
-@@ -1541,6 +1715,8 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
- return vbg_ioctl_interrupt_all_wait_events(gdev, session, data);
- case VBG_IOCTL_CHANGE_FILTER_MASK:
- return vbg_ioctl_change_filter_mask(gdev, session, data);
-+ case VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES:
-+ return vbg_ioctl_acquire_guest_capabilities(gdev, session, data);
- case VBG_IOCTL_CHANGE_GUEST_CAPABILITIES:
- return vbg_ioctl_change_guest_capabilities(gdev, session, data);
- case VBG_IOCTL_CHECK_BALLOON:
-@@ -1563,7 +1739,7 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
- return vbg_ioctl_log(data);
- }
-
-- vbg_debug("VGDrvCommonIoCtl: Unknown req %#08x\n", req);
-+ vbg_err_ratelimited("Userspace made an unknown ioctl req %#08x\n", req);
- return -ENOTTY;
- }
-
-diff --git a/drivers/virt/vboxguest/vboxguest_core.h b/drivers/virt/vboxguest/vboxguest_core.h
-index 77c3a9c8255d..ab4bf64e2cec 100644
---- a/drivers/virt/vboxguest/vboxguest_core.h
-+++ b/drivers/virt/vboxguest/vboxguest_core.h
-@@ -118,11 +118,21 @@ struct vbg_dev {
- u32 event_filter_host;
-
- /**
-- * Usage counters for guest capabilities. Indexed by capability bit
-+ * Guest capabilities which have been switched to acquire_mode.
-+ */
-+ u32 acquire_mode_guest_caps;
-+ /**
-+ * Guest capabilities acquired by vbg_acquire_session_capabilities().
-+ * Only one session can acquire a capability at a time.
-+ */
-+ u32 acquired_guest_caps;
-+ /**
-+ * Usage counters for guest capabilities requested through
-+ * vbg_set_session_capabilities(). Indexed by capability bit
- * number, one count per session using a capability.
- * Protected by session_mutex.
- */
-- struct vbg_bit_usage_tracker guest_caps_tracker;
-+ struct vbg_bit_usage_tracker set_guest_caps_tracker;
- /**
- * The guest capabilities last reported to the host (or UINT32_MAX).
- * Protected by session_mutex.
-@@ -164,11 +174,16 @@ struct vbg_session {
- */
- u32 event_filter;
- /**
-- * Guest capabilities for this session.
-+ * Guest capabilities acquired by vbg_acquire_session_capabilities().
-+ * Only one session can acquire a capability at a time.
-+ */
-+ u32 acquired_guest_caps;
-+ /**
-+ * Guest capabilities set through vbg_set_session_capabilities().
- * A capability claimed by any guest session will be reported to the
- * host. Protected by vbg_gdev.session_mutex.
- */
-- u32 guest_caps;
-+ u32 set_guest_caps;
- /** VMMDEV_REQUESTOR_* flags */
- u32 requestor;
- /** Set on CANCEL_ALL_WAITEVENTS, protected by vbg_devevent_spinlock. */
-diff --git a/drivers/virt/vboxguest/vboxguest_utils.c b/drivers/virt/vboxguest/vboxguest_utils.c
-index 7396187ee32a..ea05af41ec69 100644
---- a/drivers/virt/vboxguest/vboxguest_utils.c
-+++ b/drivers/virt/vboxguest/vboxguest_utils.c
-@@ -59,6 +59,7 @@ EXPORT_SYMBOL(name)
- VBG_LOG(vbg_info, pr_info);
- VBG_LOG(vbg_warn, pr_warn);
- VBG_LOG(vbg_err, pr_err);
-+VBG_LOG(vbg_err_ratelimited, pr_err_ratelimited);
- #if defined(DEBUG) && !defined(CONFIG_DYNAMIC_DEBUG)
- VBG_LOG(vbg_debug, pr_debug);
- #endif
-diff --git a/include/linux/vbox_utils.h b/include/linux/vbox_utils.h
-index ff56c443180c..db8a7d118093 100644
---- a/include/linux/vbox_utils.h
-+++ b/include/linux/vbox_utils.h
-@@ -16,6 +16,7 @@ struct vbg_dev;
- __printf(1, 2) void vbg_info(const char *fmt, ...);
- __printf(1, 2) void vbg_warn(const char *fmt, ...);
- __printf(1, 2) void vbg_err(const char *fmt, ...);
-+__printf(1, 2) void vbg_err_ratelimited(const char *fmt, ...);
-
- /* Only use backdoor logging for non-dynamic debug builds */
- #if defined(DEBUG) && !defined(CONFIG_DYNAMIC_DEBUG)
-diff --git a/include/uapi/linux/vbox_vmmdev_types.h b/include/uapi/linux/vbox_vmmdev_types.h
-index c27289fd619a..f8a8d6b3c521 100644
---- a/include/uapi/linux/vbox_vmmdev_types.h
-+++ b/include/uapi/linux/vbox_vmmdev_types.h
-@@ -63,6 +63,7 @@ enum vmmdev_request_type {
- VMMDEVREQ_SET_GUEST_CAPABILITIES = 56,
- VMMDEVREQ_VIDEMODE_SUPPORTED2 = 57, /* since version 3.2.0 */
- VMMDEVREQ_GET_DISPLAY_CHANGE_REQEX = 80, /* since version 4.2.4 */
-+ VMMDEVREQ_GET_DISPLAY_CHANGE_REQ_MULTI = 81,
- VMMDEVREQ_HGCM_CONNECT = 60,
- VMMDEVREQ_HGCM_DISCONNECT = 61,
- VMMDEVREQ_HGCM_CALL32 = 62,
-@@ -92,6 +93,8 @@ enum vmmdev_request_type {
- VMMDEVREQ_WRITE_COREDUMP = 218,
- VMMDEVREQ_GUEST_HEARTBEAT = 219,
- VMMDEVREQ_HEARTBEAT_CONFIGURE = 220,
-+ VMMDEVREQ_NT_BUG_CHECK = 221,
-+ VMMDEVREQ_VIDEO_UPDATE_MONITOR_POSITIONS = 222,
- /* Ensure the enum is a 32 bit data-type */
- VMMDEVREQ_SIZEHACK = 0x7fffffff
- };
-diff --git a/include/uapi/linux/vboxguest.h b/include/uapi/linux/vboxguest.h
-index f79d7abe27db..15125f6ec60d 100644
---- a/include/uapi/linux/vboxguest.h
-+++ b/include/uapi/linux/vboxguest.h
-@@ -257,6 +257,30 @@ VMMDEV_ASSERT_SIZE(vbg_ioctl_change_filter, 24 + 8);
- _IOWR('V', 12, struct vbg_ioctl_change_filter)
-
-
-+/** VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES data structure. */
-+struct vbg_ioctl_acquire_guest_caps {
-+ /** The header. */
-+ struct vbg_ioctl_hdr hdr;
-+ union {
-+ struct {
-+ /** Flags (VBGL_IOC_AGC_FLAGS_XXX). */
-+ __u32 flags;
-+ /** Capabilities to set (VMMDEV_GUEST_SUPPORTS_XXX). */
-+ __u32 or_mask;
-+ /** Capabilities to drop (VMMDEV_GUEST_SUPPORTS_XXX). */
-+ __u32 not_mask;
-+ } in;
-+ } u;
-+};
-+VMMDEV_ASSERT_SIZE(vbg_ioctl_acquire_guest_caps, 24 + 12);
-+
-+#define VBGL_IOC_AGC_FLAGS_CONFIG_ACQUIRE_MODE 0x00000001
-+#define VBGL_IOC_AGC_FLAGS_VALID_MASK 0x00000001
-+
-+#define VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES \
-+ _IOWR('V', 13, struct vbg_ioctl_acquire_guest_caps)
-+
-+
- /** VBG_IOCTL_CHANGE_GUEST_CAPABILITIES data structure. */
- struct vbg_ioctl_set_guest_caps {
- /** The header. */
---
-2.27.0
-
diff --git a/PKGBUILD b/PKGBUILD
index 0f03af676eb..fed336aa14e 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -64,7 +64,7 @@ _localmodcfg=
### IMPORTANT: Do no edit below this line unless you know what you're doing
pkgbase=linux-ck
-pkgver=5.7.10
+pkgver=5.7.11
pkgrel=1
_ckpatchversion=1
arch=(x86_64)
@@ -87,24 +87,24 @@ source=(
0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch
0002-PCI-EDR-Log-only-ACPI_NOTIFY_DISCONNECT_RECOVER-even.patch
0003-iwlwifi-Make-some-Killer-Wireless-AC-1550-cards-work.patch
- 0004-virt-vbox-Add-support-for-the-new-VBG_IOCTL_ACQUIRE_.patch
+ 0004-drm-amd-display-Clear-dm_state-for-fast-updates.patch
)
validpgpkeys=(
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds
'647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman
)
-sha256sums=('4725430c65b7573b7d26c402dd9ffdad18529a302ce2e342c849e7800f193d44'
+sha256sums=('93293032aa13c3998eeb2afd910f11c0f2e8a76ffec46f74ce3fcfac53ed60f1'
'SKIP'
- 'ed60b20ee841e16038da0d145fbf3f53fac94122c4001d6cd03abe64e9e760f6'
+ '6313ccad7f8e4d8ce09dd5bdb51b8dfa124d0034d7097ba47008380a14a84f09'
'278fe9ffb29d92cc5220e7beac34a8e3a2006e714d16a21a0427069f9634af90'
'e4a201e984cf229b66fbab713c49fa3a0e0e8f238f2216e503f9452a7a7a5e06'
'5a08ac04975fe784d16d6c8ec2be733c73cdcfc19795f5c7b97d7a1aa7f12328'
'961ed94b8d905f1e901cacb08d253c4170af0a25828111b7558d9c874e923558'
'8cb21e0b3411327b627a9dd15b8eb773295a0d2782b1a41b2a8839d1b2f5778c'
- 'f8f16c971882312c91618e4305b63f7aa2265af12208a902f87b6d3c1b1cf6ee'
- 'a0bd98f1056d06126532350a55f633c92a43e3adb94d96c94f4d22f54e4d9807'
+ '06a9861b434f81c0d0f54c6c122df56cf0a730d0eafad888db8804152a7b9ea3'
+ 'db7f7a86bba9a4959f3e4ab7d1beb51e09099ef8beb638dd4250aa375532b2c2'
'4c5b15c39e7d8f7b8c0fbee16bcc3992cecf38bb790df494b411a57366e3b677'
- '18f22c5c095049cf3eebe4ec2c63e659dd35af6e49d2092865643d6ae2f7c411')
+ 'e9b37c73e0d81b70bc92dec7703549ab5e54f6c1d2b076e2f851e27f0b38e123')
export KBUILD_BUILD_HOST=archlinux
export KBUILD_BUILD_USER=$pkgbase
diff --git a/config b/config
index 8df9ab80d63..1014972b947 100644
--- a/config
+++ b/config
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.7.6-arch1 Kernel Configuration
+# Linux/x86 5.7.11-arch1 Kernel Configuration
#
#
@@ -1621,7 +1621,10 @@ CONFIG_VLAN_8021Q_MVRP=y
# CONFIG_DECNET is not set
CONFIG_LLC=m
CONFIG_LLC2=m
-# CONFIG_ATALK is not set
+CONFIG_ATALK=m
+CONFIG_DEV_APPLETALK=m
+CONFIG_IPDDP=m
+CONFIG_IPDDP_ENCAP=y
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
CONFIG_PHONET=m