diff --git a/pkgbuilds/linux-omarchy-bore/0711-iommu-amd-perfopt-support.patch b/pkgbuilds/linux-omarchy-bore/0711-iommu-amd-perfopt-support.patch new file mode 100644 index 0000000..4b13fed --- /dev/null +++ b/pkgbuilds/linux-omarchy-bore/0711-iommu-amd-perfopt-support.patch @@ -0,0 +1,413 @@ +diff --git a/drivers/iommu/amd/amd_iommu.h b/drivers/iommu/amd/amd_iommu.h +--- a/drivers/iommu/amd/amd_iommu.h ++++ b/drivers/iommu/amd/amd_iommu.h +@@ -48,6 +48,9 @@ extern u8 amd_iommu_hpt_vasize; + extern unsigned long amd_iommu_pgsize_bitmap; + extern bool amd_iommu_hatdis; + ++int amd_iommu_perfopt_clear(struct amd_iommu *iommu); ++int amd_iommu_perfopt_restore(struct amd_iommu *iommu); ++ + /* Protection domain ops */ + void amd_iommu_init_identity_domain(void); + struct protection_domain *protection_domain_alloc(void); +diff --git a/drivers/iommu/amd/amd_iommu_types.h b/drivers/iommu/amd/amd_iommu_types.h +--- a/drivers/iommu/amd/amd_iommu_types.h ++++ b/drivers/iommu/amd/amd_iommu_types.h +@@ -65,6 +65,7 @@ + #define MMIO_MSI_ADDR_LO_OFFSET 0x015C + #define MMIO_MSI_ADDR_HI_OFFSET 0x0160 + #define MMIO_MSI_DATA_OFFSET 0x0164 ++#define MMIO_PERF_OPT_OFFSET 0x016C + #define MMIO_INTCAPXT_EVT_OFFSET 0x0170 + #define MMIO_INTCAPXT_PPR_OFFSET 0x0178 + #define MMIO_INTCAPXT_GALOG_OFFSET 0x0180 +@@ -99,6 +100,8 @@ + #define FEATURE_GLX GENMASK_ULL(15, 14) + #define FEATURE_GAM_VAPIC BIT_ULL(21) + #define FEATURE_PASMAX GENMASK_ULL(36, 32) ++#define FEATURE_PERF_OPT BIT_ULL(45) ++#define PERF_OPT_EN BIT(13) + #define FEATURE_GIOSUP BIT_ULL(48) + #define FEATURE_HASUP BIT_ULL(49) + #define FEATURE_EPHSUP BIT_ULL(50) +@@ -663,6 +666,9 @@ struct amd_iommu { + /* Extended features 2 */ + u64 features2; + ++ /* Devices requesting PerfOpt; the shared PERF_OPT_EN bit is on while >0. Protected by @lock. */ ++ int perfopt_refcount; ++ + /* PCI device id of the IOMMU device */ + u16 devid; + +@@ -824,6 +830,7 @@ struct iommu_dev_data { + u8 ppr :1; /* Enable device PPR support */ + bool use_vapic; /* Enable device to use vapic mode */ + bool defer_attach; ++ bool perfopt; + + struct ratelimit_state rs; /* Ratelimit IOPF messages */ + }; +diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c +--- a/drivers/iommu/amd/init.c ++++ b/drivers/iommu/amd/init.c +@@ -1945,6 +1945,9 @@ static int __init init_iommu_one(struct amd_iommu *iommu, struct ivhd_header *h, + if (!iommu->mmio_base) + return -ENOMEM; + ++ if (amd_iommu_perfopt_clear(iommu)) ++ pr_err("IOMMU%d: failed to clear PerfOpt\n", iommu->index); ++ + return init_iommu_from_acpi(iommu, h); + } + +@@ -3035,10 +3038,46 @@ static void enable_iommus_vapic(void) + #endif + } + ++static int clear_perfopt_all(void) ++{ ++ struct amd_iommu *iommu; ++ int err, ret = 0; ++ ++ for_each_iommu(iommu) { ++ err = amd_iommu_perfopt_clear(iommu); ++ if (err) ++ ret = err; ++ } ++ ++ return ret; ++} ++ ++static int restore_perfopt_all(void) ++{ ++ struct amd_iommu *iommu; ++ int err, ret = 0; ++ ++ for_each_iommu(iommu) { ++ err = amd_iommu_perfopt_restore(iommu); ++ if (err) ++ ret = err; ++ } ++ ++ return ret; ++} ++ + static void disable_iommus(void) + { + struct amd_iommu *iommu; + ++ /* ++ * PerfOpt is an optional performance bit, so a failure to clear it must ++ * not skip the mandatory disable below. This also runs from the void ++ * amd_iommu_disable() shutdown/kexec path, which cannot report an error. ++ */ ++ if (clear_perfopt_all()) ++ pr_err("Failed to clear PerfOpt while disabling IOMMUs\n"); ++ + for_each_iommu(iommu) + iommu_disable(iommu); + +@@ -3064,6 +3103,10 @@ static void amd_iommu_resume(void *data) + for_each_iommu(iommu) + early_enable_iommu(iommu); + ++ /* early_enable_iommu() cleared PERF_OPT_EN; re-assert it from the refcount. */ ++ if (restore_perfopt_all()) ++ pr_err("Failed to restore PerfOpt after IOMMU resume\n"); ++ + iommu_enable_event_buffer(); + amd_iommu_enable_interrupts(); + } +diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c +--- a/drivers/iommu/amd/iommu.c ++++ b/drivers/iommu/amd/iommu.c +@@ -2352,6 +2352,9 @@ static int attach_device(struct device *dev, + if (ret) + goto out; + ++ if (dev_data->perfopt) ++ goto skip_caps; ++ + /* Setup GCR3 table */ + if (pdom_is_sva_capable(domain)) { + ret = init_gcr3_table(dev_data, domain); +@@ -2376,6 +2379,7 @@ static int attach_device(struct device *dev, + pdev_enable_cap_ats(pdev); + } + ++skip_caps: + /* Update data structures */ + dev_data->domain = domain; + spin_lock_irqsave(&domain->lock, flags); +@@ -2444,6 +2448,192 @@ static void detach_device(struct device *dev) + mutex_unlock(&dev_data->mutex); + } + ++/* Program the per-IOMMU PerfOpt enable bit. Caller must hold iommu->lock. */ ++static int __perfopt_write(struct amd_iommu *iommu, bool enable) ++{ ++ u32 old, val, readback; ++ ++ if (!(readq(iommu->mmio_base + MMIO_EXT_FEATURES) & FEATURE_PERF_OPT)) ++ return enable ? -ENODEV : 0; ++ ++ old = readl(iommu->mmio_base + MMIO_PERF_OPT_OFFSET); ++ if (old == U32_MAX) ++ return -EIO; ++ ++ val = enable ? old | PERF_OPT_EN : old & ~PERF_OPT_EN; ++ if (val != old) ++ writel(val, iommu->mmio_base + MMIO_PERF_OPT_OFFSET); ++ readback = readl(iommu->mmio_base + MMIO_PERF_OPT_OFFSET); ++ if (readback == U32_MAX || ++ (readback & PERF_OPT_EN) != (val & PERF_OPT_EN)) ++ return -EIO; ++ return 0; ++} ++ ++/* ++ * PERF_OPT_EN is a single bit shared by every device behind @iommu, so it is ++ * reference counted: armed on the first requesting device, cleared on the last. ++ */ ++static int perfopt_get(struct amd_iommu *iommu) ++{ ++ unsigned long flags; ++ int ret = 0; ++ ++ if (!iommu->mmio_base) ++ return 0; ++ ++ raw_spin_lock_irqsave(&iommu->lock, flags); ++ if (iommu->perfopt_refcount == 0) { ++ ret = __perfopt_write(iommu, true); ++ if (ret) ++ goto out; ++ } ++ iommu->perfopt_refcount++; ++out: ++ raw_spin_unlock_irqrestore(&iommu->lock, flags); ++ return ret; ++} ++ ++static int perfopt_put(struct amd_iommu *iommu) ++{ ++ unsigned long flags; ++ int ret = 0; ++ ++ if (!iommu->mmio_base) ++ return 0; ++ ++ raw_spin_lock_irqsave(&iommu->lock, flags); ++ if (iommu->perfopt_refcount > 0 && --iommu->perfopt_refcount == 0) ++ ret = __perfopt_write(iommu, false); ++ raw_spin_unlock_irqrestore(&iommu->lock, flags); ++ return ret; ++} ++ ++/* ++ * Force PERF_OPT_EN off without touching the refcount (used on init, shutdown, ++ * and suspend). The count is preserved so amd_iommu_perfopt_restore() can ++ * re-arm on resume. ++ */ ++int amd_iommu_perfopt_clear(struct amd_iommu *iommu) ++{ ++ unsigned long flags; ++ int ret; ++ ++ if (!iommu->mmio_base) ++ return 0; ++ ++ raw_spin_lock_irqsave(&iommu->lock, flags); ++ ret = __perfopt_write(iommu, false); ++ raw_spin_unlock_irqrestore(&iommu->lock, flags); ++ return ret; ++} ++ ++/* ++ * Re-assert PERF_OPT_EN from the refcount after the hardware was reprogrammed on ++ * resume, so devices armed before suspend keep the optimization without each ++ * consumer driver re-arming. ++ */ ++int amd_iommu_perfopt_restore(struct amd_iommu *iommu) ++{ ++ unsigned long flags; ++ int ret; ++ ++ if (!iommu->mmio_base) ++ return 0; ++ ++ raw_spin_lock_irqsave(&iommu->lock, flags); ++ ret = __perfopt_write(iommu, iommu->perfopt_refcount > 0); ++ raw_spin_unlock_irqrestore(&iommu->lock, flags); ++ return ret; ++} ++ ++int amd_iommu_enable_perfopt(struct pci_dev *pdev) ++{ ++ struct iommu_dev_data *dev_data = dev_iommu_priv_get(&pdev->dev); ++ struct amd_iommu *iommu = rlookup_amd_iommu(&pdev->dev); ++ struct protection_domain *domain; ++ int ret; ++ ++ if (!iommu || !dev_data) ++ return -ENODEV; ++ ++ if (!(iommu->features & FEATURE_PERF_OPT)) ++ return -ENODEV; ++ ++ domain = dev_data->domain; ++ if (!domain) ++ return -ENODEV; ++ ++ /* Already armed for this device (e.g. re-entry on resume). */ ++ if (dev_data->perfopt) ++ return 0; ++ ++ /* ++ * The bit is only architecturally valid while the device is untranslated: ++ * identity domain with ATS/PRI/PASID off. The identity domain is ++ * SVA-capable so attach_device() enabled ATS/PRI/PASID and built a GCR3 ++ * table. Re-home the device onto the same identity domain with ++ * perfopt set, so the attach_device() skip_caps path leaves ++ * ATS/PRI/PASID off and no GCR3 table. This follows the detach/attach ++ * pattern used by amd_iommu_attach_device(). ++ * ++ * Locking: this and amd_iommu_disable_perfopt() run only from the ++ * consumer driver's bind/unbind path. group->mutex is not exposed to ++ * drivers, but a device bound to its native driver cannot have its domain ++ * changed concurrently by the core (VFIO ownership is mutually exclusive; ++ * sysfs domain changes require an unused group), so the detach/attach pair ++ * is serialized without it. ++ */ ++ dev_data->perfopt = true; ++ detach_device(&pdev->dev); ++ ret = attach_device(&pdev->dev, domain); ++ if (ret) ++ goto err_restore; ++ ++ ret = perfopt_get(iommu); ++ if (ret) ++ goto err_rearm; ++ ++ dev_info_once(&pdev->dev, "PerfOpt armed on IOMMU%d\n", iommu->index); ++ return 0; ++ ++err_rearm: ++ detach_device(&pdev->dev); ++err_restore: ++ dev_data->perfopt = false; ++ if (attach_device(&pdev->dev, domain)) ++ pci_err(pdev, "failed to restore state after PerfOpt setup; device left detached\n"); ++ dev_err_once(&pdev->dev, "PerfOpt failed to arm on IOMMU%d (%d)\n", ++ iommu->index, ret); ++ return ret; ++} ++EXPORT_SYMBOL_GPL(amd_iommu_enable_perfopt); ++ ++void amd_iommu_disable_perfopt(struct pci_dev *pdev) ++{ ++ struct iommu_dev_data *dev_data = dev_iommu_priv_get(&pdev->dev); ++ struct amd_iommu *iommu = rlookup_amd_iommu(&pdev->dev); ++ struct protection_domain *domain; ++ ++ if (!iommu || !dev_data || !dev_data->perfopt || !dev_data->domain) ++ return; ++ ++ if (WARN_ON(perfopt_put(iommu))) ++ pci_err(pdev, "failed to clear PerfOpt\n"); ++ ++ /* ++ * Restore ATS/PRI/PASID (and thus SVA) by re-homing the device onto its ++ * identity domain with the flag cleared, so a later bind without PerfOpt ++ * sees a normally-capable device. See the locking note in ++ * amd_iommu_enable_perfopt(). ++ */ ++ domain = dev_data->domain; ++ dev_data->perfopt = false; ++ detach_device(&pdev->dev); ++ if (attach_device(&pdev->dev, domain)) ++ pci_err(pdev, "failed to restore caps after PerfOpt disable\n"); ++} ++EXPORT_SYMBOL_GPL(amd_iommu_disable_perfopt); + static struct iommu_device *amd_iommu_probe_device(struct device *dev) + { + struct iommu_device *iommu_dev; +@@ -2511,6 +2701,14 @@ static struct iommu_device *amd_iommu_probe_device(struct device *dev) + static void amd_iommu_release_device(struct device *dev) + { + struct iommu_dev_data *dev_data = dev_iommu_priv_get(dev); ++ struct amd_iommu *iommu = get_amd_iommu_from_dev_data(dev_data); ++ ++ if (dev_data->perfopt) { ++ if (WARN_ON(perfopt_put(iommu))) ++ dev_err(dev, "IOMMU%d: failed to clear PerfOpt on release\n", ++ iommu->index); ++ dev_data->perfopt = false; ++ } + + WARN_ON(dev_data->domain); + +@@ -2885,6 +3083,19 @@ static int blocked_domain_attach_device(struct iommu_domain *domain, + struct iommu_domain *old) + { + struct iommu_dev_data *dev_data = dev_iommu_priv_get(dev); ++ struct amd_iommu *iommu = get_amd_iommu_from_dev_data(dev_data); ++ ++ /* ++ * blocked_domain is also the .release_domain, so this is the normal ++ * teardown path: drop the reference and clear the flag here too, and ++ * don't fail teardown if the WARN-guarded write doesn't stick. ++ */ ++ if (dev_data->perfopt) { ++ if (WARN_ON(perfopt_put(iommu))) ++ dev_err(dev, "IOMMU%d: failed to clear PerfOpt for blocked domain\n", ++ iommu->index); ++ dev_data->perfopt = false; ++ } + + if (dev_data->domain) + detach_device(dev); +@@ -2953,6 +3164,9 @@ static int amd_iommu_attach_device(struct iommu_domain *dom, struct device *dev, + struct amd_iommu *iommu = get_amd_iommu_from_dev(dev); + int ret; + ++ if (dev_data->perfopt && !pdom_is_in_pt_mode(domain)) ++ return -EBUSY; ++ + /* + * Skip attach device to domain if new domain is same as + * devices current domain +diff --git a/include/linux/amd-iommu.h b/include/linux/amd-iommu.h +--- a/include/linux/amd-iommu.h ++++ b/include/linux/amd-iommu.h +@@ -11,11 +11,11 @@ + #include + + struct amd_iommu; ++struct pci_dev; + + #ifdef CONFIG_AMD_IOMMU + + struct task_struct; +-struct pci_dev; + + extern void amd_iommu_detect(void); + +@@ -76,4 +76,15 @@ static inline int amd_iommu_snp_disable(void) { return 0; } + static inline bool amd_iommu_sev_tio_supported(void) { return false; } + #endif + ++#ifdef CONFIG_AMD_IOMMU ++int amd_iommu_enable_perfopt(struct pci_dev *pdev); ++void amd_iommu_disable_perfopt(struct pci_dev *pdev); ++#else ++static inline int amd_iommu_enable_perfopt(struct pci_dev *pdev) ++{ ++ return 0; ++} ++static inline void amd_iommu_disable_perfopt(struct pci_dev *pdev) { } ++#endif ++ + #endif /* _ASM_X86_AMD_IOMMU_H */ diff --git a/pkgbuilds/linux-omarchy-bore/0711-iommu-amd-perfopt-support.patch.sig b/pkgbuilds/linux-omarchy-bore/0711-iommu-amd-perfopt-support.patch.sig new file mode 100644 index 0000000..c4b7be2 Binary files /dev/null and b/pkgbuilds/linux-omarchy-bore/0711-iommu-amd-perfopt-support.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-bore/0712-drm-amdgpu-perfopt-in-identity-domain.patch b/pkgbuilds/linux-omarchy-bore/0712-drm-amdgpu-perfopt-in-identity-domain.patch new file mode 100644 index 0000000..5c74198 --- /dev/null +++ b/pkgbuilds/linux-omarchy-bore/0712-drm-amdgpu-perfopt-in-identity-domain.patch @@ -0,0 +1,128 @@ +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -160,6 +160,7 @@ struct amdgpu_watchdog_timer { + * Modules parameters. + */ + extern int amdgpu_modeset; ++extern int amdgpu_iommu_perfopt; + extern unsigned int amdgpu_vram_limit; + extern int amdgpu_vis_vram_limit; + extern int amdgpu_gart_size; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -3842,6 +3843,28 @@ amdgpu_device_should_register_switcheroo(struct amdgpu_device *adev, bool px) + apple_gmux_detect(NULL, NULL))); + } + ++static inline bool amdgpu_device_identity(struct amdgpu_device *adev) ++{ ++ struct pci_dev *pdev = adev->pdev; ++ struct iommu_domain *domain = iommu_get_domain_for_dev(&pdev->dev); ++ ++ if (!domain) ++ return false; ++ ++ return domain->type == IOMMU_DOMAIN_IDENTITY; ++} ++ ++static bool amdgpu_device_use_perfopt(struct amdgpu_device *adev) ++{ ++ if (amdgpu_iommu_perfopt == 0) ++ return false; ++ ++ if (!(adev->flags & AMD_IS_APU)) ++ return false; ++ ++ return amdgpu_device_identity(adev); ++} ++ + /** + * amdgpu_device_init - initialize the driver + * +@@ -4048,6 +4071,16 @@ int amdgpu_device_init(struct amdgpu_device *adev, + if (r) + return r; + ++ if (amdgpu_device_use_perfopt(adev)) { ++ int perfopt_ret = amd_iommu_enable_perfopt(pdev); ++ ++ /* Optional optimization; a failure to arm it must not abort probe. */ ++ if (perfopt_ret) ++ dev_warn(adev->dev, ++ "Failed to enable IOMMU PerfOpt (%d); continuing without it\n", ++ perfopt_ret); ++ } ++ + /* + * No need to remove conflicting FBs for non-display class devices. + * This prevents the sysfb from being freed accidently. +@@ -4416,6 +4449,9 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev) + + amdgpu_gart_dummy_page_fini(adev); + ++ if (amdgpu_device_use_perfopt(adev)) ++ amd_iommu_disable_perfopt(adev->pdev); ++ + if (pci_dev_is_disconnected(adev->pdev)) + amdgpu_device_unmap_mmio(adev); + +@@ -4779,6 +4815,20 @@ int amdgpu_device_resume(struct drm_device *dev, bool notify_clients) + if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) + return 0; + ++ if (amdgpu_device_use_perfopt(adev)) { ++ int perfopt_ret = amd_iommu_enable_perfopt(adev->pdev); ++ ++ /* ++ * Must not return on failure: a bare return would leak the ++ * SR-IOV VF exclusive-mode acquisition taken above (released ++ * via the exit: path). ++ */ ++ if (perfopt_ret) ++ dev_warn(adev->dev, ++ "Failed to enable IOMMU PerfOpt (%d); continuing without it\n", ++ perfopt_ret); ++ } ++ + if (adev->in_s0ix) + amdgpu_dpm_gfx_state_change(adev, sGpuChangeState_D0Entry); + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +@@ -185,6 +185,7 @@ char *amdgpu_disable_cu; + char *amdgpu_virtual_display; + int amdgpu_enforce_isolation = -1; + int amdgpu_modeset = -1; ++int amdgpu_iommu_perfopt = -1; + + /* Specifies the default granularity for SVM, used in buffer + * migration and restoration of backing memory when handling +@@ -393,6 +394,17 @@ module_param_named(fw_load_type, amdgpu_fw_load_type, int, 0444); + MODULE_PARM_DESC(aspm, "ASPM support (1 = enable, 0 = disable, -1 = auto)"); + module_param_named(aspm, amdgpu_aspm, int, 0444); + ++/** ++ * DOC: iommu_perfopt (int) ++ * Control the AMD IOMMU PerfOpt DMA-latency optimization ++ * (0 = disable; -1 = enable on supported devices). ++ * This arms the IOMMU PerfOpt control (IOMMU spec, MMIO Offset 016Ch, EFR PerfOptSup / PerfOptEn) ++ * Arming it disables ATS, PRI, PASID and SVA for the GPU and removes IOMMU DMA containment for it, ++ * trading isolation for lower DMA latency. ++ */ ++MODULE_PARM_DESC(iommu_perfopt, "Control IOMMU PerfOpt DMA-latency optimization (-1 = enable on supported devices, 0 = disable)"); ++module_param_named(iommu_perfopt, amdgpu_iommu_perfopt, int, 0444); ++ + /** + * DOC: runpm (int) + * Override for runtime power management control for dGPUs. The amdgpu driver can dynamically power down diff --git a/pkgbuilds/linux-omarchy-bore/0712-drm-amdgpu-perfopt-in-identity-domain.patch.sig b/pkgbuilds/linux-omarchy-bore/0712-drm-amdgpu-perfopt-in-identity-domain.patch.sig new file mode 100644 index 0000000..8d77e46 Binary files /dev/null and b/pkgbuilds/linux-omarchy-bore/0712-drm-amdgpu-perfopt-in-identity-domain.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-bore/0803-acpi-battery-hook-api-acpi-prefix.patch b/pkgbuilds/linux-omarchy-bore/0803-acpi-battery-hook-api-acpi-prefix.patch new file mode 100644 index 0000000..c3246f0 --- /dev/null +++ b/pkgbuilds/linux-omarchy-bore/0803-acpi-battery-hook-api-acpi-prefix.patch @@ -0,0 +1,412 @@ +diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c +--- a/drivers/acpi/battery.c ++++ b/drivers/acpi/battery.c +@@ -736,7 +736,7 @@ static LIST_HEAD(acpi_battery_list); + static LIST_HEAD(battery_hook_list); + static DEFINE_MUTEX(hook_mutex); + +-static void battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) ++static void acpi_battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) + { + struct acpi_battery *battery; + +@@ -753,7 +753,7 @@ static void battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) + pr_info("hook unregistered: %s\n", hook->name); + } + +-void battery_hook_unregister(struct acpi_battery_hook *hook) ++void acpi_battery_hook_unregister(struct acpi_battery_hook *hook) + { + mutex_lock(&hook_mutex); + /* +@@ -762,13 +762,13 @@ void battery_hook_unregister(struct acpi_battery_hook *hook) + * adding a new battery. + */ + if (!list_empty(&hook->list)) +- battery_hook_unregister_unlocked(hook); ++ acpi_battery_hook_unregister_unlocked(hook); + + mutex_unlock(&hook_mutex); + } +-EXPORT_SYMBOL_GPL(battery_hook_unregister); ++EXPORT_SYMBOL_GPL(acpi_battery_hook_unregister); + +-void battery_hook_register(struct acpi_battery_hook *hook) ++void acpi_battery_hook_register(struct acpi_battery_hook *hook) + { + struct acpi_battery *battery; + +@@ -789,7 +789,7 @@ void battery_hook_register(struct acpi_battery_hook *hook) + * hooks. + */ + pr_err("hook failed to load: %s", hook->name); +- battery_hook_unregister_unlocked(hook); ++ acpi_battery_hook_unregister_unlocked(hook); + goto end; + } + +@@ -799,22 +799,22 @@ void battery_hook_register(struct acpi_battery_hook *hook) + end: + mutex_unlock(&hook_mutex); + } +-EXPORT_SYMBOL_GPL(battery_hook_register); ++EXPORT_SYMBOL_GPL(acpi_battery_hook_register); + +-static void devm_battery_hook_unregister(void *data) ++static void devm_acpi_battery_hook_unregister(void *data) + { + struct acpi_battery_hook *hook = data; + +- battery_hook_unregister(hook); ++ acpi_battery_hook_unregister(hook); + } + +-int devm_battery_hook_register(struct device *dev, struct acpi_battery_hook *hook) ++int devm_acpi_battery_hook_register(struct device *dev, struct acpi_battery_hook *hook) + { +- battery_hook_register(hook); ++ acpi_battery_hook_register(hook); + +- return devm_add_action_or_reset(dev, devm_battery_hook_unregister, hook); ++ return devm_add_action_or_reset(dev, devm_acpi_battery_hook_unregister, hook); + } +-EXPORT_SYMBOL_GPL(devm_battery_hook_register); ++EXPORT_SYMBOL_GPL(devm_acpi_battery_hook_register); + + /* + * This function gets called right after the battery sysfs +@@ -843,7 +843,7 @@ static void battery_hook_add_battery(struct acpi_battery *battery) + */ + pr_err("error in hook, unloading: %s", + hook_node->name); +- battery_hook_unregister_unlocked(hook_node); ++ acpi_battery_hook_unregister_unlocked(hook_node); + } + } + mutex_unlock(&hook_mutex); +@@ -876,7 +876,7 @@ static void __exit battery_hook_exit(void) + * need to remove the hooks. + */ + list_for_each_entry_safe(hook, ptr, &battery_hook_list, list) { +- battery_hook_unregister(hook); ++ acpi_battery_hook_unregister(hook); + } + mutex_destroy(&hook_mutex); + } +diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c +--- a/drivers/platform/x86/asus-wmi.c ++++ b/drivers/platform/x86/asus-wmi.c +@@ -1681,14 +1681,14 @@ static void asus_wmi_battery_init(struct asus_wmi *asus) + asus->battery_rsoc_available = false; + if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_RSOC)) { + asus->battery_rsoc_available = true; +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + } + } + + static void asus_wmi_battery_exit(struct asus_wmi *asus) + { + if (asus->battery_rsoc_available) +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + } + + /* LEDs ***********************************************************************/ +diff --git a/drivers/platform/x86/ayaneo-ec.c b/drivers/platform/x86/ayaneo-ec.c +--- a/drivers/platform/x86/ayaneo-ec.c ++++ b/drivers/platform/x86/ayaneo-ec.c +@@ -493,7 +493,7 @@ static int ayaneo_ec_probe(struct platform_device *pdev) + data->battery_hook.add_battery = ayaneo_add_battery; + data->battery_hook.remove_battery = ayaneo_remove_battery; + data->battery_hook.name = "Ayaneo Battery"; +- ret = devm_battery_hook_register(&pdev->dev, &data->battery_hook); ++ ret = devm_acpi_battery_hook_register(&pdev->dev, &data->battery_hook); + if (ret) + return ret; + } +diff --git a/drivers/platform/x86/dell/dell-laptop.c b/drivers/platform/x86/dell/dell-laptop.c +--- a/drivers/platform/x86/dell/dell-laptop.c ++++ b/drivers/platform/x86/dell/dell-laptop.c +@@ -2446,13 +2446,13 @@ static void __init dell_battery_init(struct device *dev) + battery_supported_modes = battery_get_supported_modes(); + + if (battery_supported_modes != 0) +- battery_hook_register(&dell_battery_hook); ++ acpi_battery_hook_register(&dell_battery_hook); + } + + static void dell_battery_exit(void) + { + if (battery_supported_modes != 0) +- battery_hook_unregister(&dell_battery_hook); ++ acpi_battery_hook_unregister(&dell_battery_hook); + } + + static int __init dell_init(void) +diff --git a/drivers/platform/x86/dell/dell-wmi-ddv.c b/drivers/platform/x86/dell/dell-wmi-ddv.c +--- a/drivers/platform/x86/dell/dell-wmi-ddv.c ++++ b/drivers/platform/x86/dell/dell-wmi-ddv.c +@@ -972,7 +972,7 @@ static int dell_wmi_ddv_battery_add(struct dell_wmi_ddv_data *data) + data->eppid_attr.attr.mode = 0444; + data->eppid_attr.show = eppid_show; + +- return devm_battery_hook_register(&data->wdev->dev, &data->hook); ++ return devm_acpi_battery_hook_register(&data->wdev->dev, &data->hook); + } + + static int dell_wmi_ddv_buffer_read(struct seq_file *seq, enum dell_ddv_method method) +diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c +--- a/drivers/platform/x86/fujitsu-laptop.c ++++ b/drivers/platform/x86/fujitsu-laptop.c +@@ -267,7 +267,7 @@ static int fujitsu_battery_charge_control_add(struct device *dev) + return -ENODEV; + + priv->charge_control_supported = true; +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + + return 0; + } +@@ -277,7 +277,7 @@ static void fujitsu_battery_charge_control_remove(struct device *dev) + struct fujitsu_laptop *priv = dev_get_drvdata(dev); + + if (priv->charge_control_supported) +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + } + + /* Hardware access for LCD brightness control */ +diff --git a/drivers/platform/x86/huawei-wmi.c b/drivers/platform/x86/huawei-wmi.c +--- a/drivers/platform/x86/huawei-wmi.c ++++ b/drivers/platform/x86/huawei-wmi.c +@@ -512,7 +512,7 @@ static void huawei_wmi_battery_setup(struct device *dev) + return; + } + +- battery_hook_register(&huawei_wmi_battery_hook); ++ acpi_battery_hook_register(&huawei_wmi_battery_hook); + device_create_file(dev, &dev_attr_charge_control_thresholds); + } + +@@ -521,7 +521,7 @@ static void huawei_wmi_battery_exit(struct device *dev) + struct huawei_wmi *huawei = dev_get_drvdata(dev); + + if (huawei->battery_available) { +- battery_hook_unregister(&huawei_wmi_battery_hook); ++ acpi_battery_hook_unregister(&huawei_wmi_battery_hook); + device_remove_file(dev, &dev_attr_charge_control_thresholds); + } + } +diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c +--- a/drivers/platform/x86/lenovo/ideapad-laptop.c ++++ b/drivers/platform/x86/lenovo/ideapad-laptop.c +@@ -2197,8 +2197,8 @@ static int ideapad_check_features(struct ideapad_private *priv) + priv->battery_hook.remove_battery = ideapad_battery_remove; + priv->battery_hook.name = "Ideapad Battery Extension"; + +- err = devm_battery_hook_register(&priv->platform_device->dev, +- &priv->battery_hook); ++ err = devm_acpi_battery_hook_register(&priv->platform_device->dev, ++ &priv->battery_hook); + if (err) + return err; + } +diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c +--- a/drivers/platform/x86/lenovo/thinkpad_acpi.c ++++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c +@@ -10021,13 +10021,13 @@ static int __init tpacpi_battery_init(struct ibm_init_struct *ibm) + battery_quirk_table, + ARRAY_SIZE(battery_quirk_table)); + +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + return 0; + } + + static void tpacpi_battery_exit(void) + { +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + } + + static struct ibm_struct battery_driver_data = { +diff --git a/drivers/platform/x86/lenovo/wmi-other.c b/drivers/platform/x86/lenovo/wmi-other.c +--- a/drivers/platform/x86/lenovo/wmi-other.c ++++ b/drivers/platform/x86/lenovo/wmi-other.c +@@ -946,7 +946,7 @@ static void lwmi_om_psy_ext_init(struct lwmi_om_priv *priv) + priv->battery_hook.name = "Lenovo WMI Other Battery Extension"; + priv->bh_registered = true; + +- battery_hook_register(&priv->battery_hook); ++ acpi_battery_hook_register(&priv->battery_hook); + } + + /** +@@ -960,7 +960,7 @@ static void lwmi_om_psy_remove(struct lwmi_om_priv *priv) + if (!priv->bh_registered) + return; + +- battery_hook_unregister(&priv->battery_hook); ++ acpi_battery_hook_unregister(&priv->battery_hook); + priv->bh_registered = false; + } + +diff --git a/drivers/platform/x86/lg-laptop.c b/drivers/platform/x86/lg-laptop.c +--- a/drivers/platform/x86/lg-laptop.c ++++ b/drivers/platform/x86/lg-laptop.c +@@ -1053,7 +1053,7 @@ static int acpi_probe(struct platform_device *pdev) + if (ret) + goto out_platform_device; + +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + + return 0; + +@@ -1068,7 +1068,7 @@ static void acpi_remove(struct platform_device *pdev) + { + sysfs_remove_group(&pf_device->dev.kobj, &dev_attribute_group); + +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + platform_device_unregister(pf_device); + pf_device = NULL; + platform_driver_unregister(&pf_driver); +diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c +--- a/drivers/platform/x86/msi-ec.c ++++ b/drivers/platform/x86/msi-ec.c +@@ -1428,13 +1428,13 @@ static int __init msi_ec_init(void) + if (result < 0) + return result; + +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + return 0; + } + + static void __exit msi_ec_exit(void) + { +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + } + + MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/x86/oxpec.c b/drivers/platform/x86/oxpec.c +--- a/drivers/platform/x86/oxpec.c ++++ b/drivers/platform/x86/oxpec.c +@@ -956,7 +956,7 @@ static int oxp_platform_probe(struct platform_device *pdev) + return PTR_ERR(hwdev); + + if (oxp_psy_ext_supported()) { +- ret = devm_battery_hook_register(dev, &battery_hook); ++ ret = devm_acpi_battery_hook_register(dev, &battery_hook); + if (ret) + return ret; + } +diff --git a/drivers/platform/x86/samsung-galaxybook.c b/drivers/platform/x86/samsung-galaxybook.c +--- a/drivers/platform/x86/samsung-galaxybook.c ++++ b/drivers/platform/x86/samsung-galaxybook.c +@@ -549,7 +549,8 @@ static int galaxybook_battery_threshold_init(struct samsung_galaxybook *galaxybo + galaxybook->battery_hook.remove_battery = galaxybook_battery_remove; + galaxybook->battery_hook.name = "Samsung Galaxy Book Battery Extension"; + +- return devm_battery_hook_register(&galaxybook->platform->dev, &galaxybook->battery_hook); ++ return devm_acpi_battery_hook_register(&galaxybook->platform->dev, ++ &galaxybook->battery_hook); + } + + /* +diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c +--- a/drivers/platform/x86/samsung-laptop.c ++++ b/drivers/platform/x86/samsung-laptop.c +@@ -1142,8 +1142,8 @@ static int __init samsung_battery_hook_init(struct samsung_laptop *samsung) + samsung->battery_hook.add_battery = samsung_battery_add; + samsung->battery_hook.remove_battery = samsung_battery_remove; + samsung->battery_hook.name = "Samsung Battery Extension"; +- retval = devm_battery_hook_register(&samsung->platform_device->dev, +- &samsung->battery_hook); ++ retval = devm_acpi_battery_hook_register(&samsung->platform_device->dev, ++ &samsung->battery_hook); + } + + return retval; +diff --git a/drivers/platform/x86/system76_acpi.c b/drivers/platform/x86/system76_acpi.c +--- a/drivers/platform/x86/system76_acpi.c ++++ b/drivers/platform/x86/system76_acpi.c +@@ -288,12 +288,12 @@ static struct acpi_battery_hook system76_battery_hook = { + + static void system76_battery_init(void) + { +- battery_hook_register(&system76_battery_hook); ++ acpi_battery_hook_register(&system76_battery_hook); + } + + static void system76_battery_exit(void) + { +- battery_hook_unregister(&system76_battery_hook); ++ acpi_battery_hook_unregister(&system76_battery_hook); + } + + // Get the airplane mode LED brightness +diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c +--- a/drivers/platform/x86/toshiba_acpi.c ++++ b/drivers/platform/x86/toshiba_acpi.c +@@ -3301,7 +3301,7 @@ static void toshiba_acpi_remove(struct platform_device *pdev) + } + + if (dev->battery_charge_mode_supported) +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + + if (toshiba_acpi) + toshiba_acpi = NULL; +@@ -3566,7 +3566,7 @@ static int toshiba_acpi_probe(struct platform_device *pdev) + * set, this must be done after toshiba_acpi is assigned. + */ + if (dev->battery_charge_mode_supported) +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + + return 0; + +diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c +--- a/drivers/platform/x86/uniwill/uniwill-acpi.c ++++ b/drivers/platform/x86/uniwill/uniwill-acpi.c +@@ -2165,7 +2165,7 @@ static int uniwill_battery_init(struct uniwill_data *data) + data->hook.add_battery = uniwill_add_battery; + data->hook.remove_battery = uniwill_remove_battery; + +- return devm_battery_hook_register(data->dev, &data->hook); ++ return devm_acpi_battery_hook_register(data->dev, &data->hook); + } + + static int uniwill_notifier_call(struct notifier_block *nb, unsigned long action, void *dummy) +diff --git a/drivers/power/supply/cros_charge-control.c b/drivers/power/supply/cros_charge-control.c +--- a/drivers/power/supply/cros_charge-control.c ++++ b/drivers/power/supply/cros_charge-control.c +@@ -315,7 +315,7 @@ static int cros_chctl_probe(struct platform_device *pdev) + if (ret < 0) + return ret; + +- return devm_battery_hook_register(dev, &priv->battery_hook); ++ return devm_acpi_battery_hook_register(dev, &priv->battery_hook); + } + + static const struct platform_device_id cros_chctl_id[] = { +diff --git a/include/acpi/battery.h b/include/acpi/battery.h +--- a/include/acpi/battery.h ++++ b/include/acpi/battery.h +@@ -18,8 +18,9 @@ struct acpi_battery_hook { + struct list_head list; + }; + +-void battery_hook_register(struct acpi_battery_hook *hook); +-void battery_hook_unregister(struct acpi_battery_hook *hook); +-int devm_battery_hook_register(struct device *dev, struct acpi_battery_hook *hook); ++void acpi_battery_hook_register(struct acpi_battery_hook *hook); ++void acpi_battery_hook_unregister(struct acpi_battery_hook *hook); ++int devm_acpi_battery_hook_register(struct device *dev, ++ struct acpi_battery_hook *hook); + + #endif diff --git a/pkgbuilds/linux-omarchy-bore/0803-acpi-battery-hook-api-acpi-prefix.patch.sig b/pkgbuilds/linux-omarchy-bore/0803-acpi-battery-hook-api-acpi-prefix.patch.sig new file mode 100644 index 0000000..5a6282a Binary files /dev/null and b/pkgbuilds/linux-omarchy-bore/0803-acpi-battery-hook-api-acpi-prefix.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-bore/0804-acpi-battery-unified-hooks-acpi-sbs.patch b/pkgbuilds/linux-omarchy-bore/0804-acpi-battery-unified-hooks-acpi-sbs.patch new file mode 100644 index 0000000..a50095e --- /dev/null +++ b/pkgbuilds/linux-omarchy-bore/0804-acpi-battery-unified-hooks-acpi-sbs.patch @@ -0,0 +1,472 @@ +diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig +--- a/drivers/acpi/Kconfig ++++ b/drivers/acpi/Kconfig +@@ -171,8 +171,12 @@ config ACPI_AC + To compile this driver as a module, choose M here: + the module will be called ac. + ++config ACPI_BATTERY_HOOKS ++ tristate ++ + config ACPI_BATTERY + tristate "Battery" ++ select ACPI_BATTERY_HOOKS + select POWER_SUPPLY + default y + help +@@ -445,6 +449,7 @@ config ACPI_HOTPLUG_IOAPIC + config ACPI_SBS + tristate "Smart Battery System" + depends on X86 && ACPI_EC ++ select ACPI_BATTERY_HOOKS + select POWER_SUPPLY + help + This driver supports the Smart Battery System, another +diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile +--- a/drivers/acpi/Makefile ++++ b/drivers/acpi/Makefile +@@ -97,6 +97,7 @@ obj-$(CONFIG_ACPI_NHLT) += nhlt.o + obj-$(CONFIG_ACPI_NUMA) += numa/ + obj-$(CONFIG_ACPI) += acpi_memhotplug.o + obj-$(CONFIG_ACPI_HOTPLUG_IOAPIC) += ioapic.o ++obj-$(CONFIG_ACPI_BATTERY_HOOKS) += battery_hooks.o + obj-$(CONFIG_ACPI_BATTERY) += battery.o + obj-$(CONFIG_ACPI_SBS) += sbshc.o + obj-$(CONFIG_ACPI_SBS) += sbs.o +diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c +--- a/drivers/acpi/battery.c ++++ b/drivers/acpi/battery.c +@@ -48,6 +48,7 @@ MODULE_AUTHOR("Paul Diefenbaugh"); + MODULE_AUTHOR("Alexey Starikovskiy "); + MODULE_DESCRIPTION("ACPI Battery Driver"); + MODULE_LICENSE("GPL"); ++MODULE_IMPORT_NS("ACPI_BATTERY_HOOKS"); + + static int battery_bix_broken_package; + static int battery_notification_delay_ms; +@@ -97,7 +98,7 @@ struct acpi_battery { + struct acpi_device *device; + struct device *phys_dev; + struct notifier_block pm_nb; +- struct list_head list; ++ struct acpi_battery_hooks_list_entry hooks_list_entry; + unsigned long flags; + + struct mutex property_lock; /* Protects properties below. */ +@@ -723,164 +724,6 @@ static struct attribute *acpi_battery_attrs[] = { + }; + ATTRIBUTE_GROUPS(acpi_battery); + +-/* +- * The Battery Hooking API +- * +- * This API is used inside other drivers that need to expose +- * platform-specific behaviour within the generic driver in a +- * generic way. +- * +- */ +- +-static LIST_HEAD(acpi_battery_list); +-static LIST_HEAD(battery_hook_list); +-static DEFINE_MUTEX(hook_mutex); +- +-static void acpi_battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) +-{ +- struct acpi_battery *battery; +- +- /* +- * In order to remove a hook, we first need to +- * de-register all the batteries that are registered. +- */ +- list_for_each_entry(battery, &acpi_battery_list, list) { +- if (!hook->remove_battery(battery->bat, hook)) +- power_supply_changed(battery->bat); +- } +- list_del_init(&hook->list); +- +- pr_info("hook unregistered: %s\n", hook->name); +-} +- +-void acpi_battery_hook_unregister(struct acpi_battery_hook *hook) +-{ +- mutex_lock(&hook_mutex); +- /* +- * Ignore already unregistered battery hooks. This might happen +- * if a battery hook was previously unloaded due to an error when +- * adding a new battery. +- */ +- if (!list_empty(&hook->list)) +- acpi_battery_hook_unregister_unlocked(hook); +- +- mutex_unlock(&hook_mutex); +-} +-EXPORT_SYMBOL_GPL(acpi_battery_hook_unregister); +- +-void acpi_battery_hook_register(struct acpi_battery_hook *hook) +-{ +- struct acpi_battery *battery; +- +- mutex_lock(&hook_mutex); +- list_add(&hook->list, &battery_hook_list); +- /* +- * Now that the driver is registered, we need +- * to notify the hook that a battery is available +- * for each battery, so that the driver may add +- * its attributes. +- */ +- list_for_each_entry(battery, &acpi_battery_list, list) { +- if (hook->add_battery(battery->bat, hook)) { +- /* +- * If a add-battery returns non-zero, +- * the registration of the hook has failed, +- * and we will not add it to the list of loaded +- * hooks. +- */ +- pr_err("hook failed to load: %s", hook->name); +- acpi_battery_hook_unregister_unlocked(hook); +- goto end; +- } +- +- power_supply_changed(battery->bat); +- } +- pr_info("new hook: %s\n", hook->name); +-end: +- mutex_unlock(&hook_mutex); +-} +-EXPORT_SYMBOL_GPL(acpi_battery_hook_register); +- +-static void devm_acpi_battery_hook_unregister(void *data) +-{ +- struct acpi_battery_hook *hook = data; +- +- acpi_battery_hook_unregister(hook); +-} +- +-int devm_acpi_battery_hook_register(struct device *dev, struct acpi_battery_hook *hook) +-{ +- acpi_battery_hook_register(hook); +- +- return devm_add_action_or_reset(dev, devm_acpi_battery_hook_unregister, hook); +-} +-EXPORT_SYMBOL_GPL(devm_acpi_battery_hook_register); +- +-/* +- * This function gets called right after the battery sysfs +- * attributes have been added, so that the drivers that +- * define custom sysfs attributes can add their own. +- */ +-static void battery_hook_add_battery(struct acpi_battery *battery) +-{ +- struct acpi_battery_hook *hook_node, *tmp; +- +- mutex_lock(&hook_mutex); +- INIT_LIST_HEAD(&battery->list); +- list_add(&battery->list, &acpi_battery_list); +- /* +- * Since we added a new battery to the list, we need to +- * iterate over the hooks and call add_battery for each +- * hook that was registered. This usually happens +- * when a battery gets hotplugged or initialized +- * during the battery module initialization. +- */ +- list_for_each_entry_safe(hook_node, tmp, &battery_hook_list, list) { +- if (hook_node->add_battery(battery->bat, hook_node)) { +- /* +- * The notification of the hook has failed, to +- * prevent further errors we will unload the hook. +- */ +- pr_err("error in hook, unloading: %s", +- hook_node->name); +- acpi_battery_hook_unregister_unlocked(hook_node); +- } +- } +- mutex_unlock(&hook_mutex); +-} +- +-static void battery_hook_remove_battery(struct acpi_battery *battery) +-{ +- struct acpi_battery_hook *hook; +- +- mutex_lock(&hook_mutex); +- /* +- * Before removing the hook, we need to remove all +- * custom attributes from the battery. +- */ +- list_for_each_entry(hook, &battery_hook_list, list) { +- hook->remove_battery(battery->bat, hook); +- } +- /* Then, just remove the battery from the list */ +- list_del(&battery->list); +- mutex_unlock(&hook_mutex); +-} +- +-static void __exit battery_hook_exit(void) +-{ +- struct acpi_battery_hook *hook; +- struct acpi_battery_hook *ptr; +- /* +- * At this point, the acpi_bus_unregister_driver() +- * has called remove for all batteries. We just +- * need to remove the hooks. +- */ +- list_for_each_entry_safe(hook, ptr, &battery_hook_list, list) { +- acpi_battery_hook_unregister(hook); +- } +- mutex_destroy(&hook_mutex); +-} +- + static int sysfs_add_battery(struct acpi_battery *battery) + { + struct power_supply_config psy_cfg = { +@@ -936,7 +779,7 @@ static int sysfs_add_battery(struct acpi_battery *battery) + battery->bat = NULL; + return result; + } +- battery_hook_add_battery(battery); ++ acpi_battery_add_hooks(&battery->hooks_list_entry, battery->bat); + return 0; + } + +@@ -945,7 +788,7 @@ static void sysfs_remove_battery(struct acpi_battery *battery) + if (!battery->bat) + return; + +- battery_hook_remove_battery(battery); ++ acpi_battery_remove_hooks(&battery->hooks_list_entry); + power_supply_unregister(battery->bat); + battery->bat = NULL; + } +@@ -1391,7 +1234,6 @@ static int __init acpi_battery_init(void) + static void __exit acpi_battery_exit(void) + { + platform_driver_unregister(&acpi_battery_driver); +- battery_hook_exit(); + } + + module_init(acpi_battery_init); +diff --git a/drivers/acpi/battery_hooks.c b/drivers/acpi/battery_hooks.c +new file mode 100644 +--- /dev/null ++++ b/drivers/acpi/battery_hooks.c +@@ -0,0 +1,159 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * ACPI Battery Hooks ++ * ++ * Provides helpers for registering and unregistering battery hooks for ++ * drivers that use platform-specific extensions to ACPI-enumerated ++ * batteries (both ACPI Control Method batteries and Smart Battery System ++ * batteries). ++ */ ++ ++#define pr_fmt(fmt) "ACPI: battery: " fmt ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static LIST_HEAD(acpi_battery_list); ++static LIST_HEAD(battery_hook_list); ++static DEFINE_MUTEX(hook_mutex); ++ ++static void acpi_battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) ++{ ++ struct acpi_battery_hooks_list_entry *entry; ++ ++ /* ++ * In order to remove a hook, we first need to ++ * de-register all the batteries that are registered. ++ */ ++ list_for_each_entry(entry, &acpi_battery_list, list_entry) { ++ if (!hook->remove_battery(entry->battery, hook)) ++ power_supply_changed(entry->battery); ++ } ++ list_del_init(&hook->list); ++ ++ pr_info("hook unregistered: %s\n", hook->name); ++} ++ ++void acpi_battery_hook_unregister(struct acpi_battery_hook *hook) ++{ ++ guard(mutex)(&hook_mutex); ++ ++ /* ++ * Ignore already unregistered battery hooks. This might happen ++ * if a battery hook was previously unloaded due to an error when ++ * adding a new battery. ++ */ ++ if (!list_empty(&hook->list)) ++ acpi_battery_hook_unregister_unlocked(hook); ++} ++EXPORT_SYMBOL_GPL(acpi_battery_hook_unregister); ++ ++void acpi_battery_hook_register(struct acpi_battery_hook *hook) ++{ ++ struct acpi_battery_hooks_list_entry *entry; ++ ++ guard(mutex)(&hook_mutex); ++ ++ list_add(&hook->list, &battery_hook_list); ++ /* ++ * Now that the driver is registered, we need ++ * to notify the hook that a battery is available ++ * for each battery, so that the driver may add ++ * its attributes. ++ */ ++ list_for_each_entry(entry, &acpi_battery_list, list_entry) { ++ if (hook->add_battery(entry->battery, hook)) { ++ /* ++ * If a add-battery returns non-zero, ++ * the registration of the hook has failed, ++ * and we will not add it to the list of loaded ++ * hooks. ++ */ ++ pr_err("hook failed to load: %s\n", hook->name); ++ acpi_battery_hook_unregister_unlocked(hook); ++ return; ++ } ++ ++ power_supply_changed(entry->battery); ++ } ++ pr_info("new hook: %s\n", hook->name); ++} ++EXPORT_SYMBOL_GPL(acpi_battery_hook_register); ++ ++static void devm_acpi_battery_hook_unregister(void *data) ++{ ++ struct acpi_battery_hook *hook = data; ++ ++ acpi_battery_hook_unregister(hook); ++} ++ ++int devm_acpi_battery_hook_register(struct device *dev, ++ struct acpi_battery_hook *hook) ++{ ++ acpi_battery_hook_register(hook); ++ ++ return devm_add_action_or_reset(dev, devm_acpi_battery_hook_unregister, hook); ++} ++EXPORT_SYMBOL_GPL(devm_acpi_battery_hook_register); ++ ++/* ++ * This function gets called right after the battery sysfs ++ * attributes have been added, so that the drivers that ++ * define custom sysfs attributes can add their own. ++ */ ++void acpi_battery_add_hooks(struct acpi_battery_hooks_list_entry *entry, ++ struct power_supply *battery) ++{ ++ struct acpi_battery_hook *hook_node, *tmp; ++ ++ entry->battery = battery; ++ ++ guard(mutex)(&hook_mutex); ++ ++ list_add(&entry->list_entry, &acpi_battery_list); ++ /* ++ * Since we added a new battery to the list, we need to ++ * iterate over the hooks and call add_battery for each ++ * hook that was registered. This usually happens ++ * when a battery gets hotplugged or initialized ++ * during the battery module initialization. ++ */ ++ list_for_each_entry_safe(hook_node, tmp, &battery_hook_list, list) { ++ if (hook_node->add_battery(entry->battery, hook_node)) { ++ /* ++ * The notification of the hook has failed, to ++ * prevent further errors we will unload the hook. ++ */ ++ pr_err("error in hook, unloading: %s\n", hook_node->name); ++ acpi_battery_hook_unregister_unlocked(hook_node); ++ } ++ } ++} ++EXPORT_SYMBOL_NS_GPL(acpi_battery_add_hooks, "ACPI_BATTERY_HOOKS"); ++ ++void acpi_battery_remove_hooks(struct acpi_battery_hooks_list_entry *entry) ++{ ++ struct acpi_battery_hook *hook; ++ ++ guard(mutex)(&hook_mutex); ++ /* ++ * Before removing the hook, we need to remove all ++ * custom attributes from the battery. ++ */ ++ list_for_each_entry(hook, &battery_hook_list, list) ++ hook->remove_battery(entry->battery, hook); ++ ++ /* Then, just remove the battery from the list */ ++ list_del(&entry->list_entry); ++ entry->battery = NULL; ++} ++EXPORT_SYMBOL_NS_GPL(acpi_battery_remove_hooks, "ACPI_BATTERY_HOOKS"); ++ ++MODULE_DESCRIPTION("ACPI battery hooks"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c +--- a/drivers/acpi/sbs.c ++++ b/drivers/acpi/sbs.c +@@ -36,6 +36,7 @@ + MODULE_AUTHOR("Alexey Starikovskiy "); + MODULE_DESCRIPTION("Smart Battery System ACPI interface driver"); + MODULE_LICENSE("GPL"); ++MODULE_IMPORT_NS("ACPI_BATTERY_HOOKS"); + + static unsigned int cache_time = 1000; + module_param(cache_time, uint, 0644); +@@ -54,6 +55,7 @@ struct acpi_battery { + struct power_supply *bat; + struct power_supply_desc bat_desc; + struct acpi_sbs *sbs; ++ struct acpi_battery_hooks_list_entry hooks_list_entry; + unsigned long update_time; + char name[8]; + char manufacturer_name[ACPI_SBS_BLOCK_MAX]; +@@ -555,6 +557,8 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id) + goto end; + } + ++ acpi_battery_add_hooks(&battery->hooks_list_entry, battery->bat); ++ + end: + pr_info("%s [%s]: Battery Slot [%s] (battery %s)\n", + ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), +@@ -566,8 +570,10 @@ static void acpi_battery_remove(struct acpi_sbs *sbs, int id) + { + struct acpi_battery *battery = &sbs->battery[id]; + +- if (battery->bat) ++ if (battery->bat) { ++ acpi_battery_remove_hooks(&battery->hooks_list_entry); + power_supply_unregister(battery->bat); ++ } + } + + static int acpi_charger_add(struct acpi_sbs *sbs) +diff --git a/include/acpi/battery.h b/include/acpi/battery.h +--- a/include/acpi/battery.h ++++ b/include/acpi/battery.h +@@ -18,9 +18,18 @@ struct acpi_battery_hook { + struct list_head list; + }; + ++struct acpi_battery_hooks_list_entry { ++ struct list_head list_entry; ++ struct power_supply *battery; ++}; ++ + void acpi_battery_hook_register(struct acpi_battery_hook *hook); + void acpi_battery_hook_unregister(struct acpi_battery_hook *hook); + int devm_acpi_battery_hook_register(struct device *dev, + struct acpi_battery_hook *hook); + ++void acpi_battery_add_hooks(struct acpi_battery_hooks_list_entry *entry, ++ struct power_supply *battery); ++void acpi_battery_remove_hooks(struct acpi_battery_hooks_list_entry *entry); ++ + #endif diff --git a/pkgbuilds/linux-omarchy-bore/0804-acpi-battery-unified-hooks-acpi-sbs.patch.sig b/pkgbuilds/linux-omarchy-bore/0804-acpi-battery-unified-hooks-acpi-sbs.patch.sig new file mode 100644 index 0000000..7b62083 Binary files /dev/null and b/pkgbuilds/linux-omarchy-bore/0804-acpi-battery-unified-hooks-acpi-sbs.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-bore/0805-hwmon-applesmc-charge-control-end-threshold.patch b/pkgbuilds/linux-omarchy-bore/0805-hwmon-applesmc-charge-control-end-threshold.patch new file mode 100644 index 0000000..9b45c66 --- /dev/null +++ b/pkgbuilds/linux-omarchy-bore/0805-hwmon-applesmc-charge-control-end-threshold.patch @@ -0,0 +1,209 @@ +diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig +--- a/drivers/hwmon/Kconfig ++++ b/drivers/hwmon/Kconfig +@@ -380,6 +380,7 @@ config SENSORS_FAM15H_POWER + config SENSORS_APPLESMC + tristate "Apple SMC (Motion sensor, light sensor, keyboard backlight)" + depends on INPUT && X86 ++ depends on POWER_SUPPLY || POWER_SUPPLY=n + select NEW_LEDS + select LEDS_CLASS + help +diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c +--- a/drivers/hwmon/applesmc.c ++++ b/drivers/hwmon/applesmc.c +@@ -33,6 +33,8 @@ + #include + #include + #include ++#include ++#include + #include + + /* data port used by Apple SMC */ +@@ -76,6 +78,20 @@ + + #define TEMP_SENSOR_TYPE "sp78" + ++/* ++ * BCLM caps charging at a percentage. BFCL only sets when the charging LED ++ * switches from orange to green. ++ */ ++#define BATTERY_CHARGE_LIMIT_KEY "BCLM" /* r/w ui8 */ ++#define BATTERY_CHARGE_LIMIT_LED_KEY "BFCL" /* r/w ui8 */ ++ ++/* ++ * Points kept between BCLM and BFCL so the LED turns green before charging ++ * stops. Measured on a MacBookAir6,2, where a margin of 1 only just ties; ++ * 3 leaves headroom for other models. ++ */ ++#define APPLESMC_BATTERY_CHARGE_LIMIT_LED_MARGIN 3 ++ + /* List of keys used to read/write fan speeds */ + static const char *const fan_speed_fmt[] = { + "F%dAc", /* actual speed */ +@@ -131,6 +147,8 @@ static struct applesmc_registers { + int num_light_sensors; /* number of light sensors */ + bool has_accelerometer; /* has motion sensor */ + bool has_key_backlight; /* has keyboard backlight */ ++ bool has_battery_charge_limit; /* has BCLM battery charge limit */ ++ bool has_battery_charge_limit_led; /* has BFCL MagSafe LED charge limit */ + bool init_complete; /* true when fully initialized */ + struct applesmc_entry *cache; /* cached key entries */ + const char **index; /* temperature key index */ +@@ -633,6 +651,12 @@ static int applesmc_init_smcreg_try(void) + if (ret) + return ret; + ret = applesmc_has_key(BACKLIGHT_KEY, &s->has_key_backlight); ++ if (ret) ++ return ret; ++ ret = applesmc_has_key(BATTERY_CHARGE_LIMIT_KEY, &s->has_battery_charge_limit); ++ if (ret) ++ return ret; ++ ret = applesmc_has_key(BATTERY_CHARGE_LIMIT_LED_KEY, &s->has_battery_charge_limit_led); + if (ret) + return ret; + +@@ -724,6 +748,120 @@ static struct platform_driver applesmc_driver = { + }, + }; + ++static DEFINE_MUTEX(applesmc_bat_lock); ++ ++static int applesmc_bat_get_property(struct power_supply *psy, ++ const struct power_supply_ext *ext, ++ void *data, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ u8 limit; ++ int ret; ++ ++ switch (psp) { ++ case POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD: ++ scoped_guard(mutex, &applesmc_bat_lock) ++ ret = applesmc_read_key(BATTERY_CHARGE_LIMIT_KEY, &limit, 1); ++ if (ret) ++ return ret; ++ val->intval = limit; ++ return 0; ++ default: ++ return -EINVAL; ++ } ++} ++ ++static int applesmc_bat_set_property(struct power_supply *psy, ++ const struct power_supply_ext *ext, ++ void *data, ++ enum power_supply_property psp, ++ const union power_supply_propval *val) ++{ ++ u8 limit, led_limit, readback; ++ int ret; ++ ++ switch (psp) { ++ case POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD: ++ /* 20 is known to work and 10 is not accepted; the floor is unknown. */ ++ if (val->intval < 20 || val->intval > 100) ++ return -EINVAL; ++ ++ limit = val->intval; ++ /* At 100% charging is never cut short, so no margin is needed. */ ++ led_limit = limit < 100 ? ++ limit - APPLESMC_BATTERY_CHARGE_LIMIT_LED_MARGIN : limit; ++ ++ scoped_guard(mutex, &applesmc_bat_lock) { ++ ret = applesmc_write_key(BATTERY_CHARGE_LIMIT_KEY, &limit, 1); ++ if (ret) ++ return ret; ++ ++ /* ++ * The SMC silently ignores values it does not accept and ++ * still reports success, so read the limit back. ++ */ ++ ret = applesmc_read_key(BATTERY_CHARGE_LIMIT_KEY, &readback, 1); ++ if (ret) ++ return ret; ++ if (readback != limit) ++ return -EINVAL; ++ ++ if (smcreg.has_battery_charge_limit_led) { ++ ret = applesmc_write_key(BATTERY_CHARGE_LIMIT_LED_KEY, ++ &led_limit, 1); ++ /* BCLM is already applied, so this is not an error. */ ++ if (ret) ++ pr_warn("failed to update MagSafe LED threshold (BFCL): %d\n", ++ ret); ++ } ++ } ++ ++ power_supply_changed(psy); ++ return 0; ++ default: ++ return -EINVAL; ++ } ++} ++ ++static int applesmc_bat_property_is_writeable(struct power_supply *psy, ++ const struct power_supply_ext *ext, ++ void *data, ++ enum power_supply_property psp) ++{ ++ return psp == POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD; ++} ++ ++static const enum power_supply_property applesmc_bat_props[] = { ++ POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD, ++}; ++ ++static const struct power_supply_ext applesmc_bat_ext = { ++ .name = "applesmc-charge-control", ++ .properties = applesmc_bat_props, ++ .num_properties = ARRAY_SIZE(applesmc_bat_props), ++ .get_property = applesmc_bat_get_property, ++ .set_property = applesmc_bat_set_property, ++ .property_is_writeable = applesmc_bat_property_is_writeable, ++}; ++ ++static int applesmc_bat_add(struct power_supply *battery, struct acpi_battery_hook *hook) ++{ ++ return power_supply_register_extension(battery, &applesmc_bat_ext, &pdev->dev, NULL); ++} ++ ++static int applesmc_bat_remove(struct power_supply *battery, struct acpi_battery_hook *hook) ++{ ++ power_supply_unregister_extension(battery, &applesmc_bat_ext); ++ return 0; ++} ++ ++static struct acpi_battery_hook applesmc_bat_hook = { ++ .name = "Apple SMC Battery Charge Control", ++ .add_battery = applesmc_bat_add, ++ .remove_battery = applesmc_bat_remove, ++}; ++ + /* + * applesmc_calibrate - Set our "resting" values. Callers must + * hold applesmc_lock. +@@ -1563,6 +1701,10 @@ static int __init applesmc_init(void) + goto out_light_ledclass; + } + ++ if (smcreg.has_battery_charge_limit && ++ IS_REACHABLE(CONFIG_ACPI_BATTERY_HOOKS)) ++ acpi_battery_hook_register(&applesmc_bat_hook); ++ + return 0; + + out_light_ledclass: +@@ -1589,6 +1731,10 @@ static int __init applesmc_init(void) + + static void __exit applesmc_exit(void) + { ++ if (smcreg.has_battery_charge_limit && ++ IS_REACHABLE(CONFIG_ACPI_BATTERY_HOOKS)) ++ acpi_battery_hook_unregister(&applesmc_bat_hook); ++ + hwmon_device_unregister(hwmon_dev); + applesmc_release_key_backlight(); + applesmc_release_light_sensor(); diff --git a/pkgbuilds/linux-omarchy-bore/0805-hwmon-applesmc-charge-control-end-threshold.patch.sig b/pkgbuilds/linux-omarchy-bore/0805-hwmon-applesmc-charge-control-end-threshold.patch.sig new file mode 100644 index 0000000..73eabc0 Binary files /dev/null and b/pkgbuilds/linux-omarchy-bore/0805-hwmon-applesmc-charge-control-end-threshold.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-bore/0860-ftrace-module-enable-sorted-symbol-search.patch b/pkgbuilds/linux-omarchy-bore/0860-ftrace-module-enable-sorted-symbol-search.patch deleted file mode 100644 index 79ded30..0000000 --- a/pkgbuilds/linux-omarchy-bore/0860-ftrace-module-enable-sorted-symbol-search.patch +++ /dev/null @@ -1,170 +0,0 @@ -diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c ---- a/kernel/trace/ftrace.c -+++ b/kernel/trace/ftrace.c -@@ -18,6 +18,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -4385,6 +4386,109 @@ static int test_for_valid_rec(struct dyn_ftrace *rec) - return 1; - } - -+#if defined(CONFIG_MODULES) && defined(CONFIG_KALLSYMS) -+#define FTRACE_MOD_SYMS -+/* -+ * test_for_valid_rec() resolves an address with kallsyms_lookup(), which -+ * scans the whole symbol table of a module. Calling it for every record of -+ * a module being loaded costs O(records * symbols): several seconds for a -+ * driver as large as amdgpu, all of it under ftrace_lock. Sort the symbol -+ * addresses of the module once instead and binary search them. The module -+ * symbol table itself is left untouched, as livepatch relies on its order. -+ */ -+struct ftrace_mod_syms { -+ unsigned long *addrs; -+ unsigned int nr; -+}; -+ -+static int ftrace_cmp_addr(const void *a, const void *b) -+{ -+ unsigned long x = *(const unsigned long *)a; -+ unsigned long y = *(const unsigned long *)b; -+ -+ return x < y ? -1 : x > y; -+} -+ -+/* Collect the symbols find_kallsyms_symbol() would consider. */ -+static void ftrace_mod_syms_init(struct ftrace_mod_syms *syms, -+ struct module *mod) -+{ -+ /* A coming module cannot have its kallsyms replaced under us. */ -+ struct mod_kallsyms *kallsyms = rcu_dereference_raw(mod->kallsyms); -+ unsigned int i; -+ -+ syms->nr = 0; -+ syms->addrs = kvmalloc_array(kallsyms->num_symtab, -+ sizeof(*syms->addrs), GFP_KERNEL); -+ if (!syms->addrs) -+ return; -+ -+ for (i = 1; i < kallsyms->num_symtab; i++) { -+ const Elf_Sym *sym = &kallsyms->symtab[i]; -+ const char *name = kallsyms->strtab + sym->st_name; -+ -+ if (sym->st_shndx == SHN_UNDEF || *name == '\0' || -+ is_mapping_symbol(name)) -+ continue; -+ syms->addrs[syms->nr++] = kallsyms_symbol_value(sym); -+ } -+ -+ sort(syms->addrs, syms->nr, sizeof(*syms->addrs), ftrace_cmp_addr, NULL); -+} -+ -+/* Same answer as test_for_valid_rec(), using the sorted addresses. */ -+static int test_for_valid_mod_rec(struct ftrace_mod_syms *syms, -+ struct module *mod, struct dyn_ftrace *rec) -+{ -+ unsigned long ip = rec->ip, base, best; -+ unsigned int lo = 0, hi = syms->nr, mid; -+ struct module_memory *mod_mem = NULL; -+ -+ if (!syms->addrs) -+ return test_for_valid_rec(rec); -+ -+ for_each_mod_mem_type(type) { -+#ifndef CONFIG_KALLSYMS_ALL -+ if (!mod_mem_type_is_text(type)) -+ continue; -+#endif -+ if (within_module_mem_type(ip, mod, type)) { -+ mod_mem = &mod->mem[type]; -+ break; -+ } -+ } -+ if (!mod_mem) -+ goto invalid; -+ base = (unsigned long)mod_mem->base; -+ -+ /* Find the last symbol at or below ip. */ -+ while (lo < hi) { -+ mid = lo + (hi - lo) / 2; -+ if (syms->addrs[mid] <= ip) -+ lo = mid + 1; -+ else -+ hi = mid; -+ } -+ if (!lo) -+ goto invalid; -+ best = syms->addrs[lo - 1]; -+ -+ /* Weak functions can cause invalid addresses */ -+ if (best < base || ip - best > FTRACE_MCOUNT_MAX_OFFSET) -+ goto invalid; -+ return 1; -+ -+invalid: -+ rec->flags |= FTRACE_FL_DISABLED; -+ return 0; -+} -+ -+static void ftrace_mod_syms_free(struct ftrace_mod_syms *syms) -+{ -+ kvfree(syms->addrs); -+} -+#endif -+ - static struct workqueue_struct *ftrace_check_wq __initdata; - static struct work_struct ftrace_check_work __initdata; - -@@ -8010,11 +8114,30 @@ void ftrace_release_mod(struct module *mod) - } - } - -+#ifndef FTRACE_MOD_SYMS -+struct ftrace_mod_syms { }; -+ -+static inline void ftrace_mod_syms_init(struct ftrace_mod_syms *syms, -+ struct module *mod) { } -+ -+static inline int test_for_valid_mod_rec(struct ftrace_mod_syms *syms, -+ struct module *mod, -+ struct dyn_ftrace *rec) -+{ -+ return test_for_valid_rec(rec); -+} -+ -+static inline void ftrace_mod_syms_free(struct ftrace_mod_syms *syms) { } -+#endif -+ - void ftrace_module_enable(struct module *mod) - { -+ struct ftrace_mod_syms syms; - struct dyn_ftrace *rec; - struct ftrace_page *pg; - -+ ftrace_mod_syms_init(&syms, mod); -+ - mutex_lock(&ftrace_lock); - - if (ftrace_disabled) -@@ -8050,7 +8173,7 @@ void ftrace_module_enable(struct module *mod) - cond_resched(); - - /* Weak functions should still be ignored */ -- if (!test_for_valid_rec(rec)) { -+ if (!test_for_valid_mod_rec(&syms, mod, rec)) { - /* Clear all other flags. Should not be enabled anyway */ - rec->flags = FTRACE_FL_DISABLED; - continue; -@@ -8087,6 +8210,8 @@ void ftrace_module_enable(struct module *mod) - out_unlock: - mutex_unlock(&ftrace_lock); - -+ ftrace_mod_syms_free(&syms); -+ - process_cached_mods(mod->name); - } - diff --git a/pkgbuilds/linux-omarchy-bore/0860-ftrace-module-enable-sorted-symbol-search.patch.sig b/pkgbuilds/linux-omarchy-bore/0860-ftrace-module-enable-sorted-symbol-search.patch.sig deleted file mode 100644 index 709d6ce..0000000 Binary files a/pkgbuilds/linux-omarchy-bore/0860-ftrace-module-enable-sorted-symbol-search.patch.sig and /dev/null differ diff --git a/pkgbuilds/linux-omarchy-bore/0860-module-add-module-kallsyms-on-each-addr.patch b/pkgbuilds/linux-omarchy-bore/0860-module-add-module-kallsyms-on-each-addr.patch new file mode 100644 index 0000000..ebd6e0d --- /dev/null +++ b/pkgbuilds/linux-omarchy-bore/0860-module-add-module-kallsyms-on-each-addr.patch @@ -0,0 +1,95 @@ +diff --git a/include/linux/module.h b/include/linux/module.h +--- a/include/linux/module.h ++++ b/include/linux/module.h +@@ -975,6 +975,10 @@ unsigned long module_kallsyms_lookup_name(const char *name); + + unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name); + ++void module_kallsyms_on_each_addr(struct module *mod, ++ void (*fn)(void *, unsigned long), ++ void *data); ++ + #else /* CONFIG_MODULES && CONFIG_KALLSYMS */ + + static inline int module_kallsyms_on_each_symbol(const char *modname, +@@ -1018,6 +1022,12 @@ static inline unsigned long find_kallsyms_symbol_value(struct module *mod, + return 0; + } + ++static inline void module_kallsyms_on_each_addr(struct module *mod, ++ void (*fn)(void *, unsigned long), ++ void *data) ++{ ++} ++ + #endif /* CONFIG_MODULES && CONFIG_KALLSYMS */ + + /* Define __free(module_put) macro for struct module *. */ +diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c +--- a/kernel/module/kallsyms.c ++++ b/kernel/module/kallsyms.c +@@ -246,6 +246,18 @@ static const char *kallsyms_symbol_name(struct mod_kallsyms *kallsyms, unsigned + return kallsyms->strtab + kallsyms->symtab[symnum].st_name; + } + ++/* ++ * Whether find_kallsyms_symbol() may resolve an address to symbol @symnum. ++ * Unnamed symbols are ignored: they're uninformative and inserted at a whim. ++ */ ++static bool is_lookup_symbol(struct mod_kallsyms *kallsyms, unsigned int symnum) ++{ ++ const char *name = kallsyms_symbol_name(kallsyms, symnum); ++ ++ return kallsyms->symtab[symnum].st_shndx != SHN_UNDEF && ++ *name != '\0' && !is_mapping_symbol(name); ++} ++ + /* + * Given a module and address, find the corresponding symbol and return its name + * while providing its size and offset if needed. +@@ -286,15 +298,7 @@ static const char *find_kallsyms_symbol(struct module *mod, + const Elf_Sym *sym = &kallsyms->symtab[i]; + unsigned long thisval = kallsyms_symbol_value(sym); + +- if (sym->st_shndx == SHN_UNDEF) +- continue; +- +- /* +- * We ignore unnamed symbols: they're uninformative +- * and inserted at a whim. +- */ +- if (*kallsyms_symbol_name(kallsyms, i) == '\0' || +- is_mapping_symbol(kallsyms_symbol_name(kallsyms, i))) ++ if (!is_lookup_symbol(kallsyms, i)) + continue; + + if (thisval <= addr && thisval > bestval) { +@@ -458,6 +462,28 @@ unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name) + return __find_kallsyms_symbol_value(mod, name); + } + ++/* ++ * Call @fn with the address of each symbol of @mod that find_kallsyms_symbol() ++ * may resolve an address to. Unlike module_kallsyms_on_each_symbol(), this ++ * also works while @mod is still being loaded. ++ */ ++void module_kallsyms_on_each_addr(struct module *mod, ++ void (*fn)(void *, unsigned long), ++ void *data) ++{ ++ struct mod_kallsyms *kallsyms; ++ unsigned int i; ++ ++ guard(rcu)(); ++ kallsyms = rcu_dereference(mod->kallsyms); ++ ++ /* ELF starts real symbols at 1. */ ++ for (i = 1; i < kallsyms->num_symtab; i++) { ++ if (is_lookup_symbol(kallsyms, i)) ++ fn(data, kallsyms_symbol_value(&kallsyms->symtab[i])); ++ } ++} ++ + int module_kallsyms_on_each_symbol(const char *modname, + int (*fn)(void *, const char *, unsigned long), + void *data) diff --git a/pkgbuilds/linux-omarchy-bore/0860-module-add-module-kallsyms-on-each-addr.patch.sig b/pkgbuilds/linux-omarchy-bore/0860-module-add-module-kallsyms-on-each-addr.patch.sig new file mode 100644 index 0000000..f0c502a Binary files /dev/null and b/pkgbuilds/linux-omarchy-bore/0860-module-add-module-kallsyms-on-each-addr.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-bore/0861-ftrace-drop-weak-function-locations-of-modules.patch b/pkgbuilds/linux-omarchy-bore/0861-ftrace-drop-weak-function-locations-of-modules.patch new file mode 100644 index 0000000..82b00bb --- /dev/null +++ b/pkgbuilds/linux-omarchy-bore/0861-ftrace-drop-weak-function-locations-of-modules.patch @@ -0,0 +1,113 @@ +diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c +--- a/kernel/trace/ftrace.c ++++ b/kernel/trace/ftrace.c +@@ -4445,11 +4445,6 @@ static int print_rec(struct seq_file *m, unsigned long ip) + return ret == NULL ? -1 : 0; + } + #else +-static inline int test_for_valid_rec(struct dyn_ftrace *rec) +-{ +- return 1; +-} +- + static inline int print_rec(struct seq_file *m, unsigned long ip) + { + seq_printf(m, "%ps", (void *)ip); +@@ -7611,6 +7606,73 @@ static void test_is_sorted(unsigned long *start, unsigned long count) + } + #endif + ++#ifdef FTRACE_MCOUNT_MAX_OFFSET ++struct ftrace_mod_locs { ++ unsigned long *start; ++ unsigned long count; ++ unsigned long *valid; ++}; ++ ++/* Mark the locations that lie at most FTRACE_MCOUNT_MAX_OFFSET after @addr. */ ++static void ftrace_mark_valid_locs(void *data, unsigned long addr) ++{ ++ struct ftrace_mod_locs *locs = data; ++ unsigned long lo = 0, hi = locs->count, mid, ip; ++ ++ /* ++ * ftrace_call_adjust() moves a location forward by at most ++ * FTRACE_MCOUNT_MAX_OFFSET, so start looking that far before @addr. ++ */ ++ while (lo < hi) { ++ mid = lo + (hi - lo) / 2; ++ if (locs->start[mid] + FTRACE_MCOUNT_MAX_OFFSET < addr) ++ lo = mid + 1; ++ else ++ hi = mid; ++ } ++ ++ for (; lo < locs->count; lo++) { ++ if (locs->start[lo] > addr + FTRACE_MCOUNT_MAX_OFFSET) ++ break; ++ ip = ftrace_call_adjust(locs->start[lo]); ++ if (ip >= addr && ip - addr <= FTRACE_MCOUNT_MAX_OFFSET) ++ __set_bit(lo, locs->valid); ++ } ++} ++ ++/* ++ * A weak function overridden within its module keeps its mcount location but ++ * has no symbol. Zero such locations before they become records, as sorttable ++ * does for vmlinux: keep only those with a symbol at most ++ * FTRACE_MCOUNT_MAX_OFFSET before them. ++ */ ++static int ftrace_zero_weak_locs(struct module *mod, unsigned long *start, ++ unsigned long count) ++{ ++ struct ftrace_mod_locs locs = { .start = start, .count = count }; ++ unsigned long i; ++ ++ locs.valid = bitmap_zalloc(count, GFP_KERNEL); ++ if (!locs.valid) ++ return -ENOMEM; ++ ++ module_kallsyms_on_each_addr(mod, ftrace_mark_valid_locs, &locs); ++ ++ for_each_clear_bit(i, locs.valid, count) ++ start[i] = 0; ++ ++ bitmap_free(locs.valid); ++ return 0; ++} ++#else ++static inline int ftrace_zero_weak_locs(struct module *mod, ++ unsigned long *start, ++ unsigned long count) ++{ ++ return 0; ++} ++#endif ++ + static int ftrace_process_locs(struct module *mod, + unsigned long *start, + unsigned long *end) +@@ -7644,6 +7706,9 @@ static int ftrace_process_locs(struct module *mod, + test_is_sorted(start, count); + } + ++ if (mod && ftrace_zero_weak_locs(mod, start, count)) ++ return -ENOMEM; ++ + start_pg = ftrace_allocate_pages(count, &pages); + if (!start_pg) + return -ENOMEM; +@@ -8049,13 +8114,6 @@ void ftrace_module_enable(struct module *mod) + + cond_resched(); + +- /* Weak functions should still be ignored */ +- if (!test_for_valid_rec(rec)) { +- /* Clear all other flags. Should not be enabled anyway */ +- rec->flags = FTRACE_FL_DISABLED; +- continue; +- } +- + cnt = 0; + + /* diff --git a/pkgbuilds/linux-omarchy-bore/0861-ftrace-drop-weak-function-locations-of-modules.patch.sig b/pkgbuilds/linux-omarchy-bore/0861-ftrace-drop-weak-function-locations-of-modules.patch.sig new file mode 100644 index 0000000..d2d6943 Binary files /dev/null and b/pkgbuilds/linux-omarchy-bore/0861-ftrace-drop-weak-function-locations-of-modules.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-bore/PKGBUILD b/pkgbuilds/linux-omarchy-bore/PKGBUILD index 7d7d57b..488143b 100644 --- a/pkgbuilds/linux-omarchy-bore/PKGBUILD +++ b/pkgbuilds/linux-omarchy-bore/PKGBUILD @@ -3,7 +3,7 @@ pkgbase=linux-omarchy-bore pkgver=7.2.8 -pkgrel=2 +pkgrel=5 pkgdesc='Omarchy Linux (BORE CPU scheduler, ADIOS I/O scheduler)' url='https://omarchy.org' arch=( @@ -165,6 +165,8 @@ source=( 0703-pci-vmd-scan-bios-enumerated-devices.patch{,.sig} 0704-pci-vmd-meteor-lake-mtl016-flush.patch{,.sig} 0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch{,.sig} + 0711-iommu-amd-perfopt-support.patch{,.sig} + 0712-drm-amdgpu-perfopt-in-identity-domain.patch{,.sig} 0740-hwmon-updates.patch{,.sig} 0741-hwmon-fixes-1.patch{,.sig} 0742-hwmon-fixes-2.patch{,.sig} @@ -172,10 +174,14 @@ source=( 0800-platform-updates.patch{,.sig} 0801-amd-pmf-util-unbind-use-after-free.patch{,.sig} 0802-platform-fixes.patch{,.sig} + 0803-acpi-battery-hook-api-acpi-prefix.patch{,.sig} + 0804-acpi-battery-unified-hooks-acpi-sbs.patch{,.sig} + 0805-hwmon-applesmc-charge-control-end-threshold.patch{,.sig} 0850-futex-wait-multiple.patch{,.sig} 0851-futex-wait-multiple-fixes.patch{,.sig} 0852-futex-wait-multiple-abi-fixes.patch{,.sig} - 0860-ftrace-module-enable-sorted-symbol-search.patch{,.sig} + 0860-module-add-module-kallsyms-on-each-addr.patch{,.sig} + 0861-ftrace-drop-weak-function-locations-of-modules.patch{,.sig} 8204-mm-opportunistic-compaction.patch{,.sig} 8205-mm-hint-uses-allocation-order.patch{,.sig} 8206-mm-carry-order-and-hint-in-one-word.patch{,.sig} @@ -442,6 +448,10 @@ b2sums=('5326dde778eb945f282740ef0d8765b46fbd198f1209cdfd7b91e5dac1312fc01f8bf0b 'SKIP' 'da96dbbe3b6b4e189cf7bdce14647bba07bbc5599ce28ed385a1c34d237ee7ae3ac595d2552444615f2b15c2b7eda42f40743d5bdebd443e3ec31e5743f59056' 'SKIP' + 'cb2494c930b2c2c4cd6755494339c5f95ace87940b2b2e51928d98ea63262e4bf7a4245f629b8bb06e7592f45a0c379e5583c8695563011009fdb07f965d7c1a' + 'SKIP' + '6083db5b92aa46bf54144b4d2fab368916974ef01334fbe934bded3818c5dfb4fc8d5d0e896bf1baddc29aac1c559f80dabc727082a757301117843def8089c8' + 'SKIP' 'c25bff6e5be62aca887ae0781899e37a39e1aec90f0eb934ec5394abf560f4d02ad1fb3973a45d00058b46555bbc8d9febfcc8026e210f53a8864a91b3b80a9d' 'SKIP' 'e70e0077249bf008e069041a0239c6bb63075044cd0df3218649ff92a6a2d43467026886f2a6a70c70552268f6936764459d7cc0817a103b6a0f74c37c52c72d' @@ -456,13 +466,21 @@ b2sums=('5326dde778eb945f282740ef0d8765b46fbd198f1209cdfd7b91e5dac1312fc01f8bf0b 'SKIP' '4e4792acaf0455f41cb1541d20d37e7a39104aa2dfb505e9be29dc3e7fecf328557780982b32cd8f67f77594542f5b8104766a4e8b5ce2270c9c601728363b3f' 'SKIP' + '00417f024d2cc0b0fad28dec7f11c3054f5da7bf8c353d06fd1086be1926eacbe07ba924380157f270aac910d771f909f34beed0f60106f6ae60c96f58423b4a' + 'SKIP' + '2c254a2df00e79f03b51d13846f232073e9276e022c7bf46bfe810cc98456d481535152afa9d915e0726e7701594453f9363b6190b8e616db203d176a08fd31f' + 'SKIP' + 'cbfa20431371f3332f28013bfa21beef21a5a6f616e09fa91e9adb42899cb2e1880e27cf4b90bba980bce26710af3ac3c1e49054df4e48051bcc4612732d3e9e' + 'SKIP' 'aca0527f5630671a319e7ecff958a3a64f29df73b427c67c1d29763cc1801fa82e96761c3a61c22d936913943a49261da64d490a0752ba9ffc8e0c1d92f99835' 'SKIP' '803736a8e836560b3e50b7c0c8cf1f9ebb16b8642cc7bc6e5167d19037bd757431565fe4581776e50eb2693c49f778a24fecff41a553612e7e498f755b8f2f67' 'SKIP' '4bc132d9c34deaae9b13d08dcff8ea83aa8f9ce4398531e0e0a80df30da3808815f3a587fe5627f6553b8e9c2aea6cc1749b752250a91c94f1cf8ba4f3eb5e8d' 'SKIP' - 'b76c03e8c59c0d2c06d00130cbe4984932762107f3d8180f90ac6c63bd435d6b8dfd317b9d1e756a89c513a20bdb52dcf4f3887daa6598449e560ca1076c5a1d' + '335c0c1164e9a2b9a9a252ddf7418ca0e6493f2f0fddcf3f01ae20666b6cb6713b8bf7a2a165d37485d2107b6c00f42b201974154c41c15c4456615b3bb0d78f' + 'SKIP' + '01a28159b9c42e6b52147d1b061e1a2cb40ee381f8b6f7e2db3f94adc160365bc0dee602713cf42745fd2275b822b273df25d739d7b77f03273922edc746e50f' 'SKIP' '42703ec988c2b1865fbe4eef67840f4370958e3e874d9f8a03a46c43619bed7656c56cae0ef1d8cca5340648b47ba7ddf813d25d9db3307f10146c45b8e34ade' 'SKIP' @@ -482,7 +500,7 @@ b2sums=('5326dde778eb945f282740ef0d8765b46fbd198f1209cdfd7b91e5dac1312fc01f8bf0b 'SKIP' 'ae93d961d0eef41ed39c473fe9478b62fab13ba395333b3c11b34b7787904a3d2684520ec76dbe2603dd96a146a68bcbe98da1b7e4cc1e659246127384bce22c' 'SKIP') -b2sums_x86_64=('7bcc8b4bc054268c8aa7aec3c6db22d6773d4bca1322edc157c7d23095998eedb0c6698d042310fced5fd759347297c500d2fa987bd71684c8c043c395ce4fc8') +b2sums_x86_64=('a1961cda00700926c9618bd311b83bdbc1a392c1dde41d541de9f091b750121cc879560ffd1c398ab75078588e0677726eedb84529a13d66be934c85be5f7a73') # https://www.kernel.org/pub/linux/kernel/v7.x/sha256sums.asc sha256sums=('12e8d5a973d1ad7c5a5c69882e4022b131ed715db7003fdcd760ddf8c3e51941' @@ -735,6 +753,10 @@ sha256sums=('12e8d5a973d1ad7c5a5c69882e4022b131ed715db7003fdcd760ddf8c3e51941' 'SKIP' '3175c56fd2935848ce99fe10be1bc348231909f8479c3d3af911c5c7ab7f381b' 'SKIP' + '30a12a616afa8fe95b969e90b42aeb240962b9fab8b8bd357ac00706abdd68c7' + 'SKIP' + 'eb0ebb8c55332dab8931c667ec84cd32c91c657d21af4504327ae05643108e1d' + 'SKIP' '945c90d99f9a9fa47d61e471f76d17c0229ffa0fa8cda22de990a2ccc4194bb2' 'SKIP' '70ff41b2341836c27c5545a7948258f137d991c2879cbeb29f7af740c11d20e6' @@ -749,13 +771,21 @@ sha256sums=('12e8d5a973d1ad7c5a5c69882e4022b131ed715db7003fdcd760ddf8c3e51941' 'SKIP' 'a008c052ca657efcd4e27b8f7b819adbc9606e261aac37d41a40cf67c094cff9' 'SKIP' + '57169ef893dff957cbf33f7c0dc22f2fdfcfcb3befcd62ad59e2456484423bac' + 'SKIP' + '01ecc1adbe715bb31153a2350ca46e1cb8a6e3fdc6899b2debeff015af2412ed' + 'SKIP' + 'a4331d3968fc5002534063b42bd219bddfe4a7d6b08e4cb30ed60f4366ca3c41' + 'SKIP' '028bf538c870465e1752514725372fa9eef6b7178d9b8d1e2ecc15edc5a63cc8' 'SKIP' 'a92a84405ee9845738c6b52d8f0f0eca16eb40afe0ebe0f4e9e1168597675311' 'SKIP' '44a0b10a6dc83465ea86f5fba936b2bfbeffb1b3f0b2e04013bfed99ba4f6c5a' 'SKIP' - 'ab4a43d7b8d56a4405aaebaac00dd33d2019cae407039fad4b0dae9ba1ffaa78' + '6f01b5357af7deed3f4bccea6678b4d9e8afc83e598978f42f244241667f975d' + 'SKIP' + '0da7247035a359e2491933f9effff43ea7b29748f21a0e3080bef0018c2488e3' 'SKIP' 'f81f6b5769e47716ca318ecf76ab1c0fafa0e165fa858a64251359937bffcf04' 'SKIP' diff --git a/pkgbuilds/linux-omarchy-bore/config.x86_64 b/pkgbuilds/linux-omarchy-bore/config.x86_64 index 24fe461..f3006f9 100644 --- a/pkgbuilds/linux-omarchy-bore/config.x86_64 +++ b/pkgbuilds/linux-omarchy-bore/config.x86_64 @@ -670,6 +670,7 @@ CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y CONFIG_ACPI_EC=y CONFIG_ACPI_EC_DEBUGFS=m CONFIG_ACPI_AC=y +CONFIG_ACPI_BATTERY_HOOKS=y CONFIG_ACPI_BATTERY=y CONFIG_ACPI_BUTTON=y CONFIG_ACPI_VIDEO=m diff --git a/pkgbuilds/linux-omarchy-eevdf/.omarchy/package.json b/pkgbuilds/linux-omarchy-eevdf/.omarchy/package.json new file mode 100644 index 0000000..c3ed389 --- /dev/null +++ b/pkgbuilds/linux-omarchy-eevdf/.omarchy/package.json @@ -0,0 +1,4 @@ +{ + "source": "local", + "skip_build": true +} diff --git a/pkgbuilds/linux-omarchy/0010-archlinux-base.patch b/pkgbuilds/linux-omarchy-eevdf/0010-archlinux-base.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0010-archlinux-base.patch rename to pkgbuilds/linux-omarchy-eevdf/0010-archlinux-base.patch diff --git a/pkgbuilds/linux-omarchy/0010-archlinux-base.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0010-archlinux-base.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0010-archlinux-base.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0010-archlinux-base.patch.sig diff --git a/pkgbuilds/linux-omarchy/0011-kbuild-optimize-for-performance-o3.patch b/pkgbuilds/linux-omarchy-eevdf/0011-kbuild-optimize-for-performance-o3.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0011-kbuild-optimize-for-performance-o3.patch rename to pkgbuilds/linux-omarchy-eevdf/0011-kbuild-optimize-for-performance-o3.patch diff --git a/pkgbuilds/linux-omarchy/0011-kbuild-optimize-for-performance-o3.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0011-kbuild-optimize-for-performance-o3.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0011-kbuild-optimize-for-performance-o3.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0011-kbuild-optimize-for-performance-o3.patch.sig diff --git a/pkgbuilds/linux-omarchy/0120-tlbpull.patch b/pkgbuilds/linux-omarchy-eevdf/0120-tlbpull.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0120-tlbpull.patch rename to pkgbuilds/linux-omarchy-eevdf/0120-tlbpull.patch diff --git a/pkgbuilds/linux-omarchy/0120-tlbpull.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0120-tlbpull.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0120-tlbpull.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0120-tlbpull.patch.sig diff --git a/pkgbuilds/linux-omarchy/0121-smp-preempt.patch b/pkgbuilds/linux-omarchy-eevdf/0121-smp-preempt.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0121-smp-preempt.patch rename to pkgbuilds/linux-omarchy-eevdf/0121-smp-preempt.patch diff --git a/pkgbuilds/linux-omarchy/0121-smp-preempt.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0121-smp-preempt.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0121-smp-preempt.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0121-smp-preempt.patch.sig diff --git a/pkgbuilds/linux-omarchy/0130-sched-detach-tasks.patch b/pkgbuilds/linux-omarchy-eevdf/0130-sched-detach-tasks.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0130-sched-detach-tasks.patch rename to pkgbuilds/linux-omarchy-eevdf/0130-sched-detach-tasks.patch diff --git a/pkgbuilds/linux-omarchy/0130-sched-detach-tasks.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0130-sched-detach-tasks.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0130-sched-detach-tasks.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0130-sched-detach-tasks.patch.sig diff --git a/pkgbuilds/linux-omarchy/0140-sched-always-inline.patch b/pkgbuilds/linux-omarchy-eevdf/0140-sched-always-inline.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0140-sched-always-inline.patch rename to pkgbuilds/linux-omarchy-eevdf/0140-sched-always-inline.patch diff --git a/pkgbuilds/linux-omarchy/0140-sched-always-inline.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0140-sched-always-inline.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0140-sched-always-inline.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0140-sched-always-inline.patch.sig diff --git a/pkgbuilds/linux-omarchy/0141-sched-urgent-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0141-sched-urgent-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0141-sched-urgent-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0141-sched-urgent-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0141-sched-urgent-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0141-sched-urgent-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0141-sched-urgent-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0141-sched-urgent-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0143-sched-hybrid-cluster-balancing.patch b/pkgbuilds/linux-omarchy-eevdf/0143-sched-hybrid-cluster-balancing.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0143-sched-hybrid-cluster-balancing.patch rename to pkgbuilds/linux-omarchy-eevdf/0143-sched-hybrid-cluster-balancing.patch diff --git a/pkgbuilds/linux-omarchy/0143-sched-hybrid-cluster-balancing.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0143-sched-hybrid-cluster-balancing.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0143-sched-hybrid-cluster-balancing.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0143-sched-hybrid-cluster-balancing.patch.sig diff --git a/pkgbuilds/linux-omarchy/0144-sched-nohz-idle-core.patch b/pkgbuilds/linux-omarchy-eevdf/0144-sched-nohz-idle-core.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0144-sched-nohz-idle-core.patch rename to pkgbuilds/linux-omarchy-eevdf/0144-sched-nohz-idle-core.patch diff --git a/pkgbuilds/linux-omarchy/0144-sched-nohz-idle-core.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0144-sched-nohz-idle-core.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0144-sched-nohz-idle-core.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0144-sched-nohz-idle-core.patch.sig diff --git a/pkgbuilds/linux-omarchy/0145-sched-eevdf-tunables.patch b/pkgbuilds/linux-omarchy-eevdf/0145-sched-eevdf-tunables.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0145-sched-eevdf-tunables.patch rename to pkgbuilds/linux-omarchy-eevdf/0145-sched-eevdf-tunables.patch diff --git a/pkgbuilds/linux-omarchy/0145-sched-eevdf-tunables.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0145-sched-eevdf-tunables.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0145-sched-eevdf-tunables.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0145-sched-eevdf-tunables.patch.sig diff --git a/pkgbuilds/linux-omarchy/0210-pm-updates.patch b/pkgbuilds/linux-omarchy-eevdf/0210-pm-updates.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0210-pm-updates.patch rename to pkgbuilds/linux-omarchy-eevdf/0210-pm-updates.patch diff --git a/pkgbuilds/linux-omarchy/0210-pm-updates.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0210-pm-updates.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0210-pm-updates.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0210-pm-updates.patch.sig diff --git a/pkgbuilds/linux-omarchy/0211-pm-fixes-1.patch b/pkgbuilds/linux-omarchy-eevdf/0211-pm-fixes-1.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0211-pm-fixes-1.patch rename to pkgbuilds/linux-omarchy-eevdf/0211-pm-fixes-1.patch diff --git a/pkgbuilds/linux-omarchy/0211-pm-fixes-1.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0211-pm-fixes-1.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0211-pm-fixes-1.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0211-pm-fixes-1.patch.sig diff --git a/pkgbuilds/linux-omarchy/0212-pm-fixes-2.patch b/pkgbuilds/linux-omarchy-eevdf/0212-pm-fixes-2.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0212-pm-fixes-2.patch rename to pkgbuilds/linux-omarchy-eevdf/0212-pm-fixes-2.patch diff --git a/pkgbuilds/linux-omarchy/0212-pm-fixes-2.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0212-pm-fixes-2.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0212-pm-fixes-2.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0212-pm-fixes-2.patch.sig diff --git a/pkgbuilds/linux-omarchy/0213-pm-fixes-3.patch b/pkgbuilds/linux-omarchy-eevdf/0213-pm-fixes-3.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0213-pm-fixes-3.patch rename to pkgbuilds/linux-omarchy-eevdf/0213-pm-fixes-3.patch diff --git a/pkgbuilds/linux-omarchy/0213-pm-fixes-3.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0213-pm-fixes-3.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0213-pm-fixes-3.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0213-pm-fixes-3.patch.sig diff --git a/pkgbuilds/linux-omarchy/0220-x86-amd-zen5-tlb-sizes.patch b/pkgbuilds/linux-omarchy-eevdf/0220-x86-amd-zen5-tlb-sizes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0220-x86-amd-zen5-tlb-sizes.patch rename to pkgbuilds/linux-omarchy-eevdf/0220-x86-amd-zen5-tlb-sizes.patch diff --git a/pkgbuilds/linux-omarchy/0220-x86-amd-zen5-tlb-sizes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0220-x86-amd-zen5-tlb-sizes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0220-x86-amd-zen5-tlb-sizes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0220-x86-amd-zen5-tlb-sizes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0250-zsmalloc.patch b/pkgbuilds/linux-omarchy-eevdf/0250-zsmalloc.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0250-zsmalloc.patch rename to pkgbuilds/linux-omarchy-eevdf/0250-zsmalloc.patch diff --git a/pkgbuilds/linux-omarchy/0250-zsmalloc.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0250-zsmalloc.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0250-zsmalloc.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0250-zsmalloc.patch.sig diff --git a/pkgbuilds/linux-omarchy/0260-mglru-exec-protect.patch b/pkgbuilds/linux-omarchy-eevdf/0260-mglru-exec-protect.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0260-mglru-exec-protect.patch rename to pkgbuilds/linux-omarchy-eevdf/0260-mglru-exec-protect.patch diff --git a/pkgbuilds/linux-omarchy/0260-mglru-exec-protect.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0260-mglru-exec-protect.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0260-mglru-exec-protect.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0260-mglru-exec-protect.patch.sig diff --git a/pkgbuilds/linux-omarchy/0270-ksm-rmap-walk.patch b/pkgbuilds/linux-omarchy-eevdf/0270-ksm-rmap-walk.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0270-ksm-rmap-walk.patch rename to pkgbuilds/linux-omarchy-eevdf/0270-ksm-rmap-walk.patch diff --git a/pkgbuilds/linux-omarchy/0270-ksm-rmap-walk.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0270-ksm-rmap-walk.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0270-ksm-rmap-walk.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0270-ksm-rmap-walk.patch.sig diff --git a/pkgbuilds/linux-omarchy/0280-mm-updates.patch b/pkgbuilds/linux-omarchy-eevdf/0280-mm-updates.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0280-mm-updates.patch rename to pkgbuilds/linux-omarchy-eevdf/0280-mm-updates.patch diff --git a/pkgbuilds/linux-omarchy/0280-mm-updates.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0280-mm-updates.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0280-mm-updates.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0280-mm-updates.patch.sig diff --git a/pkgbuilds/linux-omarchy/0281-mm-no-deferred-kernel-page-table-free-at-boot.patch b/pkgbuilds/linux-omarchy-eevdf/0281-mm-no-deferred-kernel-page-table-free-at-boot.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0281-mm-no-deferred-kernel-page-table-free-at-boot.patch rename to pkgbuilds/linux-omarchy-eevdf/0281-mm-no-deferred-kernel-page-table-free-at-boot.patch diff --git a/pkgbuilds/linux-omarchy/0281-mm-no-deferred-kernel-page-table-free-at-boot.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0281-mm-no-deferred-kernel-page-table-free-at-boot.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0281-mm-no-deferred-kernel-page-table-free-at-boot.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0281-mm-no-deferred-kernel-page-table-free-at-boot.patch.sig diff --git a/pkgbuilds/linux-omarchy/0290-zstd-bmi2-fallback-aliases.patch b/pkgbuilds/linux-omarchy-eevdf/0290-zstd-bmi2-fallback-aliases.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0290-zstd-bmi2-fallback-aliases.patch rename to pkgbuilds/linux-omarchy-eevdf/0290-zstd-bmi2-fallback-aliases.patch diff --git a/pkgbuilds/linux-omarchy/0290-zstd-bmi2-fallback-aliases.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0290-zstd-bmi2-fallback-aliases.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0290-zstd-bmi2-fallback-aliases.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0290-zstd-bmi2-fallback-aliases.patch.sig diff --git a/pkgbuilds/linux-omarchy/0291-zstd-bmi2-cpu-feature-dispatch.patch b/pkgbuilds/linux-omarchy-eevdf/0291-zstd-bmi2-cpu-feature-dispatch.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0291-zstd-bmi2-cpu-feature-dispatch.patch rename to pkgbuilds/linux-omarchy-eevdf/0291-zstd-bmi2-cpu-feature-dispatch.patch diff --git a/pkgbuilds/linux-omarchy/0291-zstd-bmi2-cpu-feature-dispatch.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0291-zstd-bmi2-cpu-feature-dispatch.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0291-zstd-bmi2-cpu-feature-dispatch.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0291-zstd-bmi2-cpu-feature-dispatch.patch.sig diff --git a/pkgbuilds/linux-omarchy/0292-crypto-zstd-defer-cstream-init.patch b/pkgbuilds/linux-omarchy-eevdf/0292-crypto-zstd-defer-cstream-init.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0292-crypto-zstd-defer-cstream-init.patch rename to pkgbuilds/linux-omarchy-eevdf/0292-crypto-zstd-defer-cstream-init.patch diff --git a/pkgbuilds/linux-omarchy/0292-crypto-zstd-defer-cstream-init.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0292-crypto-zstd-defer-cstream-init.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0292-crypto-zstd-defer-cstream-init.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0292-crypto-zstd-defer-cstream-init.patch.sig diff --git a/pkgbuilds/linux-omarchy/0293-crypto-zstd-defer-dstream-init.patch b/pkgbuilds/linux-omarchy-eevdf/0293-crypto-zstd-defer-dstream-init.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0293-crypto-zstd-defer-dstream-init.patch rename to pkgbuilds/linux-omarchy-eevdf/0293-crypto-zstd-defer-dstream-init.patch diff --git a/pkgbuilds/linux-omarchy/0293-crypto-zstd-defer-dstream-init.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0293-crypto-zstd-defer-dstream-init.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0293-crypto-zstd-defer-dstream-init.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0293-crypto-zstd-defer-dstream-init.patch.sig diff --git a/pkgbuilds/linux-omarchy/0295-af-alg-restrict.patch b/pkgbuilds/linux-omarchy-eevdf/0295-af-alg-restrict.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0295-af-alg-restrict.patch rename to pkgbuilds/linux-omarchy-eevdf/0295-af-alg-restrict.patch diff --git a/pkgbuilds/linux-omarchy/0295-af-alg-restrict.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0295-af-alg-restrict.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0295-af-alg-restrict.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0295-af-alg-restrict.patch.sig diff --git a/pkgbuilds/linux-omarchy/0300-btrfs.patch b/pkgbuilds/linux-omarchy-eevdf/0300-btrfs.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0300-btrfs.patch rename to pkgbuilds/linux-omarchy-eevdf/0300-btrfs.patch diff --git a/pkgbuilds/linux-omarchy/0300-btrfs.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0300-btrfs.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0300-btrfs.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0300-btrfs.patch.sig diff --git a/pkgbuilds/linux-omarchy/0301-btrfs-fixes-1.patch b/pkgbuilds/linux-omarchy-eevdf/0301-btrfs-fixes-1.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0301-btrfs-fixes-1.patch rename to pkgbuilds/linux-omarchy-eevdf/0301-btrfs-fixes-1.patch diff --git a/pkgbuilds/linux-omarchy/0301-btrfs-fixes-1.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0301-btrfs-fixes-1.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0301-btrfs-fixes-1.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0301-btrfs-fixes-1.patch.sig diff --git a/pkgbuilds/linux-omarchy/0302-btrfs-zstd-decompress-direct-to-page.patch b/pkgbuilds/linux-omarchy-eevdf/0302-btrfs-zstd-decompress-direct-to-page.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0302-btrfs-zstd-decompress-direct-to-page.patch rename to pkgbuilds/linux-omarchy-eevdf/0302-btrfs-zstd-decompress-direct-to-page.patch diff --git a/pkgbuilds/linux-omarchy/0302-btrfs-zstd-decompress-direct-to-page.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0302-btrfs-zstd-decompress-direct-to-page.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0302-btrfs-zstd-decompress-direct-to-page.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0302-btrfs-zstd-decompress-direct-to-page.patch.sig diff --git a/pkgbuilds/linux-omarchy/0303-btrfs-fixes-2.patch b/pkgbuilds/linux-omarchy-eevdf/0303-btrfs-fixes-2.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0303-btrfs-fixes-2.patch rename to pkgbuilds/linux-omarchy-eevdf/0303-btrfs-fixes-2.patch diff --git a/pkgbuilds/linux-omarchy/0303-btrfs-fixes-2.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0303-btrfs-fixes-2.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0303-btrfs-fixes-2.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0303-btrfs-fixes-2.patch.sig diff --git a/pkgbuilds/linux-omarchy/0304-btrfs-fixes-3.patch b/pkgbuilds/linux-omarchy-eevdf/0304-btrfs-fixes-3.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0304-btrfs-fixes-3.patch rename to pkgbuilds/linux-omarchy-eevdf/0304-btrfs-fixes-3.patch diff --git a/pkgbuilds/linux-omarchy/0304-btrfs-fixes-3.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0304-btrfs-fixes-3.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0304-btrfs-fixes-3.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0304-btrfs-fixes-3.patch.sig diff --git a/pkgbuilds/linux-omarchy/0310-fuse-eof-zeroing.patch b/pkgbuilds/linux-omarchy-eevdf/0310-fuse-eof-zeroing.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0310-fuse-eof-zeroing.patch rename to pkgbuilds/linux-omarchy-eevdf/0310-fuse-eof-zeroing.patch diff --git a/pkgbuilds/linux-omarchy/0310-fuse-eof-zeroing.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0310-fuse-eof-zeroing.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0310-fuse-eof-zeroing.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0310-fuse-eof-zeroing.patch.sig diff --git a/pkgbuilds/linux-omarchy/0311-fuse-perf.patch b/pkgbuilds/linux-omarchy-eevdf/0311-fuse-perf.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0311-fuse-perf.patch rename to pkgbuilds/linux-omarchy-eevdf/0311-fuse-perf.patch diff --git a/pkgbuilds/linux-omarchy/0311-fuse-perf.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0311-fuse-perf.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0311-fuse-perf.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0311-fuse-perf.patch.sig diff --git a/pkgbuilds/linux-omarchy/0312-fuse-writethrough-uptodate.patch b/pkgbuilds/linux-omarchy-eevdf/0312-fuse-writethrough-uptodate.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0312-fuse-writethrough-uptodate.patch rename to pkgbuilds/linux-omarchy-eevdf/0312-fuse-writethrough-uptodate.patch diff --git a/pkgbuilds/linux-omarchy/0312-fuse-writethrough-uptodate.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0312-fuse-writethrough-uptodate.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0312-fuse-writethrough-uptodate.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0312-fuse-writethrough-uptodate.patch.sig diff --git a/pkgbuilds/linux-omarchy/0313-fuse-background-wakeup.patch b/pkgbuilds/linux-omarchy-eevdf/0313-fuse-background-wakeup.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0313-fuse-background-wakeup.patch rename to pkgbuilds/linux-omarchy-eevdf/0313-fuse-background-wakeup.patch diff --git a/pkgbuilds/linux-omarchy/0313-fuse-background-wakeup.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0313-fuse-background-wakeup.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0313-fuse-background-wakeup.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0313-fuse-background-wakeup.patch.sig diff --git a/pkgbuilds/linux-omarchy/0320-vfs-open-consume-path-reference.patch b/pkgbuilds/linux-omarchy-eevdf/0320-vfs-open-consume-path-reference.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0320-vfs-open-consume-path-reference.patch rename to pkgbuilds/linux-omarchy-eevdf/0320-vfs-open-consume-path-reference.patch diff --git a/pkgbuilds/linux-omarchy/0320-vfs-open-consume-path-reference.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0320-vfs-open-consume-path-reference.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0320-vfs-open-consume-path-reference.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0320-vfs-open-consume-path-reference.patch.sig diff --git a/pkgbuilds/linux-omarchy/0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch b/pkgbuilds/linux-omarchy-eevdf/0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch rename to pkgbuilds/linux-omarchy-eevdf/0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch diff --git a/pkgbuilds/linux-omarchy/0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch.sig diff --git a/pkgbuilds/linux-omarchy/0360-gpu-mem-cgroup.patch b/pkgbuilds/linux-omarchy-eevdf/0360-gpu-mem-cgroup.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0360-gpu-mem-cgroup.patch rename to pkgbuilds/linux-omarchy-eevdf/0360-gpu-mem-cgroup.patch diff --git a/pkgbuilds/linux-omarchy/0360-gpu-mem-cgroup.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0360-gpu-mem-cgroup.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0360-gpu-mem-cgroup.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0360-gpu-mem-cgroup.patch.sig diff --git a/pkgbuilds/linux-omarchy/0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch b/pkgbuilds/linux-omarchy-eevdf/0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch rename to pkgbuilds/linux-omarchy-eevdf/0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch diff --git a/pkgbuilds/linux-omarchy/0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch.sig diff --git a/pkgbuilds/linux-omarchy/0401-psr2-early-transport-panels.patch b/pkgbuilds/linux-omarchy-eevdf/0401-psr2-early-transport-panels.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0401-psr2-early-transport-panels.patch rename to pkgbuilds/linux-omarchy-eevdf/0401-psr2-early-transport-panels.patch diff --git a/pkgbuilds/linux-omarchy/0401-psr2-early-transport-panels.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0401-psr2-early-transport-panels.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0401-psr2-early-transport-panels.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0401-psr2-early-transport-panels.patch.sig diff --git a/pkgbuilds/linux-omarchy/0402-drm-i915-quirk-panel-replay-exit-on-flush.patch b/pkgbuilds/linux-omarchy-eevdf/0402-drm-i915-quirk-panel-replay-exit-on-flush.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0402-drm-i915-quirk-panel-replay-exit-on-flush.patch rename to pkgbuilds/linux-omarchy-eevdf/0402-drm-i915-quirk-panel-replay-exit-on-flush.patch diff --git a/pkgbuilds/linux-omarchy/0402-drm-i915-quirk-panel-replay-exit-on-flush.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0402-drm-i915-quirk-panel-replay-exit-on-flush.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0402-drm-i915-quirk-panel-replay-exit-on-flush.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0402-drm-i915-quirk-panel-replay-exit-on-flush.patch.sig diff --git a/pkgbuilds/linux-omarchy/0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch b/pkgbuilds/linux-omarchy-eevdf/0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch rename to pkgbuilds/linux-omarchy-eevdf/0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch diff --git a/pkgbuilds/linux-omarchy/0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch.sig diff --git a/pkgbuilds/linux-omarchy/0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch b/pkgbuilds/linux-omarchy-eevdf/0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch rename to pkgbuilds/linux-omarchy-eevdf/0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch diff --git a/pkgbuilds/linux-omarchy/0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch.sig diff --git a/pkgbuilds/linux-omarchy/0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch b/pkgbuilds/linux-omarchy-eevdf/0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch rename to pkgbuilds/linux-omarchy-eevdf/0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch diff --git a/pkgbuilds/linux-omarchy/0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch.sig diff --git a/pkgbuilds/linux-omarchy/0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch b/pkgbuilds/linux-omarchy-eevdf/0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch rename to pkgbuilds/linux-omarchy-eevdf/0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch diff --git a/pkgbuilds/linux-omarchy/0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch.sig diff --git a/pkgbuilds/linux-omarchy/0411-drm-xe-display-no-stolen-framebuffers.patch b/pkgbuilds/linux-omarchy-eevdf/0411-drm-xe-display-no-stolen-framebuffers.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0411-drm-xe-display-no-stolen-framebuffers.patch rename to pkgbuilds/linux-omarchy-eevdf/0411-drm-xe-display-no-stolen-framebuffers.patch diff --git a/pkgbuilds/linux-omarchy/0411-drm-xe-display-no-stolen-framebuffers.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0411-drm-xe-display-no-stolen-framebuffers.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0411-drm-xe-display-no-stolen-framebuffers.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0411-drm-xe-display-no-stolen-framebuffers.patch.sig diff --git a/pkgbuilds/linux-omarchy/0420-safe-window.patch b/pkgbuilds/linux-omarchy-eevdf/0420-safe-window.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0420-safe-window.patch rename to pkgbuilds/linux-omarchy-eevdf/0420-safe-window.patch diff --git a/pkgbuilds/linux-omarchy/0420-safe-window.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0420-safe-window.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0420-safe-window.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0420-safe-window.patch.sig diff --git a/pkgbuilds/linux-omarchy/0430-fbc.patch b/pkgbuilds/linux-omarchy-eevdf/0430-fbc.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0430-fbc.patch rename to pkgbuilds/linux-omarchy-eevdf/0430-fbc.patch diff --git a/pkgbuilds/linux-omarchy/0430-fbc.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0430-fbc.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0430-fbc.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0430-fbc.patch.sig diff --git a/pkgbuilds/linux-omarchy/0440-xe3-peak-bandwidth.patch b/pkgbuilds/linux-omarchy-eevdf/0440-xe3-peak-bandwidth.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0440-xe3-peak-bandwidth.patch rename to pkgbuilds/linux-omarchy-eevdf/0440-xe3-peak-bandwidth.patch diff --git a/pkgbuilds/linux-omarchy/0440-xe3-peak-bandwidth.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0440-xe3-peak-bandwidth.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0440-xe3-peak-bandwidth.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0440-xe3-peak-bandwidth.patch.sig diff --git a/pkgbuilds/linux-omarchy/0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch b/pkgbuilds/linux-omarchy-eevdf/0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch rename to pkgbuilds/linux-omarchy-eevdf/0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch diff --git a/pkgbuilds/linux-omarchy/0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch.sig diff --git a/pkgbuilds/linux-omarchy/0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch b/pkgbuilds/linux-omarchy-eevdf/0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch rename to pkgbuilds/linux-omarchy-eevdf/0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch diff --git a/pkgbuilds/linux-omarchy/0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch.sig diff --git a/pkgbuilds/linux-omarchy/0444-drm-i915-vrr-dc-balance-off-by-default.patch b/pkgbuilds/linux-omarchy-eevdf/0444-drm-i915-vrr-dc-balance-off-by-default.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0444-drm-i915-vrr-dc-balance-off-by-default.patch rename to pkgbuilds/linux-omarchy-eevdf/0444-drm-i915-vrr-dc-balance-off-by-default.patch diff --git a/pkgbuilds/linux-omarchy/0444-drm-i915-vrr-dc-balance-off-by-default.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0444-drm-i915-vrr-dc-balance-off-by-default.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0444-drm-i915-vrr-dc-balance-off-by-default.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0444-drm-i915-vrr-dc-balance-off-by-default.patch.sig diff --git a/pkgbuilds/linux-omarchy/0450-amd-hdmi-vrr-allm.patch b/pkgbuilds/linux-omarchy-eevdf/0450-amd-hdmi-vrr-allm.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0450-amd-hdmi-vrr-allm.patch rename to pkgbuilds/linux-omarchy-eevdf/0450-amd-hdmi-vrr-allm.patch diff --git a/pkgbuilds/linux-omarchy/0450-amd-hdmi-vrr-allm.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0450-amd-hdmi-vrr-allm.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0450-amd-hdmi-vrr-allm.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0450-amd-hdmi-vrr-allm.patch.sig diff --git a/pkgbuilds/linux-omarchy/0451-amd-vtem-tmds-links.patch b/pkgbuilds/linux-omarchy-eevdf/0451-amd-vtem-tmds-links.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0451-amd-vtem-tmds-links.patch rename to pkgbuilds/linux-omarchy-eevdf/0451-amd-vtem-tmds-links.patch diff --git a/pkgbuilds/linux-omarchy/0451-amd-vtem-tmds-links.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0451-amd-vtem-tmds-links.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0451-amd-vtem-tmds-links.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0451-amd-vtem-tmds-links.patch.sig diff --git a/pkgbuilds/linux-omarchy/0452-amd-hdmi-frl-default.patch b/pkgbuilds/linux-omarchy-eevdf/0452-amd-hdmi-frl-default.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0452-amd-hdmi-frl-default.patch rename to pkgbuilds/linux-omarchy-eevdf/0452-amd-hdmi-frl-default.patch diff --git a/pkgbuilds/linux-omarchy/0452-amd-hdmi-frl-default.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0452-amd-hdmi-frl-default.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0452-amd-hdmi-frl-default.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0452-amd-hdmi-frl-default.patch.sig diff --git a/pkgbuilds/linux-omarchy/0453-amd-vtem-null-sink.patch b/pkgbuilds/linux-omarchy-eevdf/0453-amd-vtem-null-sink.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0453-amd-vtem-null-sink.patch rename to pkgbuilds/linux-omarchy-eevdf/0453-amd-vtem-null-sink.patch diff --git a/pkgbuilds/linux-omarchy/0453-amd-vtem-null-sink.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0453-amd-vtem-null-sink.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0453-amd-vtem-null-sink.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0453-amd-vtem-null-sink.patch.sig diff --git a/pkgbuilds/linux-omarchy/0454-amd-hdmi-frl-status-polling.patch b/pkgbuilds/linux-omarchy-eevdf/0454-amd-hdmi-frl-status-polling.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0454-amd-hdmi-frl-status-polling.patch rename to pkgbuilds/linux-omarchy-eevdf/0454-amd-hdmi-frl-status-polling.patch diff --git a/pkgbuilds/linux-omarchy/0454-amd-hdmi-frl-status-polling.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0454-amd-hdmi-frl-status-polling.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0454-amd-hdmi-frl-status-polling.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0454-amd-hdmi-frl-status-polling.patch.sig diff --git a/pkgbuilds/linux-omarchy/0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch b/pkgbuilds/linux-omarchy-eevdf/0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch rename to pkgbuilds/linux-omarchy-eevdf/0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch diff --git a/pkgbuilds/linux-omarchy/0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch.sig diff --git a/pkgbuilds/linux-omarchy/0456-amd-dml-frl-compressed-cap-check.patch b/pkgbuilds/linux-omarchy-eevdf/0456-amd-dml-frl-compressed-cap-check.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0456-amd-dml-frl-compressed-cap-check.patch rename to pkgbuilds/linux-omarchy-eevdf/0456-amd-dml-frl-compressed-cap-check.patch diff --git a/pkgbuilds/linux-omarchy/0456-amd-dml-frl-compressed-cap-check.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0456-amd-dml-frl-compressed-cap-check.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0456-amd-dml-frl-compressed-cap-check.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0456-amd-dml-frl-compressed-cap-check.patch.sig diff --git a/pkgbuilds/linux-omarchy/0460-vesa-displayid-dsc-bpp.patch b/pkgbuilds/linux-omarchy-eevdf/0460-vesa-displayid-dsc-bpp.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0460-vesa-displayid-dsc-bpp.patch rename to pkgbuilds/linux-omarchy-eevdf/0460-vesa-displayid-dsc-bpp.patch diff --git a/pkgbuilds/linux-omarchy/0460-vesa-displayid-dsc-bpp.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0460-vesa-displayid-dsc-bpp.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0460-vesa-displayid-dsc-bpp.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0460-vesa-displayid-dsc-bpp.patch.sig diff --git a/pkgbuilds/linux-omarchy/0461-vesa-dsc-passthru-mode-match-fix.patch b/pkgbuilds/linux-omarchy-eevdf/0461-vesa-dsc-passthru-mode-match-fix.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0461-vesa-dsc-passthru-mode-match-fix.patch rename to pkgbuilds/linux-omarchy-eevdf/0461-vesa-dsc-passthru-mode-match-fix.patch diff --git a/pkgbuilds/linux-omarchy/0461-vesa-dsc-passthru-mode-match-fix.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0461-vesa-dsc-passthru-mode-match-fix.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0461-vesa-dsc-passthru-mode-match-fix.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0461-vesa-dsc-passthru-mode-match-fix.patch.sig diff --git a/pkgbuilds/linux-omarchy/0472-amdgpu-userq-post-reset-error.patch b/pkgbuilds/linux-omarchy-eevdf/0472-amdgpu-userq-post-reset-error.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0472-amdgpu-userq-post-reset-error.patch rename to pkgbuilds/linux-omarchy-eevdf/0472-amdgpu-userq-post-reset-error.patch diff --git a/pkgbuilds/linux-omarchy/0472-amdgpu-userq-post-reset-error.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0472-amdgpu-userq-post-reset-error.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0472-amdgpu-userq-post-reset-error.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0472-amdgpu-userq-post-reset-error.patch.sig diff --git a/pkgbuilds/linux-omarchy/0474-amd-display-oled-vesa-backlight.patch b/pkgbuilds/linux-omarchy-eevdf/0474-amd-display-oled-vesa-backlight.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0474-amd-display-oled-vesa-backlight.patch rename to pkgbuilds/linux-omarchy-eevdf/0474-amd-display-oled-vesa-backlight.patch diff --git a/pkgbuilds/linux-omarchy/0474-amd-display-oled-vesa-backlight.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0474-amd-display-oled-vesa-backlight.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0474-amd-display-oled-vesa-backlight.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0474-amd-display-oled-vesa-backlight.patch.sig diff --git a/pkgbuilds/linux-omarchy/0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch b/pkgbuilds/linux-omarchy-eevdf/0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch rename to pkgbuilds/linux-omarchy-eevdf/0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch diff --git a/pkgbuilds/linux-omarchy/0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch.sig diff --git a/pkgbuilds/linux-omarchy/0476-amd-display-ycbcr420-only-modes.patch b/pkgbuilds/linux-omarchy-eevdf/0476-amd-display-ycbcr420-only-modes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0476-amd-display-ycbcr420-only-modes.patch rename to pkgbuilds/linux-omarchy-eevdf/0476-amd-display-ycbcr420-only-modes.patch diff --git a/pkgbuilds/linux-omarchy/0476-amd-display-ycbcr420-only-modes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0476-amd-display-ycbcr420-only-modes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0476-amd-display-ycbcr420-only-modes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0476-amd-display-ycbcr420-only-modes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0477-amd-display-irq-atomic-rmw.patch b/pkgbuilds/linux-omarchy-eevdf/0477-amd-display-irq-atomic-rmw.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0477-amd-display-irq-atomic-rmw.patch rename to pkgbuilds/linux-omarchy-eevdf/0477-amd-display-irq-atomic-rmw.patch diff --git a/pkgbuilds/linux-omarchy/0477-amd-display-irq-atomic-rmw.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0477-amd-display-irq-atomic-rmw.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0477-amd-display-irq-atomic-rmw.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0477-amd-display-irq-atomic-rmw.patch.sig diff --git a/pkgbuilds/linux-omarchy/0478-amd-freesync-vcp-code-check-hdmi-pcon.patch b/pkgbuilds/linux-omarchy-eevdf/0478-amd-freesync-vcp-code-check-hdmi-pcon.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0478-amd-freesync-vcp-code-check-hdmi-pcon.patch rename to pkgbuilds/linux-omarchy-eevdf/0478-amd-freesync-vcp-code-check-hdmi-pcon.patch diff --git a/pkgbuilds/linux-omarchy/0478-amd-freesync-vcp-code-check-hdmi-pcon.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0478-amd-freesync-vcp-code-check-hdmi-pcon.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0478-amd-freesync-vcp-code-check-hdmi-pcon.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0478-amd-freesync-vcp-code-check-hdmi-pcon.patch.sig diff --git a/pkgbuilds/linux-omarchy/0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch b/pkgbuilds/linux-omarchy-eevdf/0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch rename to pkgbuilds/linux-omarchy-eevdf/0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch diff --git a/pkgbuilds/linux-omarchy/0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch.sig diff --git a/pkgbuilds/linux-omarchy/0510-sound-updates.patch b/pkgbuilds/linux-omarchy-eevdf/0510-sound-updates.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0510-sound-updates.patch rename to pkgbuilds/linux-omarchy-eevdf/0510-sound-updates.patch diff --git a/pkgbuilds/linux-omarchy/0510-sound-updates.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0510-sound-updates.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0510-sound-updates.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0510-sound-updates.patch.sig diff --git a/pkgbuilds/linux-omarchy/0511-asoc-updates.patch b/pkgbuilds/linux-omarchy-eevdf/0511-asoc-updates.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0511-asoc-updates.patch rename to pkgbuilds/linux-omarchy-eevdf/0511-asoc-updates.patch diff --git a/pkgbuilds/linux-omarchy/0511-asoc-updates.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0511-asoc-updates.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0511-asoc-updates.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0511-asoc-updates.patch.sig diff --git a/pkgbuilds/linux-omarchy/0512-sound-fixes-1.patch b/pkgbuilds/linux-omarchy-eevdf/0512-sound-fixes-1.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0512-sound-fixes-1.patch rename to pkgbuilds/linux-omarchy-eevdf/0512-sound-fixes-1.patch diff --git a/pkgbuilds/linux-omarchy/0512-sound-fixes-1.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0512-sound-fixes-1.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0512-sound-fixes-1.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0512-sound-fixes-1.patch.sig diff --git a/pkgbuilds/linux-omarchy/0513-asoc-fixes-1.patch b/pkgbuilds/linux-omarchy-eevdf/0513-asoc-fixes-1.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0513-asoc-fixes-1.patch rename to pkgbuilds/linux-omarchy-eevdf/0513-asoc-fixes-1.patch diff --git a/pkgbuilds/linux-omarchy/0513-asoc-fixes-1.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0513-asoc-fixes-1.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0513-asoc-fixes-1.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0513-asoc-fixes-1.patch.sig diff --git a/pkgbuilds/linux-omarchy/0514-sound-fixes-2.patch b/pkgbuilds/linux-omarchy-eevdf/0514-sound-fixes-2.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0514-sound-fixes-2.patch rename to pkgbuilds/linux-omarchy-eevdf/0514-sound-fixes-2.patch diff --git a/pkgbuilds/linux-omarchy/0514-sound-fixes-2.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0514-sound-fixes-2.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0514-sound-fixes-2.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0514-sound-fixes-2.patch.sig diff --git a/pkgbuilds/linux-omarchy/0515-xps13-sof-quirk.patch b/pkgbuilds/linux-omarchy-eevdf/0515-xps13-sof-quirk.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0515-xps13-sof-quirk.patch rename to pkgbuilds/linux-omarchy-eevdf/0515-xps13-sof-quirk.patch diff --git a/pkgbuilds/linux-omarchy/0515-xps13-sof-quirk.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0515-xps13-sof-quirk.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0515-xps13-sof-quirk.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0515-xps13-sof-quirk.patch.sig diff --git a/pkgbuilds/linux-omarchy/0516-rt766-stream-config-type.patch b/pkgbuilds/linux-omarchy-eevdf/0516-rt766-stream-config-type.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0516-rt766-stream-config-type.patch rename to pkgbuilds/linux-omarchy-eevdf/0516-rt766-stream-config-type.patch diff --git a/pkgbuilds/linux-omarchy/0516-rt766-stream-config-type.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0516-rt766-stream-config-type.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0516-rt766-stream-config-type.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0516-rt766-stream-config-type.patch.sig diff --git a/pkgbuilds/linux-omarchy/0517-hda-realtek-rog-strix-g733zw-speakers.patch b/pkgbuilds/linux-omarchy-eevdf/0517-hda-realtek-rog-strix-g733zw-speakers.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0517-hda-realtek-rog-strix-g733zw-speakers.patch rename to pkgbuilds/linux-omarchy-eevdf/0517-hda-realtek-rog-strix-g733zw-speakers.patch diff --git a/pkgbuilds/linux-omarchy/0517-hda-realtek-rog-strix-g733zw-speakers.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0517-hda-realtek-rog-strix-g733zw-speakers.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0517-hda-realtek-rog-strix-g733zw-speakers.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0517-hda-realtek-rog-strix-g733zw-speakers.patch.sig diff --git a/pkgbuilds/linux-omarchy/0518-asoc-amd-yc-acer-aspire-a314-23p.patch b/pkgbuilds/linux-omarchy-eevdf/0518-asoc-amd-yc-acer-aspire-a314-23p.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0518-asoc-amd-yc-acer-aspire-a314-23p.patch rename to pkgbuilds/linux-omarchy-eevdf/0518-asoc-amd-yc-acer-aspire-a314-23p.patch diff --git a/pkgbuilds/linux-omarchy/0518-asoc-amd-yc-acer-aspire-a314-23p.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0518-asoc-amd-yc-acer-aspire-a314-23p.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0518-asoc-amd-yc-acer-aspire-a314-23p.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0518-asoc-amd-yc-acer-aspire-a314-23p.patch.sig diff --git a/pkgbuilds/linux-omarchy/0522-sound-fixes-3.patch b/pkgbuilds/linux-omarchy-eevdf/0522-sound-fixes-3.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0522-sound-fixes-3.patch rename to pkgbuilds/linux-omarchy-eevdf/0522-sound-fixes-3.patch diff --git a/pkgbuilds/linux-omarchy/0522-sound-fixes-3.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0522-sound-fixes-3.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0522-sound-fixes-3.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0522-sound-fixes-3.patch.sig diff --git a/pkgbuilds/linux-omarchy/0523-asoc-fixes-2.patch b/pkgbuilds/linux-omarchy-eevdf/0523-asoc-fixes-2.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0523-asoc-fixes-2.patch rename to pkgbuilds/linux-omarchy-eevdf/0523-asoc-fixes-2.patch diff --git a/pkgbuilds/linux-omarchy/0523-asoc-fixes-2.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0523-asoc-fixes-2.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0523-asoc-fixes-2.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0523-asoc-fixes-2.patch.sig diff --git a/pkgbuilds/linux-omarchy/0524-sound-fixes-4.patch b/pkgbuilds/linux-omarchy-eevdf/0524-sound-fixes-4.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0524-sound-fixes-4.patch rename to pkgbuilds/linux-omarchy-eevdf/0524-sound-fixes-4.patch diff --git a/pkgbuilds/linux-omarchy/0524-sound-fixes-4.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0524-sound-fixes-4.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0524-sound-fixes-4.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0524-sound-fixes-4.patch.sig diff --git a/pkgbuilds/linux-omarchy/0525-asoc-fixes-3.patch b/pkgbuilds/linux-omarchy-eevdf/0525-asoc-fixes-3.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0525-asoc-fixes-3.patch rename to pkgbuilds/linux-omarchy-eevdf/0525-asoc-fixes-3.patch diff --git a/pkgbuilds/linux-omarchy/0525-asoc-fixes-3.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0525-asoc-fixes-3.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0525-asoc-fixes-3.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0525-asoc-fixes-3.patch.sig diff --git a/pkgbuilds/linux-omarchy/0526-sof-amd-acp7x-suspend-unknown-revision.patch b/pkgbuilds/linux-omarchy-eevdf/0526-sof-amd-acp7x-suspend-unknown-revision.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0526-sof-amd-acp7x-suspend-unknown-revision.patch rename to pkgbuilds/linux-omarchy-eevdf/0526-sof-amd-acp7x-suspend-unknown-revision.patch diff --git a/pkgbuilds/linux-omarchy/0526-sof-amd-acp7x-suspend-unknown-revision.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0526-sof-amd-acp7x-suspend-unknown-revision.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0526-sof-amd-acp7x-suspend-unknown-revision.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0526-sof-amd-acp7x-suspend-unknown-revision.patch.sig diff --git a/pkgbuilds/linux-omarchy/0527-sound-fixes-5.patch b/pkgbuilds/linux-omarchy-eevdf/0527-sound-fixes-5.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0527-sound-fixes-5.patch rename to pkgbuilds/linux-omarchy-eevdf/0527-sound-fixes-5.patch diff --git a/pkgbuilds/linux-omarchy/0527-sound-fixes-5.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0527-sound-fixes-5.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0527-sound-fixes-5.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0527-sound-fixes-5.patch.sig diff --git a/pkgbuilds/linux-omarchy/0528-asoc-fixes-4.patch b/pkgbuilds/linux-omarchy-eevdf/0528-asoc-fixes-4.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0528-asoc-fixes-4.patch rename to pkgbuilds/linux-omarchy-eevdf/0528-asoc-fixes-4.patch diff --git a/pkgbuilds/linux-omarchy/0528-asoc-fixes-4.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0528-asoc-fixes-4.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0528-asoc-fixes-4.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0528-asoc-fixes-4.patch.sig diff --git a/pkgbuilds/linux-omarchy/0541-cvs-nova-lake-acpi-id.patch b/pkgbuilds/linux-omarchy-eevdf/0541-cvs-nova-lake-acpi-id.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0541-cvs-nova-lake-acpi-id.patch rename to pkgbuilds/linux-omarchy-eevdf/0541-cvs-nova-lake-acpi-id.patch diff --git a/pkgbuilds/linux-omarchy/0541-cvs-nova-lake-acpi-id.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0541-cvs-nova-lake-acpi-id.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0541-cvs-nova-lake-acpi-id.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0541-cvs-nova-lake-acpi-id.patch.sig diff --git a/pkgbuilds/linux-omarchy/0542-media-cvs-wake-irq-without-claiming-gpio.patch b/pkgbuilds/linux-omarchy-eevdf/0542-media-cvs-wake-irq-without-claiming-gpio.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0542-media-cvs-wake-irq-without-claiming-gpio.patch rename to pkgbuilds/linux-omarchy-eevdf/0542-media-cvs-wake-irq-without-claiming-gpio.patch diff --git a/pkgbuilds/linux-omarchy/0542-media-cvs-wake-irq-without-claiming-gpio.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0542-media-cvs-wake-irq-without-claiming-gpio.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0542-media-cvs-wake-irq-without-claiming-gpio.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0542-media-cvs-wake-irq-without-claiming-gpio.patch.sig diff --git a/pkgbuilds/linux-omarchy/0543-media-laptop-cameras.patch b/pkgbuilds/linux-omarchy-eevdf/0543-media-laptop-cameras.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0543-media-laptop-cameras.patch rename to pkgbuilds/linux-omarchy-eevdf/0543-media-laptop-cameras.patch diff --git a/pkgbuilds/linux-omarchy/0543-media-laptop-cameras.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0543-media-laptop-cameras.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0543-media-laptop-cameras.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0543-media-laptop-cameras.patch.sig diff --git a/pkgbuilds/linux-omarchy/0544-ipu-bridge-lenovo-x9-upside-down.patch b/pkgbuilds/linux-omarchy-eevdf/0544-ipu-bridge-lenovo-x9-upside-down.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0544-ipu-bridge-lenovo-x9-upside-down.patch rename to pkgbuilds/linux-omarchy-eevdf/0544-ipu-bridge-lenovo-x9-upside-down.patch diff --git a/pkgbuilds/linux-omarchy/0544-ipu-bridge-lenovo-x9-upside-down.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0544-ipu-bridge-lenovo-x9-upside-down.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0544-ipu-bridge-lenovo-x9-upside-down.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0544-ipu-bridge-lenovo-x9-upside-down.patch.sig diff --git a/pkgbuilds/linux-omarchy/0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch b/pkgbuilds/linux-omarchy-eevdf/0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch rename to pkgbuilds/linux-omarchy-eevdf/0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch diff --git a/pkgbuilds/linux-omarchy/0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch.sig diff --git a/pkgbuilds/linux-omarchy/0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch b/pkgbuilds/linux-omarchy-eevdf/0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch rename to pkgbuilds/linux-omarchy-eevdf/0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch diff --git a/pkgbuilds/linux-omarchy/0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch.sig diff --git a/pkgbuilds/linux-omarchy/0547-int3472-imx471-vana-power-enable.patch b/pkgbuilds/linux-omarchy-eevdf/0547-int3472-imx471-vana-power-enable.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0547-int3472-imx471-vana-power-enable.patch rename to pkgbuilds/linux-omarchy-eevdf/0547-int3472-imx471-vana-power-enable.patch diff --git a/pkgbuilds/linux-omarchy/0547-int3472-imx471-vana-power-enable.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0547-int3472-imx471-vana-power-enable.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0547-int3472-imx471-vana-power-enable.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0547-int3472-imx471-vana-power-enable.patch.sig diff --git a/pkgbuilds/linux-omarchy/0548-media-cvs-sensor-node-in-bound-callback.patch b/pkgbuilds/linux-omarchy-eevdf/0548-media-cvs-sensor-node-in-bound-callback.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0548-media-cvs-sensor-node-in-bound-callback.patch rename to pkgbuilds/linux-omarchy-eevdf/0548-media-cvs-sensor-node-in-bound-callback.patch diff --git a/pkgbuilds/linux-omarchy/0548-media-cvs-sensor-node-in-bound-callback.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0548-media-cvs-sensor-node-in-bound-callback.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0548-media-cvs-sensor-node-in-bound-callback.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0548-media-cvs-sensor-node-in-bound-callback.patch.sig diff --git a/pkgbuilds/linux-omarchy/0549-media-imx471-analog-gain-max-960.patch b/pkgbuilds/linux-omarchy-eevdf/0549-media-imx471-analog-gain-max-960.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0549-media-imx471-analog-gain-max-960.patch rename to pkgbuilds/linux-omarchy-eevdf/0549-media-imx471-analog-gain-max-960.patch diff --git a/pkgbuilds/linux-omarchy/0549-media-imx471-analog-gain-max-960.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0549-media-imx471-analog-gain-max-960.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0549-media-imx471-analog-gain-max-960.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0549-media-imx471-analog-gain-max-960.patch.sig diff --git a/pkgbuilds/linux-omarchy/0560-input-updates.patch b/pkgbuilds/linux-omarchy-eevdf/0560-input-updates.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0560-input-updates.patch rename to pkgbuilds/linux-omarchy-eevdf/0560-input-updates.patch diff --git a/pkgbuilds/linux-omarchy/0560-input-updates.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0560-input-updates.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0560-input-updates.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0560-input-updates.patch.sig diff --git a/pkgbuilds/linux-omarchy/0561-input-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0561-input-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0561-input-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0561-input-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0561-input-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0561-input-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0561-input-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0561-input-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0562-hid-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0562-hid-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0562-hid-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0562-hid-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0562-hid-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0562-hid-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0562-hid-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0562-hid-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0563-input-fixes-2.patch b/pkgbuilds/linux-omarchy-eevdf/0563-input-fixes-2.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0563-input-fixes-2.patch rename to pkgbuilds/linux-omarchy-eevdf/0563-input-fixes-2.patch diff --git a/pkgbuilds/linux-omarchy/0563-input-fixes-2.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0563-input-fixes-2.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0563-input-fixes-2.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0563-input-fixes-2.patch.sig diff --git a/pkgbuilds/linux-omarchy/0565-i2c-asue140d-touchpad-100khz.patch b/pkgbuilds/linux-omarchy-eevdf/0565-i2c-asue140d-touchpad-100khz.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0565-i2c-asue140d-touchpad-100khz.patch rename to pkgbuilds/linux-omarchy-eevdf/0565-i2c-asue140d-touchpad-100khz.patch diff --git a/pkgbuilds/linux-omarchy/0565-i2c-asue140d-touchpad-100khz.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0565-i2c-asue140d-touchpad-100khz.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0565-i2c-asue140d-touchpad-100khz.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0565-i2c-asue140d-touchpad-100khz.patch.sig diff --git a/pkgbuilds/linux-omarchy/0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch b/pkgbuilds/linux-omarchy-eevdf/0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch rename to pkgbuilds/linux-omarchy-eevdf/0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch diff --git a/pkgbuilds/linux-omarchy/0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch.sig diff --git a/pkgbuilds/linux-omarchy/0601-thunderbolt-updates.patch b/pkgbuilds/linux-omarchy-eevdf/0601-thunderbolt-updates.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0601-thunderbolt-updates.patch rename to pkgbuilds/linux-omarchy-eevdf/0601-thunderbolt-updates.patch diff --git a/pkgbuilds/linux-omarchy/0601-thunderbolt-updates.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0601-thunderbolt-updates.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0601-thunderbolt-updates.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0601-thunderbolt-updates.patch.sig diff --git a/pkgbuilds/linux-omarchy/0602-thunderbolt-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0602-thunderbolt-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0602-thunderbolt-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0602-thunderbolt-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0602-thunderbolt-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0602-thunderbolt-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0602-thunderbolt-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0602-thunderbolt-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0603-usb-updates.patch b/pkgbuilds/linux-omarchy-eevdf/0603-usb-updates.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0603-usb-updates.patch rename to pkgbuilds/linux-omarchy-eevdf/0603-usb-updates.patch diff --git a/pkgbuilds/linux-omarchy/0603-usb-updates.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0603-usb-updates.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0603-usb-updates.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0603-usb-updates.patch.sig diff --git a/pkgbuilds/linux-omarchy/0604-xhci-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0604-xhci-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0604-xhci-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0604-xhci-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0604-xhci-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0604-xhci-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0604-xhci-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0604-xhci-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0605-thunderbolt-pcie-rescan-after-tunnel.patch b/pkgbuilds/linux-omarchy-eevdf/0605-thunderbolt-pcie-rescan-after-tunnel.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0605-thunderbolt-pcie-rescan-after-tunnel.patch rename to pkgbuilds/linux-omarchy-eevdf/0605-thunderbolt-pcie-rescan-after-tunnel.patch diff --git a/pkgbuilds/linux-omarchy/0605-thunderbolt-pcie-rescan-after-tunnel.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0605-thunderbolt-pcie-rescan-after-tunnel.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0605-thunderbolt-pcie-rescan-after-tunnel.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0605-thunderbolt-pcie-rescan-after-tunnel.patch.sig diff --git a/pkgbuilds/linux-omarchy/0606-thunderbolt-fixes-2.patch b/pkgbuilds/linux-omarchy-eevdf/0606-thunderbolt-fixes-2.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0606-thunderbolt-fixes-2.patch rename to pkgbuilds/linux-omarchy-eevdf/0606-thunderbolt-fixes-2.patch diff --git a/pkgbuilds/linux-omarchy/0606-thunderbolt-fixes-2.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0606-thunderbolt-fixes-2.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0606-thunderbolt-fixes-2.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0606-thunderbolt-fixes-2.patch.sig diff --git a/pkgbuilds/linux-omarchy/0607-usb-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0607-usb-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0607-usb-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0607-usb-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0607-usb-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0607-usb-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0607-usb-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0607-usb-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0620-usb-string-sanitize.patch b/pkgbuilds/linux-omarchy-eevdf/0620-usb-string-sanitize.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0620-usb-string-sanitize.patch rename to pkgbuilds/linux-omarchy-eevdf/0620-usb-string-sanitize.patch diff --git a/pkgbuilds/linux-omarchy/0620-usb-string-sanitize.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0620-usb-string-sanitize.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0620-usb-string-sanitize.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0620-usb-string-sanitize.patch.sig diff --git a/pkgbuilds/linux-omarchy/0650-wireguard-tstamp-type.patch b/pkgbuilds/linux-omarchy-eevdf/0650-wireguard-tstamp-type.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0650-wireguard-tstamp-type.patch rename to pkgbuilds/linux-omarchy-eevdf/0650-wireguard-tstamp-type.patch diff --git a/pkgbuilds/linux-omarchy/0650-wireguard-tstamp-type.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0650-wireguard-tstamp-type.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0650-wireguard-tstamp-type.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0650-wireguard-tstamp-type.patch.sig diff --git a/pkgbuilds/linux-omarchy/0660-btusb-mediatek-mt7922-13d3-3625.patch b/pkgbuilds/linux-omarchy-eevdf/0660-btusb-mediatek-mt7922-13d3-3625.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0660-btusb-mediatek-mt7922-13d3-3625.patch rename to pkgbuilds/linux-omarchy-eevdf/0660-btusb-mediatek-mt7922-13d3-3625.patch diff --git a/pkgbuilds/linux-omarchy/0660-btusb-mediatek-mt7922-13d3-3625.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0660-btusb-mediatek-mt7922-13d3-3625.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0660-btusb-mediatek-mt7922-13d3-3625.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0660-btusb-mediatek-mt7922-13d3-3625.patch.sig diff --git a/pkgbuilds/linux-omarchy/0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch b/pkgbuilds/linux-omarchy-eevdf/0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch rename to pkgbuilds/linux-omarchy-eevdf/0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch diff --git a/pkgbuilds/linux-omarchy/0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch.sig diff --git a/pkgbuilds/linux-omarchy/0663-btintel-pcie-serialize-reset-type.patch b/pkgbuilds/linux-omarchy-eevdf/0663-btintel-pcie-serialize-reset-type.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0663-btintel-pcie-serialize-reset-type.patch rename to pkgbuilds/linux-omarchy-eevdf/0663-btintel-pcie-serialize-reset-type.patch diff --git a/pkgbuilds/linux-omarchy/0663-btintel-pcie-serialize-reset-type.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0663-btintel-pcie-serialize-reset-type.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0663-btintel-pcie-serialize-reset-type.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0663-btintel-pcie-serialize-reset-type.patch.sig diff --git a/pkgbuilds/linux-omarchy/0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch b/pkgbuilds/linux-omarchy-eevdf/0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch rename to pkgbuilds/linux-omarchy-eevdf/0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch diff --git a/pkgbuilds/linux-omarchy/0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch.sig diff --git a/pkgbuilds/linux-omarchy/0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch b/pkgbuilds/linux-omarchy-eevdf/0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch rename to pkgbuilds/linux-omarchy-eevdf/0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch diff --git a/pkgbuilds/linux-omarchy/0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch.sig diff --git a/pkgbuilds/linux-omarchy/0666-btintel-pcie-verify-serialize-dstate.patch b/pkgbuilds/linux-omarchy-eevdf/0666-btintel-pcie-verify-serialize-dstate.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0666-btintel-pcie-verify-serialize-dstate.patch rename to pkgbuilds/linux-omarchy-eevdf/0666-btintel-pcie-verify-serialize-dstate.patch diff --git a/pkgbuilds/linux-omarchy/0666-btintel-pcie-verify-serialize-dstate.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0666-btintel-pcie-verify-serialize-dstate.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0666-btintel-pcie-verify-serialize-dstate.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0666-btintel-pcie-verify-serialize-dstate.patch.sig diff --git a/pkgbuilds/linux-omarchy/0667-btintel-pcie-gp0-cause-w1c-write.patch b/pkgbuilds/linux-omarchy-eevdf/0667-btintel-pcie-gp0-cause-w1c-write.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0667-btintel-pcie-gp0-cause-w1c-write.patch rename to pkgbuilds/linux-omarchy-eevdf/0667-btintel-pcie-gp0-cause-w1c-write.patch diff --git a/pkgbuilds/linux-omarchy/0667-btintel-pcie-gp0-cause-w1c-write.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0667-btintel-pcie-gp0-cause-w1c-write.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0667-btintel-pcie-gp0-cause-w1c-write.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0667-btintel-pcie-gp0-cause-w1c-write.patch.sig diff --git a/pkgbuilds/linux-omarchy/0668-btintel-pcie-dstate-races.patch b/pkgbuilds/linux-omarchy-eevdf/0668-btintel-pcie-dstate-races.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0668-btintel-pcie-dstate-races.patch rename to pkgbuilds/linux-omarchy-eevdf/0668-btintel-pcie-dstate-races.patch diff --git a/pkgbuilds/linux-omarchy/0668-btintel-pcie-dstate-races.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0668-btintel-pcie-dstate-races.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0668-btintel-pcie-dstate-races.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0668-btintel-pcie-dstate-races.patch.sig diff --git a/pkgbuilds/linux-omarchy/0669-btintel-version-tlv-parse-errors.patch b/pkgbuilds/linux-omarchy-eevdf/0669-btintel-version-tlv-parse-errors.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0669-btintel-version-tlv-parse-errors.patch rename to pkgbuilds/linux-omarchy-eevdf/0669-btintel-version-tlv-parse-errors.patch diff --git a/pkgbuilds/linux-omarchy/0669-btintel-version-tlv-parse-errors.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0669-btintel-version-tlv-parse-errors.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0669-btintel-version-tlv-parse-errors.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0669-btintel-version-tlv-parse-errors.patch.sig diff --git a/pkgbuilds/linux-omarchy/0670-bluetooth-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0670-bluetooth-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0670-bluetooth-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0670-bluetooth-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0670-bluetooth-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0670-bluetooth-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0670-bluetooth-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0670-bluetooth-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0700-pci-target-speed-quirk.patch b/pkgbuilds/linux-omarchy-eevdf/0700-pci-target-speed-quirk.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0700-pci-target-speed-quirk.patch rename to pkgbuilds/linux-omarchy-eevdf/0700-pci-target-speed-quirk.patch diff --git a/pkgbuilds/linux-omarchy/0700-pci-target-speed-quirk.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0700-pci-target-speed-quirk.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0700-pci-target-speed-quirk.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0700-pci-target-speed-quirk.patch.sig diff --git a/pkgbuilds/linux-omarchy/0701-pci-amd-enhanced-atomics.patch b/pkgbuilds/linux-omarchy-eevdf/0701-pci-amd-enhanced-atomics.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0701-pci-amd-enhanced-atomics.patch rename to pkgbuilds/linux-omarchy-eevdf/0701-pci-amd-enhanced-atomics.patch diff --git a/pkgbuilds/linux-omarchy/0701-pci-amd-enhanced-atomics.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0701-pci-amd-enhanced-atomics.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0701-pci-amd-enhanced-atomics.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0701-pci-amd-enhanced-atomics.patch.sig diff --git a/pkgbuilds/linux-omarchy/0702-ahci-jmb585-32bit-dma-revert.patch b/pkgbuilds/linux-omarchy-eevdf/0702-ahci-jmb585-32bit-dma-revert.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0702-ahci-jmb585-32bit-dma-revert.patch rename to pkgbuilds/linux-omarchy-eevdf/0702-ahci-jmb585-32bit-dma-revert.patch diff --git a/pkgbuilds/linux-omarchy/0702-ahci-jmb585-32bit-dma-revert.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0702-ahci-jmb585-32bit-dma-revert.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0702-ahci-jmb585-32bit-dma-revert.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0702-ahci-jmb585-32bit-dma-revert.patch.sig diff --git a/pkgbuilds/linux-omarchy/0703-pci-vmd-scan-bios-enumerated-devices.patch b/pkgbuilds/linux-omarchy-eevdf/0703-pci-vmd-scan-bios-enumerated-devices.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0703-pci-vmd-scan-bios-enumerated-devices.patch rename to pkgbuilds/linux-omarchy-eevdf/0703-pci-vmd-scan-bios-enumerated-devices.patch diff --git a/pkgbuilds/linux-omarchy/0703-pci-vmd-scan-bios-enumerated-devices.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0703-pci-vmd-scan-bios-enumerated-devices.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0703-pci-vmd-scan-bios-enumerated-devices.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0703-pci-vmd-scan-bios-enumerated-devices.patch.sig diff --git a/pkgbuilds/linux-omarchy/0704-pci-vmd-meteor-lake-mtl016-flush.patch b/pkgbuilds/linux-omarchy-eevdf/0704-pci-vmd-meteor-lake-mtl016-flush.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0704-pci-vmd-meteor-lake-mtl016-flush.patch rename to pkgbuilds/linux-omarchy-eevdf/0704-pci-vmd-meteor-lake-mtl016-flush.patch diff --git a/pkgbuilds/linux-omarchy/0704-pci-vmd-meteor-lake-mtl016-flush.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0704-pci-vmd-meteor-lake-mtl016-flush.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0704-pci-vmd-meteor-lake-mtl016-flush.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0704-pci-vmd-meteor-lake-mtl016-flush.patch.sig diff --git a/pkgbuilds/linux-omarchy/0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch b/pkgbuilds/linux-omarchy-eevdf/0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch rename to pkgbuilds/linux-omarchy-eevdf/0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch diff --git a/pkgbuilds/linux-omarchy/0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch.sig diff --git a/pkgbuilds/linux-omarchy-eevdf/0711-iommu-amd-perfopt-support.patch b/pkgbuilds/linux-omarchy-eevdf/0711-iommu-amd-perfopt-support.patch new file mode 100644 index 0000000..4b13fed --- /dev/null +++ b/pkgbuilds/linux-omarchy-eevdf/0711-iommu-amd-perfopt-support.patch @@ -0,0 +1,413 @@ +diff --git a/drivers/iommu/amd/amd_iommu.h b/drivers/iommu/amd/amd_iommu.h +--- a/drivers/iommu/amd/amd_iommu.h ++++ b/drivers/iommu/amd/amd_iommu.h +@@ -48,6 +48,9 @@ extern u8 amd_iommu_hpt_vasize; + extern unsigned long amd_iommu_pgsize_bitmap; + extern bool amd_iommu_hatdis; + ++int amd_iommu_perfopt_clear(struct amd_iommu *iommu); ++int amd_iommu_perfopt_restore(struct amd_iommu *iommu); ++ + /* Protection domain ops */ + void amd_iommu_init_identity_domain(void); + struct protection_domain *protection_domain_alloc(void); +diff --git a/drivers/iommu/amd/amd_iommu_types.h b/drivers/iommu/amd/amd_iommu_types.h +--- a/drivers/iommu/amd/amd_iommu_types.h ++++ b/drivers/iommu/amd/amd_iommu_types.h +@@ -65,6 +65,7 @@ + #define MMIO_MSI_ADDR_LO_OFFSET 0x015C + #define MMIO_MSI_ADDR_HI_OFFSET 0x0160 + #define MMIO_MSI_DATA_OFFSET 0x0164 ++#define MMIO_PERF_OPT_OFFSET 0x016C + #define MMIO_INTCAPXT_EVT_OFFSET 0x0170 + #define MMIO_INTCAPXT_PPR_OFFSET 0x0178 + #define MMIO_INTCAPXT_GALOG_OFFSET 0x0180 +@@ -99,6 +100,8 @@ + #define FEATURE_GLX GENMASK_ULL(15, 14) + #define FEATURE_GAM_VAPIC BIT_ULL(21) + #define FEATURE_PASMAX GENMASK_ULL(36, 32) ++#define FEATURE_PERF_OPT BIT_ULL(45) ++#define PERF_OPT_EN BIT(13) + #define FEATURE_GIOSUP BIT_ULL(48) + #define FEATURE_HASUP BIT_ULL(49) + #define FEATURE_EPHSUP BIT_ULL(50) +@@ -663,6 +666,9 @@ struct amd_iommu { + /* Extended features 2 */ + u64 features2; + ++ /* Devices requesting PerfOpt; the shared PERF_OPT_EN bit is on while >0. Protected by @lock. */ ++ int perfopt_refcount; ++ + /* PCI device id of the IOMMU device */ + u16 devid; + +@@ -824,6 +830,7 @@ struct iommu_dev_data { + u8 ppr :1; /* Enable device PPR support */ + bool use_vapic; /* Enable device to use vapic mode */ + bool defer_attach; ++ bool perfopt; + + struct ratelimit_state rs; /* Ratelimit IOPF messages */ + }; +diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c +--- a/drivers/iommu/amd/init.c ++++ b/drivers/iommu/amd/init.c +@@ -1945,6 +1945,9 @@ static int __init init_iommu_one(struct amd_iommu *iommu, struct ivhd_header *h, + if (!iommu->mmio_base) + return -ENOMEM; + ++ if (amd_iommu_perfopt_clear(iommu)) ++ pr_err("IOMMU%d: failed to clear PerfOpt\n", iommu->index); ++ + return init_iommu_from_acpi(iommu, h); + } + +@@ -3035,10 +3038,46 @@ static void enable_iommus_vapic(void) + #endif + } + ++static int clear_perfopt_all(void) ++{ ++ struct amd_iommu *iommu; ++ int err, ret = 0; ++ ++ for_each_iommu(iommu) { ++ err = amd_iommu_perfopt_clear(iommu); ++ if (err) ++ ret = err; ++ } ++ ++ return ret; ++} ++ ++static int restore_perfopt_all(void) ++{ ++ struct amd_iommu *iommu; ++ int err, ret = 0; ++ ++ for_each_iommu(iommu) { ++ err = amd_iommu_perfopt_restore(iommu); ++ if (err) ++ ret = err; ++ } ++ ++ return ret; ++} ++ + static void disable_iommus(void) + { + struct amd_iommu *iommu; + ++ /* ++ * PerfOpt is an optional performance bit, so a failure to clear it must ++ * not skip the mandatory disable below. This also runs from the void ++ * amd_iommu_disable() shutdown/kexec path, which cannot report an error. ++ */ ++ if (clear_perfopt_all()) ++ pr_err("Failed to clear PerfOpt while disabling IOMMUs\n"); ++ + for_each_iommu(iommu) + iommu_disable(iommu); + +@@ -3064,6 +3103,10 @@ static void amd_iommu_resume(void *data) + for_each_iommu(iommu) + early_enable_iommu(iommu); + ++ /* early_enable_iommu() cleared PERF_OPT_EN; re-assert it from the refcount. */ ++ if (restore_perfopt_all()) ++ pr_err("Failed to restore PerfOpt after IOMMU resume\n"); ++ + iommu_enable_event_buffer(); + amd_iommu_enable_interrupts(); + } +diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c +--- a/drivers/iommu/amd/iommu.c ++++ b/drivers/iommu/amd/iommu.c +@@ -2352,6 +2352,9 @@ static int attach_device(struct device *dev, + if (ret) + goto out; + ++ if (dev_data->perfopt) ++ goto skip_caps; ++ + /* Setup GCR3 table */ + if (pdom_is_sva_capable(domain)) { + ret = init_gcr3_table(dev_data, domain); +@@ -2376,6 +2379,7 @@ static int attach_device(struct device *dev, + pdev_enable_cap_ats(pdev); + } + ++skip_caps: + /* Update data structures */ + dev_data->domain = domain; + spin_lock_irqsave(&domain->lock, flags); +@@ -2444,6 +2448,192 @@ static void detach_device(struct device *dev) + mutex_unlock(&dev_data->mutex); + } + ++/* Program the per-IOMMU PerfOpt enable bit. Caller must hold iommu->lock. */ ++static int __perfopt_write(struct amd_iommu *iommu, bool enable) ++{ ++ u32 old, val, readback; ++ ++ if (!(readq(iommu->mmio_base + MMIO_EXT_FEATURES) & FEATURE_PERF_OPT)) ++ return enable ? -ENODEV : 0; ++ ++ old = readl(iommu->mmio_base + MMIO_PERF_OPT_OFFSET); ++ if (old == U32_MAX) ++ return -EIO; ++ ++ val = enable ? old | PERF_OPT_EN : old & ~PERF_OPT_EN; ++ if (val != old) ++ writel(val, iommu->mmio_base + MMIO_PERF_OPT_OFFSET); ++ readback = readl(iommu->mmio_base + MMIO_PERF_OPT_OFFSET); ++ if (readback == U32_MAX || ++ (readback & PERF_OPT_EN) != (val & PERF_OPT_EN)) ++ return -EIO; ++ return 0; ++} ++ ++/* ++ * PERF_OPT_EN is a single bit shared by every device behind @iommu, so it is ++ * reference counted: armed on the first requesting device, cleared on the last. ++ */ ++static int perfopt_get(struct amd_iommu *iommu) ++{ ++ unsigned long flags; ++ int ret = 0; ++ ++ if (!iommu->mmio_base) ++ return 0; ++ ++ raw_spin_lock_irqsave(&iommu->lock, flags); ++ if (iommu->perfopt_refcount == 0) { ++ ret = __perfopt_write(iommu, true); ++ if (ret) ++ goto out; ++ } ++ iommu->perfopt_refcount++; ++out: ++ raw_spin_unlock_irqrestore(&iommu->lock, flags); ++ return ret; ++} ++ ++static int perfopt_put(struct amd_iommu *iommu) ++{ ++ unsigned long flags; ++ int ret = 0; ++ ++ if (!iommu->mmio_base) ++ return 0; ++ ++ raw_spin_lock_irqsave(&iommu->lock, flags); ++ if (iommu->perfopt_refcount > 0 && --iommu->perfopt_refcount == 0) ++ ret = __perfopt_write(iommu, false); ++ raw_spin_unlock_irqrestore(&iommu->lock, flags); ++ return ret; ++} ++ ++/* ++ * Force PERF_OPT_EN off without touching the refcount (used on init, shutdown, ++ * and suspend). The count is preserved so amd_iommu_perfopt_restore() can ++ * re-arm on resume. ++ */ ++int amd_iommu_perfopt_clear(struct amd_iommu *iommu) ++{ ++ unsigned long flags; ++ int ret; ++ ++ if (!iommu->mmio_base) ++ return 0; ++ ++ raw_spin_lock_irqsave(&iommu->lock, flags); ++ ret = __perfopt_write(iommu, false); ++ raw_spin_unlock_irqrestore(&iommu->lock, flags); ++ return ret; ++} ++ ++/* ++ * Re-assert PERF_OPT_EN from the refcount after the hardware was reprogrammed on ++ * resume, so devices armed before suspend keep the optimization without each ++ * consumer driver re-arming. ++ */ ++int amd_iommu_perfopt_restore(struct amd_iommu *iommu) ++{ ++ unsigned long flags; ++ int ret; ++ ++ if (!iommu->mmio_base) ++ return 0; ++ ++ raw_spin_lock_irqsave(&iommu->lock, flags); ++ ret = __perfopt_write(iommu, iommu->perfopt_refcount > 0); ++ raw_spin_unlock_irqrestore(&iommu->lock, flags); ++ return ret; ++} ++ ++int amd_iommu_enable_perfopt(struct pci_dev *pdev) ++{ ++ struct iommu_dev_data *dev_data = dev_iommu_priv_get(&pdev->dev); ++ struct amd_iommu *iommu = rlookup_amd_iommu(&pdev->dev); ++ struct protection_domain *domain; ++ int ret; ++ ++ if (!iommu || !dev_data) ++ return -ENODEV; ++ ++ if (!(iommu->features & FEATURE_PERF_OPT)) ++ return -ENODEV; ++ ++ domain = dev_data->domain; ++ if (!domain) ++ return -ENODEV; ++ ++ /* Already armed for this device (e.g. re-entry on resume). */ ++ if (dev_data->perfopt) ++ return 0; ++ ++ /* ++ * The bit is only architecturally valid while the device is untranslated: ++ * identity domain with ATS/PRI/PASID off. The identity domain is ++ * SVA-capable so attach_device() enabled ATS/PRI/PASID and built a GCR3 ++ * table. Re-home the device onto the same identity domain with ++ * perfopt set, so the attach_device() skip_caps path leaves ++ * ATS/PRI/PASID off and no GCR3 table. This follows the detach/attach ++ * pattern used by amd_iommu_attach_device(). ++ * ++ * Locking: this and amd_iommu_disable_perfopt() run only from the ++ * consumer driver's bind/unbind path. group->mutex is not exposed to ++ * drivers, but a device bound to its native driver cannot have its domain ++ * changed concurrently by the core (VFIO ownership is mutually exclusive; ++ * sysfs domain changes require an unused group), so the detach/attach pair ++ * is serialized without it. ++ */ ++ dev_data->perfopt = true; ++ detach_device(&pdev->dev); ++ ret = attach_device(&pdev->dev, domain); ++ if (ret) ++ goto err_restore; ++ ++ ret = perfopt_get(iommu); ++ if (ret) ++ goto err_rearm; ++ ++ dev_info_once(&pdev->dev, "PerfOpt armed on IOMMU%d\n", iommu->index); ++ return 0; ++ ++err_rearm: ++ detach_device(&pdev->dev); ++err_restore: ++ dev_data->perfopt = false; ++ if (attach_device(&pdev->dev, domain)) ++ pci_err(pdev, "failed to restore state after PerfOpt setup; device left detached\n"); ++ dev_err_once(&pdev->dev, "PerfOpt failed to arm on IOMMU%d (%d)\n", ++ iommu->index, ret); ++ return ret; ++} ++EXPORT_SYMBOL_GPL(amd_iommu_enable_perfopt); ++ ++void amd_iommu_disable_perfopt(struct pci_dev *pdev) ++{ ++ struct iommu_dev_data *dev_data = dev_iommu_priv_get(&pdev->dev); ++ struct amd_iommu *iommu = rlookup_amd_iommu(&pdev->dev); ++ struct protection_domain *domain; ++ ++ if (!iommu || !dev_data || !dev_data->perfopt || !dev_data->domain) ++ return; ++ ++ if (WARN_ON(perfopt_put(iommu))) ++ pci_err(pdev, "failed to clear PerfOpt\n"); ++ ++ /* ++ * Restore ATS/PRI/PASID (and thus SVA) by re-homing the device onto its ++ * identity domain with the flag cleared, so a later bind without PerfOpt ++ * sees a normally-capable device. See the locking note in ++ * amd_iommu_enable_perfopt(). ++ */ ++ domain = dev_data->domain; ++ dev_data->perfopt = false; ++ detach_device(&pdev->dev); ++ if (attach_device(&pdev->dev, domain)) ++ pci_err(pdev, "failed to restore caps after PerfOpt disable\n"); ++} ++EXPORT_SYMBOL_GPL(amd_iommu_disable_perfopt); + static struct iommu_device *amd_iommu_probe_device(struct device *dev) + { + struct iommu_device *iommu_dev; +@@ -2511,6 +2701,14 @@ static struct iommu_device *amd_iommu_probe_device(struct device *dev) + static void amd_iommu_release_device(struct device *dev) + { + struct iommu_dev_data *dev_data = dev_iommu_priv_get(dev); ++ struct amd_iommu *iommu = get_amd_iommu_from_dev_data(dev_data); ++ ++ if (dev_data->perfopt) { ++ if (WARN_ON(perfopt_put(iommu))) ++ dev_err(dev, "IOMMU%d: failed to clear PerfOpt on release\n", ++ iommu->index); ++ dev_data->perfopt = false; ++ } + + WARN_ON(dev_data->domain); + +@@ -2885,6 +3083,19 @@ static int blocked_domain_attach_device(struct iommu_domain *domain, + struct iommu_domain *old) + { + struct iommu_dev_data *dev_data = dev_iommu_priv_get(dev); ++ struct amd_iommu *iommu = get_amd_iommu_from_dev_data(dev_data); ++ ++ /* ++ * blocked_domain is also the .release_domain, so this is the normal ++ * teardown path: drop the reference and clear the flag here too, and ++ * don't fail teardown if the WARN-guarded write doesn't stick. ++ */ ++ if (dev_data->perfopt) { ++ if (WARN_ON(perfopt_put(iommu))) ++ dev_err(dev, "IOMMU%d: failed to clear PerfOpt for blocked domain\n", ++ iommu->index); ++ dev_data->perfopt = false; ++ } + + if (dev_data->domain) + detach_device(dev); +@@ -2953,6 +3164,9 @@ static int amd_iommu_attach_device(struct iommu_domain *dom, struct device *dev, + struct amd_iommu *iommu = get_amd_iommu_from_dev(dev); + int ret; + ++ if (dev_data->perfopt && !pdom_is_in_pt_mode(domain)) ++ return -EBUSY; ++ + /* + * Skip attach device to domain if new domain is same as + * devices current domain +diff --git a/include/linux/amd-iommu.h b/include/linux/amd-iommu.h +--- a/include/linux/amd-iommu.h ++++ b/include/linux/amd-iommu.h +@@ -11,11 +11,11 @@ + #include + + struct amd_iommu; ++struct pci_dev; + + #ifdef CONFIG_AMD_IOMMU + + struct task_struct; +-struct pci_dev; + + extern void amd_iommu_detect(void); + +@@ -76,4 +76,15 @@ static inline int amd_iommu_snp_disable(void) { return 0; } + static inline bool amd_iommu_sev_tio_supported(void) { return false; } + #endif + ++#ifdef CONFIG_AMD_IOMMU ++int amd_iommu_enable_perfopt(struct pci_dev *pdev); ++void amd_iommu_disable_perfopt(struct pci_dev *pdev); ++#else ++static inline int amd_iommu_enable_perfopt(struct pci_dev *pdev) ++{ ++ return 0; ++} ++static inline void amd_iommu_disable_perfopt(struct pci_dev *pdev) { } ++#endif ++ + #endif /* _ASM_X86_AMD_IOMMU_H */ diff --git a/pkgbuilds/linux-omarchy-eevdf/0711-iommu-amd-perfopt-support.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0711-iommu-amd-perfopt-support.patch.sig new file mode 100644 index 0000000..cd3768f Binary files /dev/null and b/pkgbuilds/linux-omarchy-eevdf/0711-iommu-amd-perfopt-support.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-eevdf/0712-drm-amdgpu-perfopt-in-identity-domain.patch b/pkgbuilds/linux-omarchy-eevdf/0712-drm-amdgpu-perfopt-in-identity-domain.patch new file mode 100644 index 0000000..5c74198 --- /dev/null +++ b/pkgbuilds/linux-omarchy-eevdf/0712-drm-amdgpu-perfopt-in-identity-domain.patch @@ -0,0 +1,128 @@ +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -160,6 +160,7 @@ struct amdgpu_watchdog_timer { + * Modules parameters. + */ + extern int amdgpu_modeset; ++extern int amdgpu_iommu_perfopt; + extern unsigned int amdgpu_vram_limit; + extern int amdgpu_vis_vram_limit; + extern int amdgpu_gart_size; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -3842,6 +3843,28 @@ amdgpu_device_should_register_switcheroo(struct amdgpu_device *adev, bool px) + apple_gmux_detect(NULL, NULL))); + } + ++static inline bool amdgpu_device_identity(struct amdgpu_device *adev) ++{ ++ struct pci_dev *pdev = adev->pdev; ++ struct iommu_domain *domain = iommu_get_domain_for_dev(&pdev->dev); ++ ++ if (!domain) ++ return false; ++ ++ return domain->type == IOMMU_DOMAIN_IDENTITY; ++} ++ ++static bool amdgpu_device_use_perfopt(struct amdgpu_device *adev) ++{ ++ if (amdgpu_iommu_perfopt == 0) ++ return false; ++ ++ if (!(adev->flags & AMD_IS_APU)) ++ return false; ++ ++ return amdgpu_device_identity(adev); ++} ++ + /** + * amdgpu_device_init - initialize the driver + * +@@ -4048,6 +4071,16 @@ int amdgpu_device_init(struct amdgpu_device *adev, + if (r) + return r; + ++ if (amdgpu_device_use_perfopt(adev)) { ++ int perfopt_ret = amd_iommu_enable_perfopt(pdev); ++ ++ /* Optional optimization; a failure to arm it must not abort probe. */ ++ if (perfopt_ret) ++ dev_warn(adev->dev, ++ "Failed to enable IOMMU PerfOpt (%d); continuing without it\n", ++ perfopt_ret); ++ } ++ + /* + * No need to remove conflicting FBs for non-display class devices. + * This prevents the sysfb from being freed accidently. +@@ -4416,6 +4449,9 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev) + + amdgpu_gart_dummy_page_fini(adev); + ++ if (amdgpu_device_use_perfopt(adev)) ++ amd_iommu_disable_perfopt(adev->pdev); ++ + if (pci_dev_is_disconnected(adev->pdev)) + amdgpu_device_unmap_mmio(adev); + +@@ -4779,6 +4815,20 @@ int amdgpu_device_resume(struct drm_device *dev, bool notify_clients) + if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) + return 0; + ++ if (amdgpu_device_use_perfopt(adev)) { ++ int perfopt_ret = amd_iommu_enable_perfopt(adev->pdev); ++ ++ /* ++ * Must not return on failure: a bare return would leak the ++ * SR-IOV VF exclusive-mode acquisition taken above (released ++ * via the exit: path). ++ */ ++ if (perfopt_ret) ++ dev_warn(adev->dev, ++ "Failed to enable IOMMU PerfOpt (%d); continuing without it\n", ++ perfopt_ret); ++ } ++ + if (adev->in_s0ix) + amdgpu_dpm_gfx_state_change(adev, sGpuChangeState_D0Entry); + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +@@ -185,6 +185,7 @@ char *amdgpu_disable_cu; + char *amdgpu_virtual_display; + int amdgpu_enforce_isolation = -1; + int amdgpu_modeset = -1; ++int amdgpu_iommu_perfopt = -1; + + /* Specifies the default granularity for SVM, used in buffer + * migration and restoration of backing memory when handling +@@ -393,6 +394,17 @@ module_param_named(fw_load_type, amdgpu_fw_load_type, int, 0444); + MODULE_PARM_DESC(aspm, "ASPM support (1 = enable, 0 = disable, -1 = auto)"); + module_param_named(aspm, amdgpu_aspm, int, 0444); + ++/** ++ * DOC: iommu_perfopt (int) ++ * Control the AMD IOMMU PerfOpt DMA-latency optimization ++ * (0 = disable; -1 = enable on supported devices). ++ * This arms the IOMMU PerfOpt control (IOMMU spec, MMIO Offset 016Ch, EFR PerfOptSup / PerfOptEn) ++ * Arming it disables ATS, PRI, PASID and SVA for the GPU and removes IOMMU DMA containment for it, ++ * trading isolation for lower DMA latency. ++ */ ++MODULE_PARM_DESC(iommu_perfopt, "Control IOMMU PerfOpt DMA-latency optimization (-1 = enable on supported devices, 0 = disable)"); ++module_param_named(iommu_perfopt, amdgpu_iommu_perfopt, int, 0444); ++ + /** + * DOC: runpm (int) + * Override for runtime power management control for dGPUs. The amdgpu driver can dynamically power down diff --git a/pkgbuilds/linux-omarchy-eevdf/0712-drm-amdgpu-perfopt-in-identity-domain.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0712-drm-amdgpu-perfopt-in-identity-domain.patch.sig new file mode 100644 index 0000000..59f21e5 Binary files /dev/null and b/pkgbuilds/linux-omarchy-eevdf/0712-drm-amdgpu-perfopt-in-identity-domain.patch.sig differ diff --git a/pkgbuilds/linux-omarchy/0740-hwmon-updates.patch b/pkgbuilds/linux-omarchy-eevdf/0740-hwmon-updates.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0740-hwmon-updates.patch rename to pkgbuilds/linux-omarchy-eevdf/0740-hwmon-updates.patch diff --git a/pkgbuilds/linux-omarchy/0740-hwmon-updates.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0740-hwmon-updates.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0740-hwmon-updates.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0740-hwmon-updates.patch.sig diff --git a/pkgbuilds/linux-omarchy/0741-hwmon-fixes-1.patch b/pkgbuilds/linux-omarchy-eevdf/0741-hwmon-fixes-1.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0741-hwmon-fixes-1.patch rename to pkgbuilds/linux-omarchy-eevdf/0741-hwmon-fixes-1.patch diff --git a/pkgbuilds/linux-omarchy/0741-hwmon-fixes-1.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0741-hwmon-fixes-1.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0741-hwmon-fixes-1.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0741-hwmon-fixes-1.patch.sig diff --git a/pkgbuilds/linux-omarchy/0742-hwmon-fixes-2.patch b/pkgbuilds/linux-omarchy-eevdf/0742-hwmon-fixes-2.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0742-hwmon-fixes-2.patch rename to pkgbuilds/linux-omarchy-eevdf/0742-hwmon-fixes-2.patch diff --git a/pkgbuilds/linux-omarchy/0742-hwmon-fixes-2.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0742-hwmon-fixes-2.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0742-hwmon-fixes-2.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0742-hwmon-fixes-2.patch.sig diff --git a/pkgbuilds/linux-omarchy/0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch b/pkgbuilds/linux-omarchy-eevdf/0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch rename to pkgbuilds/linux-omarchy-eevdf/0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch diff --git a/pkgbuilds/linux-omarchy/0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch.sig diff --git a/pkgbuilds/linux-omarchy/0800-platform-updates.patch b/pkgbuilds/linux-omarchy-eevdf/0800-platform-updates.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0800-platform-updates.patch rename to pkgbuilds/linux-omarchy-eevdf/0800-platform-updates.patch diff --git a/pkgbuilds/linux-omarchy/0800-platform-updates.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0800-platform-updates.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0800-platform-updates.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0800-platform-updates.patch.sig diff --git a/pkgbuilds/linux-omarchy/0801-amd-pmf-util-unbind-use-after-free.patch b/pkgbuilds/linux-omarchy-eevdf/0801-amd-pmf-util-unbind-use-after-free.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0801-amd-pmf-util-unbind-use-after-free.patch rename to pkgbuilds/linux-omarchy-eevdf/0801-amd-pmf-util-unbind-use-after-free.patch diff --git a/pkgbuilds/linux-omarchy/0801-amd-pmf-util-unbind-use-after-free.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0801-amd-pmf-util-unbind-use-after-free.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0801-amd-pmf-util-unbind-use-after-free.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0801-amd-pmf-util-unbind-use-after-free.patch.sig diff --git a/pkgbuilds/linux-omarchy/0802-platform-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0802-platform-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0802-platform-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0802-platform-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0802-platform-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0802-platform-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0802-platform-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0802-platform-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy-eevdf/0803-acpi-battery-hook-api-acpi-prefix.patch b/pkgbuilds/linux-omarchy-eevdf/0803-acpi-battery-hook-api-acpi-prefix.patch new file mode 100644 index 0000000..c3246f0 --- /dev/null +++ b/pkgbuilds/linux-omarchy-eevdf/0803-acpi-battery-hook-api-acpi-prefix.patch @@ -0,0 +1,412 @@ +diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c +--- a/drivers/acpi/battery.c ++++ b/drivers/acpi/battery.c +@@ -736,7 +736,7 @@ static LIST_HEAD(acpi_battery_list); + static LIST_HEAD(battery_hook_list); + static DEFINE_MUTEX(hook_mutex); + +-static void battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) ++static void acpi_battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) + { + struct acpi_battery *battery; + +@@ -753,7 +753,7 @@ static void battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) + pr_info("hook unregistered: %s\n", hook->name); + } + +-void battery_hook_unregister(struct acpi_battery_hook *hook) ++void acpi_battery_hook_unregister(struct acpi_battery_hook *hook) + { + mutex_lock(&hook_mutex); + /* +@@ -762,13 +762,13 @@ void battery_hook_unregister(struct acpi_battery_hook *hook) + * adding a new battery. + */ + if (!list_empty(&hook->list)) +- battery_hook_unregister_unlocked(hook); ++ acpi_battery_hook_unregister_unlocked(hook); + + mutex_unlock(&hook_mutex); + } +-EXPORT_SYMBOL_GPL(battery_hook_unregister); ++EXPORT_SYMBOL_GPL(acpi_battery_hook_unregister); + +-void battery_hook_register(struct acpi_battery_hook *hook) ++void acpi_battery_hook_register(struct acpi_battery_hook *hook) + { + struct acpi_battery *battery; + +@@ -789,7 +789,7 @@ void battery_hook_register(struct acpi_battery_hook *hook) + * hooks. + */ + pr_err("hook failed to load: %s", hook->name); +- battery_hook_unregister_unlocked(hook); ++ acpi_battery_hook_unregister_unlocked(hook); + goto end; + } + +@@ -799,22 +799,22 @@ void battery_hook_register(struct acpi_battery_hook *hook) + end: + mutex_unlock(&hook_mutex); + } +-EXPORT_SYMBOL_GPL(battery_hook_register); ++EXPORT_SYMBOL_GPL(acpi_battery_hook_register); + +-static void devm_battery_hook_unregister(void *data) ++static void devm_acpi_battery_hook_unregister(void *data) + { + struct acpi_battery_hook *hook = data; + +- battery_hook_unregister(hook); ++ acpi_battery_hook_unregister(hook); + } + +-int devm_battery_hook_register(struct device *dev, struct acpi_battery_hook *hook) ++int devm_acpi_battery_hook_register(struct device *dev, struct acpi_battery_hook *hook) + { +- battery_hook_register(hook); ++ acpi_battery_hook_register(hook); + +- return devm_add_action_or_reset(dev, devm_battery_hook_unregister, hook); ++ return devm_add_action_or_reset(dev, devm_acpi_battery_hook_unregister, hook); + } +-EXPORT_SYMBOL_GPL(devm_battery_hook_register); ++EXPORT_SYMBOL_GPL(devm_acpi_battery_hook_register); + + /* + * This function gets called right after the battery sysfs +@@ -843,7 +843,7 @@ static void battery_hook_add_battery(struct acpi_battery *battery) + */ + pr_err("error in hook, unloading: %s", + hook_node->name); +- battery_hook_unregister_unlocked(hook_node); ++ acpi_battery_hook_unregister_unlocked(hook_node); + } + } + mutex_unlock(&hook_mutex); +@@ -876,7 +876,7 @@ static void __exit battery_hook_exit(void) + * need to remove the hooks. + */ + list_for_each_entry_safe(hook, ptr, &battery_hook_list, list) { +- battery_hook_unregister(hook); ++ acpi_battery_hook_unregister(hook); + } + mutex_destroy(&hook_mutex); + } +diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c +--- a/drivers/platform/x86/asus-wmi.c ++++ b/drivers/platform/x86/asus-wmi.c +@@ -1681,14 +1681,14 @@ static void asus_wmi_battery_init(struct asus_wmi *asus) + asus->battery_rsoc_available = false; + if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_RSOC)) { + asus->battery_rsoc_available = true; +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + } + } + + static void asus_wmi_battery_exit(struct asus_wmi *asus) + { + if (asus->battery_rsoc_available) +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + } + + /* LEDs ***********************************************************************/ +diff --git a/drivers/platform/x86/ayaneo-ec.c b/drivers/platform/x86/ayaneo-ec.c +--- a/drivers/platform/x86/ayaneo-ec.c ++++ b/drivers/platform/x86/ayaneo-ec.c +@@ -493,7 +493,7 @@ static int ayaneo_ec_probe(struct platform_device *pdev) + data->battery_hook.add_battery = ayaneo_add_battery; + data->battery_hook.remove_battery = ayaneo_remove_battery; + data->battery_hook.name = "Ayaneo Battery"; +- ret = devm_battery_hook_register(&pdev->dev, &data->battery_hook); ++ ret = devm_acpi_battery_hook_register(&pdev->dev, &data->battery_hook); + if (ret) + return ret; + } +diff --git a/drivers/platform/x86/dell/dell-laptop.c b/drivers/platform/x86/dell/dell-laptop.c +--- a/drivers/platform/x86/dell/dell-laptop.c ++++ b/drivers/platform/x86/dell/dell-laptop.c +@@ -2446,13 +2446,13 @@ static void __init dell_battery_init(struct device *dev) + battery_supported_modes = battery_get_supported_modes(); + + if (battery_supported_modes != 0) +- battery_hook_register(&dell_battery_hook); ++ acpi_battery_hook_register(&dell_battery_hook); + } + + static void dell_battery_exit(void) + { + if (battery_supported_modes != 0) +- battery_hook_unregister(&dell_battery_hook); ++ acpi_battery_hook_unregister(&dell_battery_hook); + } + + static int __init dell_init(void) +diff --git a/drivers/platform/x86/dell/dell-wmi-ddv.c b/drivers/platform/x86/dell/dell-wmi-ddv.c +--- a/drivers/platform/x86/dell/dell-wmi-ddv.c ++++ b/drivers/platform/x86/dell/dell-wmi-ddv.c +@@ -972,7 +972,7 @@ static int dell_wmi_ddv_battery_add(struct dell_wmi_ddv_data *data) + data->eppid_attr.attr.mode = 0444; + data->eppid_attr.show = eppid_show; + +- return devm_battery_hook_register(&data->wdev->dev, &data->hook); ++ return devm_acpi_battery_hook_register(&data->wdev->dev, &data->hook); + } + + static int dell_wmi_ddv_buffer_read(struct seq_file *seq, enum dell_ddv_method method) +diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c +--- a/drivers/platform/x86/fujitsu-laptop.c ++++ b/drivers/platform/x86/fujitsu-laptop.c +@@ -267,7 +267,7 @@ static int fujitsu_battery_charge_control_add(struct device *dev) + return -ENODEV; + + priv->charge_control_supported = true; +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + + return 0; + } +@@ -277,7 +277,7 @@ static void fujitsu_battery_charge_control_remove(struct device *dev) + struct fujitsu_laptop *priv = dev_get_drvdata(dev); + + if (priv->charge_control_supported) +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + } + + /* Hardware access for LCD brightness control */ +diff --git a/drivers/platform/x86/huawei-wmi.c b/drivers/platform/x86/huawei-wmi.c +--- a/drivers/platform/x86/huawei-wmi.c ++++ b/drivers/platform/x86/huawei-wmi.c +@@ -512,7 +512,7 @@ static void huawei_wmi_battery_setup(struct device *dev) + return; + } + +- battery_hook_register(&huawei_wmi_battery_hook); ++ acpi_battery_hook_register(&huawei_wmi_battery_hook); + device_create_file(dev, &dev_attr_charge_control_thresholds); + } + +@@ -521,7 +521,7 @@ static void huawei_wmi_battery_exit(struct device *dev) + struct huawei_wmi *huawei = dev_get_drvdata(dev); + + if (huawei->battery_available) { +- battery_hook_unregister(&huawei_wmi_battery_hook); ++ acpi_battery_hook_unregister(&huawei_wmi_battery_hook); + device_remove_file(dev, &dev_attr_charge_control_thresholds); + } + } +diff --git a/drivers/platform/x86/lenovo/ideapad-laptop.c b/drivers/platform/x86/lenovo/ideapad-laptop.c +--- a/drivers/platform/x86/lenovo/ideapad-laptop.c ++++ b/drivers/platform/x86/lenovo/ideapad-laptop.c +@@ -2197,8 +2197,8 @@ static int ideapad_check_features(struct ideapad_private *priv) + priv->battery_hook.remove_battery = ideapad_battery_remove; + priv->battery_hook.name = "Ideapad Battery Extension"; + +- err = devm_battery_hook_register(&priv->platform_device->dev, +- &priv->battery_hook); ++ err = devm_acpi_battery_hook_register(&priv->platform_device->dev, ++ &priv->battery_hook); + if (err) + return err; + } +diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c +--- a/drivers/platform/x86/lenovo/thinkpad_acpi.c ++++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c +@@ -10021,13 +10021,13 @@ static int __init tpacpi_battery_init(struct ibm_init_struct *ibm) + battery_quirk_table, + ARRAY_SIZE(battery_quirk_table)); + +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + return 0; + } + + static void tpacpi_battery_exit(void) + { +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + } + + static struct ibm_struct battery_driver_data = { +diff --git a/drivers/platform/x86/lenovo/wmi-other.c b/drivers/platform/x86/lenovo/wmi-other.c +--- a/drivers/platform/x86/lenovo/wmi-other.c ++++ b/drivers/platform/x86/lenovo/wmi-other.c +@@ -946,7 +946,7 @@ static void lwmi_om_psy_ext_init(struct lwmi_om_priv *priv) + priv->battery_hook.name = "Lenovo WMI Other Battery Extension"; + priv->bh_registered = true; + +- battery_hook_register(&priv->battery_hook); ++ acpi_battery_hook_register(&priv->battery_hook); + } + + /** +@@ -960,7 +960,7 @@ static void lwmi_om_psy_remove(struct lwmi_om_priv *priv) + if (!priv->bh_registered) + return; + +- battery_hook_unregister(&priv->battery_hook); ++ acpi_battery_hook_unregister(&priv->battery_hook); + priv->bh_registered = false; + } + +diff --git a/drivers/platform/x86/lg-laptop.c b/drivers/platform/x86/lg-laptop.c +--- a/drivers/platform/x86/lg-laptop.c ++++ b/drivers/platform/x86/lg-laptop.c +@@ -1053,7 +1053,7 @@ static int acpi_probe(struct platform_device *pdev) + if (ret) + goto out_platform_device; + +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + + return 0; + +@@ -1068,7 +1068,7 @@ static void acpi_remove(struct platform_device *pdev) + { + sysfs_remove_group(&pf_device->dev.kobj, &dev_attribute_group); + +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + platform_device_unregister(pf_device); + pf_device = NULL; + platform_driver_unregister(&pf_driver); +diff --git a/drivers/platform/x86/msi-ec.c b/drivers/platform/x86/msi-ec.c +--- a/drivers/platform/x86/msi-ec.c ++++ b/drivers/platform/x86/msi-ec.c +@@ -1428,13 +1428,13 @@ static int __init msi_ec_init(void) + if (result < 0) + return result; + +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + return 0; + } + + static void __exit msi_ec_exit(void) + { +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + } + + MODULE_LICENSE("GPL"); +diff --git a/drivers/platform/x86/oxpec.c b/drivers/platform/x86/oxpec.c +--- a/drivers/platform/x86/oxpec.c ++++ b/drivers/platform/x86/oxpec.c +@@ -956,7 +956,7 @@ static int oxp_platform_probe(struct platform_device *pdev) + return PTR_ERR(hwdev); + + if (oxp_psy_ext_supported()) { +- ret = devm_battery_hook_register(dev, &battery_hook); ++ ret = devm_acpi_battery_hook_register(dev, &battery_hook); + if (ret) + return ret; + } +diff --git a/drivers/platform/x86/samsung-galaxybook.c b/drivers/platform/x86/samsung-galaxybook.c +--- a/drivers/platform/x86/samsung-galaxybook.c ++++ b/drivers/platform/x86/samsung-galaxybook.c +@@ -549,7 +549,8 @@ static int galaxybook_battery_threshold_init(struct samsung_galaxybook *galaxybo + galaxybook->battery_hook.remove_battery = galaxybook_battery_remove; + galaxybook->battery_hook.name = "Samsung Galaxy Book Battery Extension"; + +- return devm_battery_hook_register(&galaxybook->platform->dev, &galaxybook->battery_hook); ++ return devm_acpi_battery_hook_register(&galaxybook->platform->dev, ++ &galaxybook->battery_hook); + } + + /* +diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c +--- a/drivers/platform/x86/samsung-laptop.c ++++ b/drivers/platform/x86/samsung-laptop.c +@@ -1142,8 +1142,8 @@ static int __init samsung_battery_hook_init(struct samsung_laptop *samsung) + samsung->battery_hook.add_battery = samsung_battery_add; + samsung->battery_hook.remove_battery = samsung_battery_remove; + samsung->battery_hook.name = "Samsung Battery Extension"; +- retval = devm_battery_hook_register(&samsung->platform_device->dev, +- &samsung->battery_hook); ++ retval = devm_acpi_battery_hook_register(&samsung->platform_device->dev, ++ &samsung->battery_hook); + } + + return retval; +diff --git a/drivers/platform/x86/system76_acpi.c b/drivers/platform/x86/system76_acpi.c +--- a/drivers/platform/x86/system76_acpi.c ++++ b/drivers/platform/x86/system76_acpi.c +@@ -288,12 +288,12 @@ static struct acpi_battery_hook system76_battery_hook = { + + static void system76_battery_init(void) + { +- battery_hook_register(&system76_battery_hook); ++ acpi_battery_hook_register(&system76_battery_hook); + } + + static void system76_battery_exit(void) + { +- battery_hook_unregister(&system76_battery_hook); ++ acpi_battery_hook_unregister(&system76_battery_hook); + } + + // Get the airplane mode LED brightness +diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c +--- a/drivers/platform/x86/toshiba_acpi.c ++++ b/drivers/platform/x86/toshiba_acpi.c +@@ -3301,7 +3301,7 @@ static void toshiba_acpi_remove(struct platform_device *pdev) + } + + if (dev->battery_charge_mode_supported) +- battery_hook_unregister(&battery_hook); ++ acpi_battery_hook_unregister(&battery_hook); + + if (toshiba_acpi) + toshiba_acpi = NULL; +@@ -3566,7 +3566,7 @@ static int toshiba_acpi_probe(struct platform_device *pdev) + * set, this must be done after toshiba_acpi is assigned. + */ + if (dev->battery_charge_mode_supported) +- battery_hook_register(&battery_hook); ++ acpi_battery_hook_register(&battery_hook); + + return 0; + +diff --git a/drivers/platform/x86/uniwill/uniwill-acpi.c b/drivers/platform/x86/uniwill/uniwill-acpi.c +--- a/drivers/platform/x86/uniwill/uniwill-acpi.c ++++ b/drivers/platform/x86/uniwill/uniwill-acpi.c +@@ -2165,7 +2165,7 @@ static int uniwill_battery_init(struct uniwill_data *data) + data->hook.add_battery = uniwill_add_battery; + data->hook.remove_battery = uniwill_remove_battery; + +- return devm_battery_hook_register(data->dev, &data->hook); ++ return devm_acpi_battery_hook_register(data->dev, &data->hook); + } + + static int uniwill_notifier_call(struct notifier_block *nb, unsigned long action, void *dummy) +diff --git a/drivers/power/supply/cros_charge-control.c b/drivers/power/supply/cros_charge-control.c +--- a/drivers/power/supply/cros_charge-control.c ++++ b/drivers/power/supply/cros_charge-control.c +@@ -315,7 +315,7 @@ static int cros_chctl_probe(struct platform_device *pdev) + if (ret < 0) + return ret; + +- return devm_battery_hook_register(dev, &priv->battery_hook); ++ return devm_acpi_battery_hook_register(dev, &priv->battery_hook); + } + + static const struct platform_device_id cros_chctl_id[] = { +diff --git a/include/acpi/battery.h b/include/acpi/battery.h +--- a/include/acpi/battery.h ++++ b/include/acpi/battery.h +@@ -18,8 +18,9 @@ struct acpi_battery_hook { + struct list_head list; + }; + +-void battery_hook_register(struct acpi_battery_hook *hook); +-void battery_hook_unregister(struct acpi_battery_hook *hook); +-int devm_battery_hook_register(struct device *dev, struct acpi_battery_hook *hook); ++void acpi_battery_hook_register(struct acpi_battery_hook *hook); ++void acpi_battery_hook_unregister(struct acpi_battery_hook *hook); ++int devm_acpi_battery_hook_register(struct device *dev, ++ struct acpi_battery_hook *hook); + + #endif diff --git a/pkgbuilds/linux-omarchy-eevdf/0803-acpi-battery-hook-api-acpi-prefix.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0803-acpi-battery-hook-api-acpi-prefix.patch.sig new file mode 100644 index 0000000..84b7206 Binary files /dev/null and b/pkgbuilds/linux-omarchy-eevdf/0803-acpi-battery-hook-api-acpi-prefix.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-eevdf/0804-acpi-battery-unified-hooks-acpi-sbs.patch b/pkgbuilds/linux-omarchy-eevdf/0804-acpi-battery-unified-hooks-acpi-sbs.patch new file mode 100644 index 0000000..a50095e --- /dev/null +++ b/pkgbuilds/linux-omarchy-eevdf/0804-acpi-battery-unified-hooks-acpi-sbs.patch @@ -0,0 +1,472 @@ +diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig +--- a/drivers/acpi/Kconfig ++++ b/drivers/acpi/Kconfig +@@ -171,8 +171,12 @@ config ACPI_AC + To compile this driver as a module, choose M here: + the module will be called ac. + ++config ACPI_BATTERY_HOOKS ++ tristate ++ + config ACPI_BATTERY + tristate "Battery" ++ select ACPI_BATTERY_HOOKS + select POWER_SUPPLY + default y + help +@@ -445,6 +449,7 @@ config ACPI_HOTPLUG_IOAPIC + config ACPI_SBS + tristate "Smart Battery System" + depends on X86 && ACPI_EC ++ select ACPI_BATTERY_HOOKS + select POWER_SUPPLY + help + This driver supports the Smart Battery System, another +diff --git a/drivers/acpi/Makefile b/drivers/acpi/Makefile +--- a/drivers/acpi/Makefile ++++ b/drivers/acpi/Makefile +@@ -97,6 +97,7 @@ obj-$(CONFIG_ACPI_NHLT) += nhlt.o + obj-$(CONFIG_ACPI_NUMA) += numa/ + obj-$(CONFIG_ACPI) += acpi_memhotplug.o + obj-$(CONFIG_ACPI_HOTPLUG_IOAPIC) += ioapic.o ++obj-$(CONFIG_ACPI_BATTERY_HOOKS) += battery_hooks.o + obj-$(CONFIG_ACPI_BATTERY) += battery.o + obj-$(CONFIG_ACPI_SBS) += sbshc.o + obj-$(CONFIG_ACPI_SBS) += sbs.o +diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c +--- a/drivers/acpi/battery.c ++++ b/drivers/acpi/battery.c +@@ -48,6 +48,7 @@ MODULE_AUTHOR("Paul Diefenbaugh"); + MODULE_AUTHOR("Alexey Starikovskiy "); + MODULE_DESCRIPTION("ACPI Battery Driver"); + MODULE_LICENSE("GPL"); ++MODULE_IMPORT_NS("ACPI_BATTERY_HOOKS"); + + static int battery_bix_broken_package; + static int battery_notification_delay_ms; +@@ -97,7 +98,7 @@ struct acpi_battery { + struct acpi_device *device; + struct device *phys_dev; + struct notifier_block pm_nb; +- struct list_head list; ++ struct acpi_battery_hooks_list_entry hooks_list_entry; + unsigned long flags; + + struct mutex property_lock; /* Protects properties below. */ +@@ -723,164 +724,6 @@ static struct attribute *acpi_battery_attrs[] = { + }; + ATTRIBUTE_GROUPS(acpi_battery); + +-/* +- * The Battery Hooking API +- * +- * This API is used inside other drivers that need to expose +- * platform-specific behaviour within the generic driver in a +- * generic way. +- * +- */ +- +-static LIST_HEAD(acpi_battery_list); +-static LIST_HEAD(battery_hook_list); +-static DEFINE_MUTEX(hook_mutex); +- +-static void acpi_battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) +-{ +- struct acpi_battery *battery; +- +- /* +- * In order to remove a hook, we first need to +- * de-register all the batteries that are registered. +- */ +- list_for_each_entry(battery, &acpi_battery_list, list) { +- if (!hook->remove_battery(battery->bat, hook)) +- power_supply_changed(battery->bat); +- } +- list_del_init(&hook->list); +- +- pr_info("hook unregistered: %s\n", hook->name); +-} +- +-void acpi_battery_hook_unregister(struct acpi_battery_hook *hook) +-{ +- mutex_lock(&hook_mutex); +- /* +- * Ignore already unregistered battery hooks. This might happen +- * if a battery hook was previously unloaded due to an error when +- * adding a new battery. +- */ +- if (!list_empty(&hook->list)) +- acpi_battery_hook_unregister_unlocked(hook); +- +- mutex_unlock(&hook_mutex); +-} +-EXPORT_SYMBOL_GPL(acpi_battery_hook_unregister); +- +-void acpi_battery_hook_register(struct acpi_battery_hook *hook) +-{ +- struct acpi_battery *battery; +- +- mutex_lock(&hook_mutex); +- list_add(&hook->list, &battery_hook_list); +- /* +- * Now that the driver is registered, we need +- * to notify the hook that a battery is available +- * for each battery, so that the driver may add +- * its attributes. +- */ +- list_for_each_entry(battery, &acpi_battery_list, list) { +- if (hook->add_battery(battery->bat, hook)) { +- /* +- * If a add-battery returns non-zero, +- * the registration of the hook has failed, +- * and we will not add it to the list of loaded +- * hooks. +- */ +- pr_err("hook failed to load: %s", hook->name); +- acpi_battery_hook_unregister_unlocked(hook); +- goto end; +- } +- +- power_supply_changed(battery->bat); +- } +- pr_info("new hook: %s\n", hook->name); +-end: +- mutex_unlock(&hook_mutex); +-} +-EXPORT_SYMBOL_GPL(acpi_battery_hook_register); +- +-static void devm_acpi_battery_hook_unregister(void *data) +-{ +- struct acpi_battery_hook *hook = data; +- +- acpi_battery_hook_unregister(hook); +-} +- +-int devm_acpi_battery_hook_register(struct device *dev, struct acpi_battery_hook *hook) +-{ +- acpi_battery_hook_register(hook); +- +- return devm_add_action_or_reset(dev, devm_acpi_battery_hook_unregister, hook); +-} +-EXPORT_SYMBOL_GPL(devm_acpi_battery_hook_register); +- +-/* +- * This function gets called right after the battery sysfs +- * attributes have been added, so that the drivers that +- * define custom sysfs attributes can add their own. +- */ +-static void battery_hook_add_battery(struct acpi_battery *battery) +-{ +- struct acpi_battery_hook *hook_node, *tmp; +- +- mutex_lock(&hook_mutex); +- INIT_LIST_HEAD(&battery->list); +- list_add(&battery->list, &acpi_battery_list); +- /* +- * Since we added a new battery to the list, we need to +- * iterate over the hooks and call add_battery for each +- * hook that was registered. This usually happens +- * when a battery gets hotplugged or initialized +- * during the battery module initialization. +- */ +- list_for_each_entry_safe(hook_node, tmp, &battery_hook_list, list) { +- if (hook_node->add_battery(battery->bat, hook_node)) { +- /* +- * The notification of the hook has failed, to +- * prevent further errors we will unload the hook. +- */ +- pr_err("error in hook, unloading: %s", +- hook_node->name); +- acpi_battery_hook_unregister_unlocked(hook_node); +- } +- } +- mutex_unlock(&hook_mutex); +-} +- +-static void battery_hook_remove_battery(struct acpi_battery *battery) +-{ +- struct acpi_battery_hook *hook; +- +- mutex_lock(&hook_mutex); +- /* +- * Before removing the hook, we need to remove all +- * custom attributes from the battery. +- */ +- list_for_each_entry(hook, &battery_hook_list, list) { +- hook->remove_battery(battery->bat, hook); +- } +- /* Then, just remove the battery from the list */ +- list_del(&battery->list); +- mutex_unlock(&hook_mutex); +-} +- +-static void __exit battery_hook_exit(void) +-{ +- struct acpi_battery_hook *hook; +- struct acpi_battery_hook *ptr; +- /* +- * At this point, the acpi_bus_unregister_driver() +- * has called remove for all batteries. We just +- * need to remove the hooks. +- */ +- list_for_each_entry_safe(hook, ptr, &battery_hook_list, list) { +- acpi_battery_hook_unregister(hook); +- } +- mutex_destroy(&hook_mutex); +-} +- + static int sysfs_add_battery(struct acpi_battery *battery) + { + struct power_supply_config psy_cfg = { +@@ -936,7 +779,7 @@ static int sysfs_add_battery(struct acpi_battery *battery) + battery->bat = NULL; + return result; + } +- battery_hook_add_battery(battery); ++ acpi_battery_add_hooks(&battery->hooks_list_entry, battery->bat); + return 0; + } + +@@ -945,7 +788,7 @@ static void sysfs_remove_battery(struct acpi_battery *battery) + if (!battery->bat) + return; + +- battery_hook_remove_battery(battery); ++ acpi_battery_remove_hooks(&battery->hooks_list_entry); + power_supply_unregister(battery->bat); + battery->bat = NULL; + } +@@ -1391,7 +1234,6 @@ static int __init acpi_battery_init(void) + static void __exit acpi_battery_exit(void) + { + platform_driver_unregister(&acpi_battery_driver); +- battery_hook_exit(); + } + + module_init(acpi_battery_init); +diff --git a/drivers/acpi/battery_hooks.c b/drivers/acpi/battery_hooks.c +new file mode 100644 +--- /dev/null ++++ b/drivers/acpi/battery_hooks.c +@@ -0,0 +1,159 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * ACPI Battery Hooks ++ * ++ * Provides helpers for registering and unregistering battery hooks for ++ * drivers that use platform-specific extensions to ACPI-enumerated ++ * batteries (both ACPI Control Method batteries and Smart Battery System ++ * batteries). ++ */ ++ ++#define pr_fmt(fmt) "ACPI: battery: " fmt ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++static LIST_HEAD(acpi_battery_list); ++static LIST_HEAD(battery_hook_list); ++static DEFINE_MUTEX(hook_mutex); ++ ++static void acpi_battery_hook_unregister_unlocked(struct acpi_battery_hook *hook) ++{ ++ struct acpi_battery_hooks_list_entry *entry; ++ ++ /* ++ * In order to remove a hook, we first need to ++ * de-register all the batteries that are registered. ++ */ ++ list_for_each_entry(entry, &acpi_battery_list, list_entry) { ++ if (!hook->remove_battery(entry->battery, hook)) ++ power_supply_changed(entry->battery); ++ } ++ list_del_init(&hook->list); ++ ++ pr_info("hook unregistered: %s\n", hook->name); ++} ++ ++void acpi_battery_hook_unregister(struct acpi_battery_hook *hook) ++{ ++ guard(mutex)(&hook_mutex); ++ ++ /* ++ * Ignore already unregistered battery hooks. This might happen ++ * if a battery hook was previously unloaded due to an error when ++ * adding a new battery. ++ */ ++ if (!list_empty(&hook->list)) ++ acpi_battery_hook_unregister_unlocked(hook); ++} ++EXPORT_SYMBOL_GPL(acpi_battery_hook_unregister); ++ ++void acpi_battery_hook_register(struct acpi_battery_hook *hook) ++{ ++ struct acpi_battery_hooks_list_entry *entry; ++ ++ guard(mutex)(&hook_mutex); ++ ++ list_add(&hook->list, &battery_hook_list); ++ /* ++ * Now that the driver is registered, we need ++ * to notify the hook that a battery is available ++ * for each battery, so that the driver may add ++ * its attributes. ++ */ ++ list_for_each_entry(entry, &acpi_battery_list, list_entry) { ++ if (hook->add_battery(entry->battery, hook)) { ++ /* ++ * If a add-battery returns non-zero, ++ * the registration of the hook has failed, ++ * and we will not add it to the list of loaded ++ * hooks. ++ */ ++ pr_err("hook failed to load: %s\n", hook->name); ++ acpi_battery_hook_unregister_unlocked(hook); ++ return; ++ } ++ ++ power_supply_changed(entry->battery); ++ } ++ pr_info("new hook: %s\n", hook->name); ++} ++EXPORT_SYMBOL_GPL(acpi_battery_hook_register); ++ ++static void devm_acpi_battery_hook_unregister(void *data) ++{ ++ struct acpi_battery_hook *hook = data; ++ ++ acpi_battery_hook_unregister(hook); ++} ++ ++int devm_acpi_battery_hook_register(struct device *dev, ++ struct acpi_battery_hook *hook) ++{ ++ acpi_battery_hook_register(hook); ++ ++ return devm_add_action_or_reset(dev, devm_acpi_battery_hook_unregister, hook); ++} ++EXPORT_SYMBOL_GPL(devm_acpi_battery_hook_register); ++ ++/* ++ * This function gets called right after the battery sysfs ++ * attributes have been added, so that the drivers that ++ * define custom sysfs attributes can add their own. ++ */ ++void acpi_battery_add_hooks(struct acpi_battery_hooks_list_entry *entry, ++ struct power_supply *battery) ++{ ++ struct acpi_battery_hook *hook_node, *tmp; ++ ++ entry->battery = battery; ++ ++ guard(mutex)(&hook_mutex); ++ ++ list_add(&entry->list_entry, &acpi_battery_list); ++ /* ++ * Since we added a new battery to the list, we need to ++ * iterate over the hooks and call add_battery for each ++ * hook that was registered. This usually happens ++ * when a battery gets hotplugged or initialized ++ * during the battery module initialization. ++ */ ++ list_for_each_entry_safe(hook_node, tmp, &battery_hook_list, list) { ++ if (hook_node->add_battery(entry->battery, hook_node)) { ++ /* ++ * The notification of the hook has failed, to ++ * prevent further errors we will unload the hook. ++ */ ++ pr_err("error in hook, unloading: %s\n", hook_node->name); ++ acpi_battery_hook_unregister_unlocked(hook_node); ++ } ++ } ++} ++EXPORT_SYMBOL_NS_GPL(acpi_battery_add_hooks, "ACPI_BATTERY_HOOKS"); ++ ++void acpi_battery_remove_hooks(struct acpi_battery_hooks_list_entry *entry) ++{ ++ struct acpi_battery_hook *hook; ++ ++ guard(mutex)(&hook_mutex); ++ /* ++ * Before removing the hook, we need to remove all ++ * custom attributes from the battery. ++ */ ++ list_for_each_entry(hook, &battery_hook_list, list) ++ hook->remove_battery(entry->battery, hook); ++ ++ /* Then, just remove the battery from the list */ ++ list_del(&entry->list_entry); ++ entry->battery = NULL; ++} ++EXPORT_SYMBOL_NS_GPL(acpi_battery_remove_hooks, "ACPI_BATTERY_HOOKS"); ++ ++MODULE_DESCRIPTION("ACPI battery hooks"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/acpi/sbs.c b/drivers/acpi/sbs.c +--- a/drivers/acpi/sbs.c ++++ b/drivers/acpi/sbs.c +@@ -36,6 +36,7 @@ + MODULE_AUTHOR("Alexey Starikovskiy "); + MODULE_DESCRIPTION("Smart Battery System ACPI interface driver"); + MODULE_LICENSE("GPL"); ++MODULE_IMPORT_NS("ACPI_BATTERY_HOOKS"); + + static unsigned int cache_time = 1000; + module_param(cache_time, uint, 0644); +@@ -54,6 +55,7 @@ struct acpi_battery { + struct power_supply *bat; + struct power_supply_desc bat_desc; + struct acpi_sbs *sbs; ++ struct acpi_battery_hooks_list_entry hooks_list_entry; + unsigned long update_time; + char name[8]; + char manufacturer_name[ACPI_SBS_BLOCK_MAX]; +@@ -555,6 +557,8 @@ static int acpi_battery_add(struct acpi_sbs *sbs, int id) + goto end; + } + ++ acpi_battery_add_hooks(&battery->hooks_list_entry, battery->bat); ++ + end: + pr_info("%s [%s]: Battery Slot [%s] (battery %s)\n", + ACPI_SBS_DEVICE_NAME, acpi_device_bid(sbs->device), +@@ -566,8 +570,10 @@ static void acpi_battery_remove(struct acpi_sbs *sbs, int id) + { + struct acpi_battery *battery = &sbs->battery[id]; + +- if (battery->bat) ++ if (battery->bat) { ++ acpi_battery_remove_hooks(&battery->hooks_list_entry); + power_supply_unregister(battery->bat); ++ } + } + + static int acpi_charger_add(struct acpi_sbs *sbs) +diff --git a/include/acpi/battery.h b/include/acpi/battery.h +--- a/include/acpi/battery.h ++++ b/include/acpi/battery.h +@@ -18,9 +18,18 @@ struct acpi_battery_hook { + struct list_head list; + }; + ++struct acpi_battery_hooks_list_entry { ++ struct list_head list_entry; ++ struct power_supply *battery; ++}; ++ + void acpi_battery_hook_register(struct acpi_battery_hook *hook); + void acpi_battery_hook_unregister(struct acpi_battery_hook *hook); + int devm_acpi_battery_hook_register(struct device *dev, + struct acpi_battery_hook *hook); + ++void acpi_battery_add_hooks(struct acpi_battery_hooks_list_entry *entry, ++ struct power_supply *battery); ++void acpi_battery_remove_hooks(struct acpi_battery_hooks_list_entry *entry); ++ + #endif diff --git a/pkgbuilds/linux-omarchy-eevdf/0804-acpi-battery-unified-hooks-acpi-sbs.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0804-acpi-battery-unified-hooks-acpi-sbs.patch.sig new file mode 100644 index 0000000..3d8754f Binary files /dev/null and b/pkgbuilds/linux-omarchy-eevdf/0804-acpi-battery-unified-hooks-acpi-sbs.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-eevdf/0805-hwmon-applesmc-charge-control-end-threshold.patch b/pkgbuilds/linux-omarchy-eevdf/0805-hwmon-applesmc-charge-control-end-threshold.patch new file mode 100644 index 0000000..9b45c66 --- /dev/null +++ b/pkgbuilds/linux-omarchy-eevdf/0805-hwmon-applesmc-charge-control-end-threshold.patch @@ -0,0 +1,209 @@ +diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig +--- a/drivers/hwmon/Kconfig ++++ b/drivers/hwmon/Kconfig +@@ -380,6 +380,7 @@ config SENSORS_FAM15H_POWER + config SENSORS_APPLESMC + tristate "Apple SMC (Motion sensor, light sensor, keyboard backlight)" + depends on INPUT && X86 ++ depends on POWER_SUPPLY || POWER_SUPPLY=n + select NEW_LEDS + select LEDS_CLASS + help +diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c +--- a/drivers/hwmon/applesmc.c ++++ b/drivers/hwmon/applesmc.c +@@ -33,6 +33,8 @@ + #include + #include + #include ++#include ++#include + #include + + /* data port used by Apple SMC */ +@@ -76,6 +78,20 @@ + + #define TEMP_SENSOR_TYPE "sp78" + ++/* ++ * BCLM caps charging at a percentage. BFCL only sets when the charging LED ++ * switches from orange to green. ++ */ ++#define BATTERY_CHARGE_LIMIT_KEY "BCLM" /* r/w ui8 */ ++#define BATTERY_CHARGE_LIMIT_LED_KEY "BFCL" /* r/w ui8 */ ++ ++/* ++ * Points kept between BCLM and BFCL so the LED turns green before charging ++ * stops. Measured on a MacBookAir6,2, where a margin of 1 only just ties; ++ * 3 leaves headroom for other models. ++ */ ++#define APPLESMC_BATTERY_CHARGE_LIMIT_LED_MARGIN 3 ++ + /* List of keys used to read/write fan speeds */ + static const char *const fan_speed_fmt[] = { + "F%dAc", /* actual speed */ +@@ -131,6 +147,8 @@ static struct applesmc_registers { + int num_light_sensors; /* number of light sensors */ + bool has_accelerometer; /* has motion sensor */ + bool has_key_backlight; /* has keyboard backlight */ ++ bool has_battery_charge_limit; /* has BCLM battery charge limit */ ++ bool has_battery_charge_limit_led; /* has BFCL MagSafe LED charge limit */ + bool init_complete; /* true when fully initialized */ + struct applesmc_entry *cache; /* cached key entries */ + const char **index; /* temperature key index */ +@@ -633,6 +651,12 @@ static int applesmc_init_smcreg_try(void) + if (ret) + return ret; + ret = applesmc_has_key(BACKLIGHT_KEY, &s->has_key_backlight); ++ if (ret) ++ return ret; ++ ret = applesmc_has_key(BATTERY_CHARGE_LIMIT_KEY, &s->has_battery_charge_limit); ++ if (ret) ++ return ret; ++ ret = applesmc_has_key(BATTERY_CHARGE_LIMIT_LED_KEY, &s->has_battery_charge_limit_led); + if (ret) + return ret; + +@@ -724,6 +748,120 @@ static struct platform_driver applesmc_driver = { + }, + }; + ++static DEFINE_MUTEX(applesmc_bat_lock); ++ ++static int applesmc_bat_get_property(struct power_supply *psy, ++ const struct power_supply_ext *ext, ++ void *data, ++ enum power_supply_property psp, ++ union power_supply_propval *val) ++{ ++ u8 limit; ++ int ret; ++ ++ switch (psp) { ++ case POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD: ++ scoped_guard(mutex, &applesmc_bat_lock) ++ ret = applesmc_read_key(BATTERY_CHARGE_LIMIT_KEY, &limit, 1); ++ if (ret) ++ return ret; ++ val->intval = limit; ++ return 0; ++ default: ++ return -EINVAL; ++ } ++} ++ ++static int applesmc_bat_set_property(struct power_supply *psy, ++ const struct power_supply_ext *ext, ++ void *data, ++ enum power_supply_property psp, ++ const union power_supply_propval *val) ++{ ++ u8 limit, led_limit, readback; ++ int ret; ++ ++ switch (psp) { ++ case POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD: ++ /* 20 is known to work and 10 is not accepted; the floor is unknown. */ ++ if (val->intval < 20 || val->intval > 100) ++ return -EINVAL; ++ ++ limit = val->intval; ++ /* At 100% charging is never cut short, so no margin is needed. */ ++ led_limit = limit < 100 ? ++ limit - APPLESMC_BATTERY_CHARGE_LIMIT_LED_MARGIN : limit; ++ ++ scoped_guard(mutex, &applesmc_bat_lock) { ++ ret = applesmc_write_key(BATTERY_CHARGE_LIMIT_KEY, &limit, 1); ++ if (ret) ++ return ret; ++ ++ /* ++ * The SMC silently ignores values it does not accept and ++ * still reports success, so read the limit back. ++ */ ++ ret = applesmc_read_key(BATTERY_CHARGE_LIMIT_KEY, &readback, 1); ++ if (ret) ++ return ret; ++ if (readback != limit) ++ return -EINVAL; ++ ++ if (smcreg.has_battery_charge_limit_led) { ++ ret = applesmc_write_key(BATTERY_CHARGE_LIMIT_LED_KEY, ++ &led_limit, 1); ++ /* BCLM is already applied, so this is not an error. */ ++ if (ret) ++ pr_warn("failed to update MagSafe LED threshold (BFCL): %d\n", ++ ret); ++ } ++ } ++ ++ power_supply_changed(psy); ++ return 0; ++ default: ++ return -EINVAL; ++ } ++} ++ ++static int applesmc_bat_property_is_writeable(struct power_supply *psy, ++ const struct power_supply_ext *ext, ++ void *data, ++ enum power_supply_property psp) ++{ ++ return psp == POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD; ++} ++ ++static const enum power_supply_property applesmc_bat_props[] = { ++ POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD, ++}; ++ ++static const struct power_supply_ext applesmc_bat_ext = { ++ .name = "applesmc-charge-control", ++ .properties = applesmc_bat_props, ++ .num_properties = ARRAY_SIZE(applesmc_bat_props), ++ .get_property = applesmc_bat_get_property, ++ .set_property = applesmc_bat_set_property, ++ .property_is_writeable = applesmc_bat_property_is_writeable, ++}; ++ ++static int applesmc_bat_add(struct power_supply *battery, struct acpi_battery_hook *hook) ++{ ++ return power_supply_register_extension(battery, &applesmc_bat_ext, &pdev->dev, NULL); ++} ++ ++static int applesmc_bat_remove(struct power_supply *battery, struct acpi_battery_hook *hook) ++{ ++ power_supply_unregister_extension(battery, &applesmc_bat_ext); ++ return 0; ++} ++ ++static struct acpi_battery_hook applesmc_bat_hook = { ++ .name = "Apple SMC Battery Charge Control", ++ .add_battery = applesmc_bat_add, ++ .remove_battery = applesmc_bat_remove, ++}; ++ + /* + * applesmc_calibrate - Set our "resting" values. Callers must + * hold applesmc_lock. +@@ -1563,6 +1701,10 @@ static int __init applesmc_init(void) + goto out_light_ledclass; + } + ++ if (smcreg.has_battery_charge_limit && ++ IS_REACHABLE(CONFIG_ACPI_BATTERY_HOOKS)) ++ acpi_battery_hook_register(&applesmc_bat_hook); ++ + return 0; + + out_light_ledclass: +@@ -1589,6 +1731,10 @@ static int __init applesmc_init(void) + + static void __exit applesmc_exit(void) + { ++ if (smcreg.has_battery_charge_limit && ++ IS_REACHABLE(CONFIG_ACPI_BATTERY_HOOKS)) ++ acpi_battery_hook_unregister(&applesmc_bat_hook); ++ + hwmon_device_unregister(hwmon_dev); + applesmc_release_key_backlight(); + applesmc_release_light_sensor(); diff --git a/pkgbuilds/linux-omarchy-eevdf/0805-hwmon-applesmc-charge-control-end-threshold.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0805-hwmon-applesmc-charge-control-end-threshold.patch.sig new file mode 100644 index 0000000..992c843 Binary files /dev/null and b/pkgbuilds/linux-omarchy-eevdf/0805-hwmon-applesmc-charge-control-end-threshold.patch.sig differ diff --git a/pkgbuilds/linux-omarchy/0850-futex-wait-multiple.patch b/pkgbuilds/linux-omarchy-eevdf/0850-futex-wait-multiple.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0850-futex-wait-multiple.patch rename to pkgbuilds/linux-omarchy-eevdf/0850-futex-wait-multiple.patch diff --git a/pkgbuilds/linux-omarchy/0850-futex-wait-multiple.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0850-futex-wait-multiple.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0850-futex-wait-multiple.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0850-futex-wait-multiple.patch.sig diff --git a/pkgbuilds/linux-omarchy/0851-futex-wait-multiple-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0851-futex-wait-multiple-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0851-futex-wait-multiple-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0851-futex-wait-multiple-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0851-futex-wait-multiple-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0851-futex-wait-multiple-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0851-futex-wait-multiple-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0851-futex-wait-multiple-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy/0852-futex-wait-multiple-abi-fixes.patch b/pkgbuilds/linux-omarchy-eevdf/0852-futex-wait-multiple-abi-fixes.patch similarity index 100% rename from pkgbuilds/linux-omarchy/0852-futex-wait-multiple-abi-fixes.patch rename to pkgbuilds/linux-omarchy-eevdf/0852-futex-wait-multiple-abi-fixes.patch diff --git a/pkgbuilds/linux-omarchy/0852-futex-wait-multiple-abi-fixes.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0852-futex-wait-multiple-abi-fixes.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/0852-futex-wait-multiple-abi-fixes.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/0852-futex-wait-multiple-abi-fixes.patch.sig diff --git a/pkgbuilds/linux-omarchy-eevdf/0860-module-add-module-kallsyms-on-each-addr.patch b/pkgbuilds/linux-omarchy-eevdf/0860-module-add-module-kallsyms-on-each-addr.patch new file mode 100644 index 0000000..ebd6e0d --- /dev/null +++ b/pkgbuilds/linux-omarchy-eevdf/0860-module-add-module-kallsyms-on-each-addr.patch @@ -0,0 +1,95 @@ +diff --git a/include/linux/module.h b/include/linux/module.h +--- a/include/linux/module.h ++++ b/include/linux/module.h +@@ -975,6 +975,10 @@ unsigned long module_kallsyms_lookup_name(const char *name); + + unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name); + ++void module_kallsyms_on_each_addr(struct module *mod, ++ void (*fn)(void *, unsigned long), ++ void *data); ++ + #else /* CONFIG_MODULES && CONFIG_KALLSYMS */ + + static inline int module_kallsyms_on_each_symbol(const char *modname, +@@ -1018,6 +1022,12 @@ static inline unsigned long find_kallsyms_symbol_value(struct module *mod, + return 0; + } + ++static inline void module_kallsyms_on_each_addr(struct module *mod, ++ void (*fn)(void *, unsigned long), ++ void *data) ++{ ++} ++ + #endif /* CONFIG_MODULES && CONFIG_KALLSYMS */ + + /* Define __free(module_put) macro for struct module *. */ +diff --git a/kernel/module/kallsyms.c b/kernel/module/kallsyms.c +--- a/kernel/module/kallsyms.c ++++ b/kernel/module/kallsyms.c +@@ -246,6 +246,18 @@ static const char *kallsyms_symbol_name(struct mod_kallsyms *kallsyms, unsigned + return kallsyms->strtab + kallsyms->symtab[symnum].st_name; + } + ++/* ++ * Whether find_kallsyms_symbol() may resolve an address to symbol @symnum. ++ * Unnamed symbols are ignored: they're uninformative and inserted at a whim. ++ */ ++static bool is_lookup_symbol(struct mod_kallsyms *kallsyms, unsigned int symnum) ++{ ++ const char *name = kallsyms_symbol_name(kallsyms, symnum); ++ ++ return kallsyms->symtab[symnum].st_shndx != SHN_UNDEF && ++ *name != '\0' && !is_mapping_symbol(name); ++} ++ + /* + * Given a module and address, find the corresponding symbol and return its name + * while providing its size and offset if needed. +@@ -286,15 +298,7 @@ static const char *find_kallsyms_symbol(struct module *mod, + const Elf_Sym *sym = &kallsyms->symtab[i]; + unsigned long thisval = kallsyms_symbol_value(sym); + +- if (sym->st_shndx == SHN_UNDEF) +- continue; +- +- /* +- * We ignore unnamed symbols: they're uninformative +- * and inserted at a whim. +- */ +- if (*kallsyms_symbol_name(kallsyms, i) == '\0' || +- is_mapping_symbol(kallsyms_symbol_name(kallsyms, i))) ++ if (!is_lookup_symbol(kallsyms, i)) + continue; + + if (thisval <= addr && thisval > bestval) { +@@ -458,6 +462,28 @@ unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name) + return __find_kallsyms_symbol_value(mod, name); + } + ++/* ++ * Call @fn with the address of each symbol of @mod that find_kallsyms_symbol() ++ * may resolve an address to. Unlike module_kallsyms_on_each_symbol(), this ++ * also works while @mod is still being loaded. ++ */ ++void module_kallsyms_on_each_addr(struct module *mod, ++ void (*fn)(void *, unsigned long), ++ void *data) ++{ ++ struct mod_kallsyms *kallsyms; ++ unsigned int i; ++ ++ guard(rcu)(); ++ kallsyms = rcu_dereference(mod->kallsyms); ++ ++ /* ELF starts real symbols at 1. */ ++ for (i = 1; i < kallsyms->num_symtab; i++) { ++ if (is_lookup_symbol(kallsyms, i)) ++ fn(data, kallsyms_symbol_value(&kallsyms->symtab[i])); ++ } ++} ++ + int module_kallsyms_on_each_symbol(const char *modname, + int (*fn)(void *, const char *, unsigned long), + void *data) diff --git a/pkgbuilds/linux-omarchy-eevdf/0860-module-add-module-kallsyms-on-each-addr.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0860-module-add-module-kallsyms-on-each-addr.patch.sig new file mode 100644 index 0000000..bf22caf Binary files /dev/null and b/pkgbuilds/linux-omarchy-eevdf/0860-module-add-module-kallsyms-on-each-addr.patch.sig differ diff --git a/pkgbuilds/linux-omarchy-eevdf/0861-ftrace-drop-weak-function-locations-of-modules.patch b/pkgbuilds/linux-omarchy-eevdf/0861-ftrace-drop-weak-function-locations-of-modules.patch new file mode 100644 index 0000000..82b00bb --- /dev/null +++ b/pkgbuilds/linux-omarchy-eevdf/0861-ftrace-drop-weak-function-locations-of-modules.patch @@ -0,0 +1,113 @@ +diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c +--- a/kernel/trace/ftrace.c ++++ b/kernel/trace/ftrace.c +@@ -4445,11 +4445,6 @@ static int print_rec(struct seq_file *m, unsigned long ip) + return ret == NULL ? -1 : 0; + } + #else +-static inline int test_for_valid_rec(struct dyn_ftrace *rec) +-{ +- return 1; +-} +- + static inline int print_rec(struct seq_file *m, unsigned long ip) + { + seq_printf(m, "%ps", (void *)ip); +@@ -7611,6 +7606,73 @@ static void test_is_sorted(unsigned long *start, unsigned long count) + } + #endif + ++#ifdef FTRACE_MCOUNT_MAX_OFFSET ++struct ftrace_mod_locs { ++ unsigned long *start; ++ unsigned long count; ++ unsigned long *valid; ++}; ++ ++/* Mark the locations that lie at most FTRACE_MCOUNT_MAX_OFFSET after @addr. */ ++static void ftrace_mark_valid_locs(void *data, unsigned long addr) ++{ ++ struct ftrace_mod_locs *locs = data; ++ unsigned long lo = 0, hi = locs->count, mid, ip; ++ ++ /* ++ * ftrace_call_adjust() moves a location forward by at most ++ * FTRACE_MCOUNT_MAX_OFFSET, so start looking that far before @addr. ++ */ ++ while (lo < hi) { ++ mid = lo + (hi - lo) / 2; ++ if (locs->start[mid] + FTRACE_MCOUNT_MAX_OFFSET < addr) ++ lo = mid + 1; ++ else ++ hi = mid; ++ } ++ ++ for (; lo < locs->count; lo++) { ++ if (locs->start[lo] > addr + FTRACE_MCOUNT_MAX_OFFSET) ++ break; ++ ip = ftrace_call_adjust(locs->start[lo]); ++ if (ip >= addr && ip - addr <= FTRACE_MCOUNT_MAX_OFFSET) ++ __set_bit(lo, locs->valid); ++ } ++} ++ ++/* ++ * A weak function overridden within its module keeps its mcount location but ++ * has no symbol. Zero such locations before they become records, as sorttable ++ * does for vmlinux: keep only those with a symbol at most ++ * FTRACE_MCOUNT_MAX_OFFSET before them. ++ */ ++static int ftrace_zero_weak_locs(struct module *mod, unsigned long *start, ++ unsigned long count) ++{ ++ struct ftrace_mod_locs locs = { .start = start, .count = count }; ++ unsigned long i; ++ ++ locs.valid = bitmap_zalloc(count, GFP_KERNEL); ++ if (!locs.valid) ++ return -ENOMEM; ++ ++ module_kallsyms_on_each_addr(mod, ftrace_mark_valid_locs, &locs); ++ ++ for_each_clear_bit(i, locs.valid, count) ++ start[i] = 0; ++ ++ bitmap_free(locs.valid); ++ return 0; ++} ++#else ++static inline int ftrace_zero_weak_locs(struct module *mod, ++ unsigned long *start, ++ unsigned long count) ++{ ++ return 0; ++} ++#endif ++ + static int ftrace_process_locs(struct module *mod, + unsigned long *start, + unsigned long *end) +@@ -7644,6 +7706,9 @@ static int ftrace_process_locs(struct module *mod, + test_is_sorted(start, count); + } + ++ if (mod && ftrace_zero_weak_locs(mod, start, count)) ++ return -ENOMEM; ++ + start_pg = ftrace_allocate_pages(count, &pages); + if (!start_pg) + return -ENOMEM; +@@ -8049,13 +8114,6 @@ void ftrace_module_enable(struct module *mod) + + cond_resched(); + +- /* Weak functions should still be ignored */ +- if (!test_for_valid_rec(rec)) { +- /* Clear all other flags. Should not be enabled anyway */ +- rec->flags = FTRACE_FL_DISABLED; +- continue; +- } +- + cnt = 0; + + /* diff --git a/pkgbuilds/linux-omarchy-eevdf/0861-ftrace-drop-weak-function-locations-of-modules.patch.sig b/pkgbuilds/linux-omarchy-eevdf/0861-ftrace-drop-weak-function-locations-of-modules.patch.sig new file mode 100644 index 0000000..ba105f0 Binary files /dev/null and b/pkgbuilds/linux-omarchy-eevdf/0861-ftrace-drop-weak-function-locations-of-modules.patch.sig differ diff --git a/pkgbuilds/linux-omarchy/8204-mm-opportunistic-compaction.patch b/pkgbuilds/linux-omarchy-eevdf/8204-mm-opportunistic-compaction.patch similarity index 100% rename from pkgbuilds/linux-omarchy/8204-mm-opportunistic-compaction.patch rename to pkgbuilds/linux-omarchy-eevdf/8204-mm-opportunistic-compaction.patch diff --git a/pkgbuilds/linux-omarchy/8204-mm-opportunistic-compaction.patch.sig b/pkgbuilds/linux-omarchy-eevdf/8204-mm-opportunistic-compaction.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/8204-mm-opportunistic-compaction.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/8204-mm-opportunistic-compaction.patch.sig diff --git a/pkgbuilds/linux-omarchy/8205-mm-hint-uses-allocation-order.patch b/pkgbuilds/linux-omarchy-eevdf/8205-mm-hint-uses-allocation-order.patch similarity index 100% rename from pkgbuilds/linux-omarchy/8205-mm-hint-uses-allocation-order.patch rename to pkgbuilds/linux-omarchy-eevdf/8205-mm-hint-uses-allocation-order.patch diff --git a/pkgbuilds/linux-omarchy/8205-mm-hint-uses-allocation-order.patch.sig b/pkgbuilds/linux-omarchy-eevdf/8205-mm-hint-uses-allocation-order.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/8205-mm-hint-uses-allocation-order.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/8205-mm-hint-uses-allocation-order.patch.sig diff --git a/pkgbuilds/linux-omarchy/8206-mm-carry-order-and-hint-in-one-word.patch b/pkgbuilds/linux-omarchy-eevdf/8206-mm-carry-order-and-hint-in-one-word.patch similarity index 100% rename from pkgbuilds/linux-omarchy/8206-mm-carry-order-and-hint-in-one-word.patch rename to pkgbuilds/linux-omarchy-eevdf/8206-mm-carry-order-and-hint-in-one-word.patch diff --git a/pkgbuilds/linux-omarchy/8206-mm-carry-order-and-hint-in-one-word.patch.sig b/pkgbuilds/linux-omarchy-eevdf/8206-mm-carry-order-and-hint-in-one-word.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/8206-mm-carry-order-and-hint-in-one-word.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/8206-mm-carry-order-and-hint-in-one-word.patch.sig diff --git a/pkgbuilds/linux-omarchy/8207-mm-classify-huge-page-allocations-as-failable.patch b/pkgbuilds/linux-omarchy-eevdf/8207-mm-classify-huge-page-allocations-as-failable.patch similarity index 100% rename from pkgbuilds/linux-omarchy/8207-mm-classify-huge-page-allocations-as-failable.patch rename to pkgbuilds/linux-omarchy-eevdf/8207-mm-classify-huge-page-allocations-as-failable.patch diff --git a/pkgbuilds/linux-omarchy/8207-mm-classify-huge-page-allocations-as-failable.patch.sig b/pkgbuilds/linux-omarchy-eevdf/8207-mm-classify-huge-page-allocations-as-failable.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/8207-mm-classify-huge-page-allocations-as-failable.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/8207-mm-classify-huge-page-allocations-as-failable.patch.sig diff --git a/pkgbuilds/linux-omarchy/8209-xe-shrinker-use-opportunistic-hint.patch b/pkgbuilds/linux-omarchy-eevdf/8209-xe-shrinker-use-opportunistic-hint.patch similarity index 100% rename from pkgbuilds/linux-omarchy/8209-xe-shrinker-use-opportunistic-hint.patch rename to pkgbuilds/linux-omarchy-eevdf/8209-xe-shrinker-use-opportunistic-hint.patch diff --git a/pkgbuilds/linux-omarchy/8209-xe-shrinker-use-opportunistic-hint.patch.sig b/pkgbuilds/linux-omarchy-eevdf/8209-xe-shrinker-use-opportunistic-hint.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/8209-xe-shrinker-use-opportunistic-hint.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/8209-xe-shrinker-use-opportunistic-hint.patch.sig diff --git a/pkgbuilds/linux-omarchy/8210-xe-shrinker-single-backup-decision.patch b/pkgbuilds/linux-omarchy-eevdf/8210-xe-shrinker-single-backup-decision.patch similarity index 100% rename from pkgbuilds/linux-omarchy/8210-xe-shrinker-single-backup-decision.patch rename to pkgbuilds/linux-omarchy-eevdf/8210-xe-shrinker-single-backup-decision.patch diff --git a/pkgbuilds/linux-omarchy/8210-xe-shrinker-single-backup-decision.patch.sig b/pkgbuilds/linux-omarchy-eevdf/8210-xe-shrinker-single-backup-decision.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/8210-xe-shrinker-single-backup-decision.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/8210-xe-shrinker-single-backup-decision.patch.sig diff --git a/pkgbuilds/linux-omarchy/8211-xe-shrinker-skip-active-vm.patch b/pkgbuilds/linux-omarchy-eevdf/8211-xe-shrinker-skip-active-vm.patch similarity index 100% rename from pkgbuilds/linux-omarchy/8211-xe-shrinker-skip-active-vm.patch rename to pkgbuilds/linux-omarchy-eevdf/8211-xe-shrinker-skip-active-vm.patch diff --git a/pkgbuilds/linux-omarchy/8211-xe-shrinker-skip-active-vm.patch.sig b/pkgbuilds/linux-omarchy-eevdf/8211-xe-shrinker-skip-active-vm.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/8211-xe-shrinker-skip-active-vm.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/8211-xe-shrinker-skip-active-vm.patch.sig diff --git a/pkgbuilds/linux-omarchy/8212-xe-shrinker-backup-in-kswapd-only.patch b/pkgbuilds/linux-omarchy-eevdf/8212-xe-shrinker-backup-in-kswapd-only.patch similarity index 100% rename from pkgbuilds/linux-omarchy/8212-xe-shrinker-backup-in-kswapd-only.patch rename to pkgbuilds/linux-omarchy-eevdf/8212-xe-shrinker-backup-in-kswapd-only.patch diff --git a/pkgbuilds/linux-omarchy/8212-xe-shrinker-backup-in-kswapd-only.patch.sig b/pkgbuilds/linux-omarchy-eevdf/8212-xe-shrinker-backup-in-kswapd-only.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/8212-xe-shrinker-backup-in-kswapd-only.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/8212-xe-shrinker-backup-in-kswapd-only.patch.sig diff --git a/pkgbuilds/linux-omarchy/8213-xe-hibernation-writeback-gated.patch b/pkgbuilds/linux-omarchy-eevdf/8213-xe-hibernation-writeback-gated.patch similarity index 100% rename from pkgbuilds/linux-omarchy/8213-xe-hibernation-writeback-gated.patch rename to pkgbuilds/linux-omarchy-eevdf/8213-xe-hibernation-writeback-gated.patch diff --git a/pkgbuilds/linux-omarchy/8213-xe-hibernation-writeback-gated.patch.sig b/pkgbuilds/linux-omarchy-eevdf/8213-xe-hibernation-writeback-gated.patch.sig similarity index 100% rename from pkgbuilds/linux-omarchy/8213-xe-hibernation-writeback-gated.patch.sig rename to pkgbuilds/linux-omarchy-eevdf/8213-xe-hibernation-writeback-gated.patch.sig diff --git a/pkgbuilds/linux-omarchy-eevdf/PKGBUILD b/pkgbuilds/linux-omarchy-eevdf/PKGBUILD new file mode 100644 index 0000000..c7066b4 --- /dev/null +++ b/pkgbuilds/linux-omarchy-eevdf/PKGBUILD @@ -0,0 +1,1010 @@ +# Maintainer: The Omarchy Authors +# Adopted from the Arch Linux linux package. + +pkgbase=linux-omarchy-eevdf +pkgver=7.2.8 +pkgrel=5 +pkgdesc='Omarchy Linux' +url='https://omarchy.org' +arch=( + x86_64 +) +license=(GPL-2.0-only) +makedepends=( + bc + binutils + cpio + gettext + glibc + libelf + libgcc + openssl + pahole + perl + python + rust + rust-bindgen + rust-src + tar + xxhash + xz + zlib + zstd +) +options=( + !debug + !strip +) +_major=${pkgver%%.*} +_srcname=linux-7.2.8 +source=( + https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/${_srcname}.tar.{xz,sign} + ${_rcpatch:+https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/stable-review/${_rcpatch}.xz} + ${_rcpatch:+https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/stable-review/${_rcpatch}.sign} + 0010-archlinux-base.patch{,.sig} + 0011-kbuild-optimize-for-performance-o3.patch{,.sig} + 0120-tlbpull.patch{,.sig} + 0121-smp-preempt.patch{,.sig} + 0130-sched-detach-tasks.patch{,.sig} + 0140-sched-always-inline.patch{,.sig} + 0141-sched-urgent-fixes.patch{,.sig} + 0143-sched-hybrid-cluster-balancing.patch{,.sig} + 0144-sched-nohz-idle-core.patch{,.sig} + 0145-sched-eevdf-tunables.patch{,.sig} + 0210-pm-updates.patch{,.sig} + 0211-pm-fixes-1.patch{,.sig} + 0212-pm-fixes-2.patch{,.sig} + 0213-pm-fixes-3.patch{,.sig} + 0220-x86-amd-zen5-tlb-sizes.patch{,.sig} + 0250-zsmalloc.patch{,.sig} + 0260-mglru-exec-protect.patch{,.sig} + 0270-ksm-rmap-walk.patch{,.sig} + 0280-mm-updates.patch{,.sig} + 0281-mm-no-deferred-kernel-page-table-free-at-boot.patch{,.sig} + 0290-zstd-bmi2-fallback-aliases.patch{,.sig} + 0291-zstd-bmi2-cpu-feature-dispatch.patch{,.sig} + 0292-crypto-zstd-defer-cstream-init.patch{,.sig} + 0293-crypto-zstd-defer-dstream-init.patch{,.sig} + 0295-af-alg-restrict.patch{,.sig} + 0300-btrfs.patch{,.sig} + 0301-btrfs-fixes-1.patch{,.sig} + 0302-btrfs-zstd-decompress-direct-to-page.patch{,.sig} + 0303-btrfs-fixes-2.patch{,.sig} + 0304-btrfs-fixes-3.patch{,.sig} + 0310-fuse-eof-zeroing.patch{,.sig} + 0311-fuse-perf.patch{,.sig} + 0312-fuse-writethrough-uptodate.patch{,.sig} + 0313-fuse-background-wakeup.patch{,.sig} + 0320-vfs-open-consume-path-reference.patch{,.sig} + 0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch{,.sig} + 0360-gpu-mem-cgroup.patch{,.sig} + 0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch{,.sig} + 0401-psr2-early-transport-panels.patch{,.sig} + 0402-drm-i915-quirk-panel-replay-exit-on-flush.patch{,.sig} + 0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch{,.sig} + 0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch{,.sig} + 0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch{,.sig} + 0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch{,.sig} + 0411-drm-xe-display-no-stolen-framebuffers.patch{,.sig} + 0420-safe-window.patch{,.sig} + 0430-fbc.patch{,.sig} + 0440-xe3-peak-bandwidth.patch{,.sig} + 0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch{,.sig} + 0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch{,.sig} + 0444-drm-i915-vrr-dc-balance-off-by-default.patch{,.sig} + 0450-amd-hdmi-vrr-allm.patch{,.sig} + 0451-amd-vtem-tmds-links.patch{,.sig} + 0452-amd-hdmi-frl-default.patch{,.sig} + 0453-amd-vtem-null-sink.patch{,.sig} + 0454-amd-hdmi-frl-status-polling.patch{,.sig} + 0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch{,.sig} + 0456-amd-dml-frl-compressed-cap-check.patch{,.sig} + 0460-vesa-displayid-dsc-bpp.patch{,.sig} + 0461-vesa-dsc-passthru-mode-match-fix.patch{,.sig} + 0472-amdgpu-userq-post-reset-error.patch{,.sig} + 0474-amd-display-oled-vesa-backlight.patch{,.sig} + 0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch{,.sig} + 0476-amd-display-ycbcr420-only-modes.patch{,.sig} + 0477-amd-display-irq-atomic-rmw.patch{,.sig} + 0478-amd-freesync-vcp-code-check-hdmi-pcon.patch{,.sig} + 0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch{,.sig} + 0510-sound-updates.patch{,.sig} + 0511-asoc-updates.patch{,.sig} + 0512-sound-fixes-1.patch{,.sig} + 0513-asoc-fixes-1.patch{,.sig} + 0514-sound-fixes-2.patch{,.sig} + 0515-xps13-sof-quirk.patch{,.sig} + 0516-rt766-stream-config-type.patch{,.sig} + 0517-hda-realtek-rog-strix-g733zw-speakers.patch{,.sig} + 0518-asoc-amd-yc-acer-aspire-a314-23p.patch{,.sig} + 0522-sound-fixes-3.patch{,.sig} + 0523-asoc-fixes-2.patch{,.sig} + 0524-sound-fixes-4.patch{,.sig} + 0525-asoc-fixes-3.patch{,.sig} + 0526-sof-amd-acp7x-suspend-unknown-revision.patch{,.sig} + 0527-sound-fixes-5.patch{,.sig} + 0528-asoc-fixes-4.patch{,.sig} + 0541-cvs-nova-lake-acpi-id.patch{,.sig} + 0542-media-cvs-wake-irq-without-claiming-gpio.patch{,.sig} + 0543-media-laptop-cameras.patch{,.sig} + 0544-ipu-bridge-lenovo-x9-upside-down.patch{,.sig} + 0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch{,.sig} + 0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch{,.sig} + 0547-int3472-imx471-vana-power-enable.patch{,.sig} + 0548-media-cvs-sensor-node-in-bound-callback.patch{,.sig} + 0549-media-imx471-analog-gain-max-960.patch{,.sig} + 0560-input-updates.patch{,.sig} + 0561-input-fixes.patch{,.sig} + 0562-hid-fixes.patch{,.sig} + 0563-input-fixes-2.patch{,.sig} + 0565-i2c-asue140d-touchpad-100khz.patch{,.sig} + 0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch{,.sig} + 0601-thunderbolt-updates.patch{,.sig} + 0602-thunderbolt-fixes.patch{,.sig} + 0603-usb-updates.patch{,.sig} + 0604-xhci-fixes.patch{,.sig} + 0605-thunderbolt-pcie-rescan-after-tunnel.patch{,.sig} + 0606-thunderbolt-fixes-2.patch{,.sig} + 0607-usb-fixes.patch{,.sig} + 0620-usb-string-sanitize.patch{,.sig} + 0650-wireguard-tstamp-type.patch{,.sig} + 0660-btusb-mediatek-mt7922-13d3-3625.patch{,.sig} + 0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch{,.sig} + 0663-btintel-pcie-serialize-reset-type.patch{,.sig} + 0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch{,.sig} + 0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch{,.sig} + 0666-btintel-pcie-verify-serialize-dstate.patch{,.sig} + 0667-btintel-pcie-gp0-cause-w1c-write.patch{,.sig} + 0668-btintel-pcie-dstate-races.patch{,.sig} + 0669-btintel-version-tlv-parse-errors.patch{,.sig} + 0670-bluetooth-fixes.patch{,.sig} + 0700-pci-target-speed-quirk.patch{,.sig} + 0701-pci-amd-enhanced-atomics.patch{,.sig} + 0702-ahci-jmb585-32bit-dma-revert.patch{,.sig} + 0703-pci-vmd-scan-bios-enumerated-devices.patch{,.sig} + 0704-pci-vmd-meteor-lake-mtl016-flush.patch{,.sig} + 0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch{,.sig} + 0711-iommu-amd-perfopt-support.patch{,.sig} + 0712-drm-amdgpu-perfopt-in-identity-domain.patch{,.sig} + 0740-hwmon-updates.patch{,.sig} + 0741-hwmon-fixes-1.patch{,.sig} + 0742-hwmon-fixes-2.patch{,.sig} + 0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch{,.sig} + 0800-platform-updates.patch{,.sig} + 0801-amd-pmf-util-unbind-use-after-free.patch{,.sig} + 0802-platform-fixes.patch{,.sig} + 0803-acpi-battery-hook-api-acpi-prefix.patch{,.sig} + 0804-acpi-battery-unified-hooks-acpi-sbs.patch{,.sig} + 0805-hwmon-applesmc-charge-control-end-threshold.patch{,.sig} + 0850-futex-wait-multiple.patch{,.sig} + 0851-futex-wait-multiple-fixes.patch{,.sig} + 0852-futex-wait-multiple-abi-fixes.patch{,.sig} + 0860-module-add-module-kallsyms-on-each-addr.patch{,.sig} + 0861-ftrace-drop-weak-function-locations-of-modules.patch{,.sig} + 8204-mm-opportunistic-compaction.patch{,.sig} + 8205-mm-hint-uses-allocation-order.patch{,.sig} + 8206-mm-carry-order-and-hint-in-one-word.patch{,.sig} + 8207-mm-classify-huge-page-allocations-as-failable.patch{,.sig} + 8209-xe-shrinker-use-opportunistic-hint.patch{,.sig} + 8210-xe-shrinker-single-backup-decision.patch{,.sig} + 8211-xe-shrinker-skip-active-vm.patch{,.sig} + 8212-xe-shrinker-backup-in-kswapd-only.patch{,.sig} + 8213-xe-hibernation-writeback-gated.patch{,.sig} +) +source_x86_64=(config.x86_64) +validpgpkeys=( + ABAF11C65A2970B130ABE3C479BE3E4300411886 # Linus Torvalds + 647F28654894E3BD457199BE38DBBDC86092693E # Greg Kroah-Hartman + 12D27D5D8C8E9BF1AABC7C7C7C64768D3DE334E7 # Krzysztof Wilczynski +) +b2sums=('5326dde778eb945f282740ef0d8765b46fbd198f1209cdfd7b91e5dac1312fc01f8bf0b2bc67b16a76de736edd8ea21b38b6c91e696ec0c4b39746cd21a15214' + 'SKIP' + '60eac409f1ba50fe319f6b3aa5b0af81bc7ce5628ca41c1af346a6d5ef0fc9c577527742d1f70ece7e07ea410fcd112b32d64f0a05af5b532f27b62e5e7d837a' + 'SKIP' + 'cc2a66a097b5567e80c59b7d6c492fef5e667fc71a0390908712c69512c4136dbaf3d150b62d04eff960c796f7a94e6d0915d3b92cb336318b49f5f516a3bba6' + 'SKIP' + 'c5a06c5632ba1eeb592f19b7f1581acfb7adf603b098d1d966359a1bb266a330a5707b64aa1f0e0346003e0b3008f46d8af669b621ccacd9f219838fb5e122bc' + 'SKIP' + '6aa6ea3690f3e4e145818650537cd110d33720d662af0b3660d95e15a3f91e48c993e31117c0a2fde852f55a77a83e3a50a1a95c0df78a33ae75d43d46a9fe15' + 'SKIP' + '91e65754432c2d33fd44d81f9c8664b8c233dece280ed27800d9a319f035db18764ec6b8c90617238c6a54ab98fef9f524ca65facbe7434c00891a2dcde1eea9' + 'SKIP' + '39dfe3393acf96effce036db341dc7310f33f2f6431edc5e9cfe95edae0e9782dbce46a29fcec9134cfcff361cdffcb24f195bc0c648e79e94eca19ec93962e5' + 'SKIP' + '9f0d647d9cbe6f758f2d260920c3fda78ed91ed52f8c3108ff9a1a263505b18430ea21700311e5e162dfcdadc8feef120b999d622db803363785c8beca1f50ec' + 'SKIP' + 'c94778de1f106d30c7f2628be8b99f5bed8864e09dc3298e5c85181804150df49f3b151eaa94f801f14b1d6c3b132184d133840c4903192b565799cae226a4e9' + 'SKIP' + '3d5a9ed6d78d5f82b43da9fb43cb57b5621faa7601ff04bba71b5c3ead05bd4fd916323ce68e50cf178e2a9c14bc826ea85ab203c878de26446618f180a5fb4c' + 'SKIP' + '64a2e489285c40df691f822dbca67e2b2f21446f300465f01bb589380173f6da182eda71d09a840e7ea3e14acae940d3cde66fc3b476ef6417c6e8479841cc56' + 'SKIP' + '921a4b6ca25fb1a10588d7a3df65277cf6acf1115e618741486d230bd8eee16daef3f712518f98c8a49222aed468e706015eb238ba289769a464f5f33a21b21e' + 'SKIP' + '486987a57ff24ae8c58953c01db6c8e4f4eca4093a8484b28b9a647790a6757a381631e13d64605bb009613985b686a0f98ef58b2e2f9c9ddc5b4d0de1c62de1' + 'SKIP' + 'e2d21e10be9239260aaf41ec5584885555d3d5150a817fdc2b04001444ae07cebefd140b20e841c0988843749e850ad52f93b98d005d5b158e158454c2020691' + 'SKIP' + 'cd6d3232202e8e6a44e80783becc1b527336027420e308f354b32b6de1f83de210aac78ee0c639ba23030b4a0811cf7728bcaeed08e9dbe11caf3edff380ed6c' + 'SKIP' + 'e59c4da548b2ea4fd6144886e3e2e765b3e73972121e9e73dbc05c066834b2b35e6ef4c17617e77efc90260566bf7c0910d2138d8d5c1c3b6094eeac9de64cfe' + 'SKIP' + '9809e258eb684b80d508fa2f2fa270683b62bd1412ed05a970114aaa7d84c37c0beaea51f9ff8c6ee1bc7318c4aee3725e9a1131fefb51ba700801de6ac414c5' + 'SKIP' + 'f115e8c80d723f7c24e6b1638b801cd664bef20acb1d2f6e6f5612744b916278693011782228cd3f4d0518654b8d53309bc5b06bbe8ed722fab9995f369bf548' + 'SKIP' + '31abdd15ae3f9709d6912c90319a0b62d8380e1ae1169575c0e8e419f8ce264a7cf7c72558a85719cd5a1cae7341007adb3e3936268999ebd5215c2ed288f22c' + 'SKIP' + 'f95af54bcfaf17e80d9c0f60243d946aff2bbb796ae47c92a97a353f598483f03ca87fccefbaa47639b1018b82e7879dae4b8759e8fd9206b33d219560d682a7' + 'SKIP' + 'ff9a3e5df8457880b25caef9de90a7eb513ad8de99296ed503268749a32d8fa79da11f598a5fd80d28231abdd65a247e2aa92ce7c8ccc9f497fa483eee93aa82' + 'SKIP' + '55951c59286df43f069302b0b1036424812f80b45c5ea13219fce1bfc3e831731432c216288d722e44493c736cbf89a3e44801b5a4f1f242c17b5a89b236a5ef' + 'SKIP' + '737db39c2f7f46550de4d6d80659bd6c1fc2bf1ca42bd7bd6fc345fc90af995acd056051e12175ac6c957333629a017051d76d5359c871158c93f0a294fb8de5' + 'SKIP' + '4d0646c8ad139add6abb62d75308d2d7b5b07afbc74a0f0297ffc2148f0db38abaea16b048704187da49fe3ddee8370b10a7a41d6e62b665650cd79e8c392b4e' + 'SKIP' + 'bd7bce1bf0ee24ce201fe0e5f0b8a6c829a84d224800547cf97a893326381e2e6eaed9c70529a6864b0c338276b3a307b14e26fba221e62263b90c02eb5e5f34' + 'SKIP' + 'ad2cfdc3d8de2193110325395e11015577f26ef1081307bb236ed73fbd109822dd44ea026a57c2e17233e1fb7982e78aa986b71c043f42887e6c5d7f51b84ea9' + 'SKIP' + '92cadbb0f7c288987838534f523f85a67d07db19ce27fd6c8717f73c02f7ec7b7b47276fea8b2a86593178dbc4f44e774727050f2b46baafdb7296028fb24a0f' + 'SKIP' + '0b281a5780efd064a6c98a08a41eadb1286a2aa5a7f1bab33d3adaa82713f4676bd3acf07556f3617ab0649f95fa5ce3a0418da1b6ae48cb580f0d7d5d9752b3' + 'SKIP' + 'a51e5f2a5e37c350fb4d715ece644c565a508970c3aeb1d28cb6cd03a0c7316a1935e028b64f20a03818926c611b50ae0ffd77d04c676d604d303beed0f96e1f' + 'SKIP' + '71e8a5d91d285519367ba73241d01adc3b61a2b7b21f8061ecc3749fbf9d87f5ca414809343fd37530bfd5226f919cc3d87dc3b4034cc5b8be9c720f8b4676b2' + 'SKIP' + '64ca5b3c45b579c51c04f1177c8e6eb25db4c76f17f7b253c5ed959c9688bafaa97da701257435b34338432e88071f04a8d4049ba66895dd3ba804173cb08b28' + 'SKIP' + '4dfbcdb23d7117b75202944547f7ce956dd8fa7405bc5ca4856135e2becc21d950eb6e1aaec082da4290ac6cffa402686c2c9137d4dc23952796ce3334b95ff7' + 'SKIP' + '51a7a4f87d53e4b3d25041a0536b238d4550fcfdef0e7de5aa75c26a7a9217f6f3e260670154b9fa6674470f72e5e09c76571e6224d8be4eb5dd4383fef64a55' + 'SKIP' + 'fd487cb02212ffdae5d8beb7d895819377686085b95658dcf597a534b017adcb65dfdf06e0276e7322a46dc28118803b05c246c22e7d3c361f1778ed9e12a3c6' + 'SKIP' + '2c58614d716943cc1883dc513c2206e82f49574eca79f3e7dde21f8dd0f02f18611b2b2a444745df820c30c887d8263bdf9786a4a90b7979efee8d86633cbb88' + 'SKIP' + '218d01002d5487e2cb29f479f9ef9a2beb8226d2adccd1a9f932dc162a8502003db19b1bf74395b0239a2a15888131bcdc969b737cf56358dac6ab14d1b4501d' + 'SKIP' + '1b340a502dcf5a1680caf5320b3aa72aa4317e4cf1d877c1f6425e281a5668d5f092417e1f282371c0a211344f5c187fb3bdaf3f97c7e122951edf7e4c08ca58' + 'SKIP' + '1124c5c3fd5104c886c841ead1ae9afb42683388b640b1a86523dad9919c6bd59a1f78b07ee5a213e0dca77c636a29676af0592d4ed1735ea35f282f6f23e46f' + 'SKIP' + '505bf01a9d6b0926b557b673bb686d1a4ff73ee70539991e52272fbf58aad3ea25cf5ffc5c2d094a2d5e78b18a1a134f2ab530f595073a2d3eba9ff2c1418e1e' + 'SKIP' + 'b4bf4c4c0672bad91d7f8d309e741104918dd8ee8688a00d600379eba5828d1b8157953377c73d0b58050b4ff888c43013ede4e9c959be8d9c028a6143bf58ed' + 'SKIP' + 'a5ae2f6c29ba850292fcd1cd39d7af6041169ad9d73151d8fcc07ec2e1da473f3ac801eda892082b615d7f19c2a3ac17bceeb1d100dc1e2ff4b30287bbd8fc8b' + 'SKIP' + '3b8e01822f9f97842c5f7d7211df876d46d8477321546bd5b8cb74484550a2c520ffe351ce0ebb7df5659d2745187081883c091574c855ae7361315d153bc557' + 'SKIP' + '90e189032c6a04ca809607a5c9a8e798ff2f3dfa7d82bb510eb608da961196bb4b53f35907bfa9ce4006fe182102900bfa20f4566b146aaddaace4fc19adc305' + 'SKIP' + 'b9f60ea91694fb859543cf895ac9d654edd0aad92a3bce6ba9cfcfc450f413e49bc8cdb08adc6fba1a46ef319c10cdc501e3ffe6b37de222b11cd1c6cf138db9' + 'SKIP' + 'f80573494f330b31af70f1a079100082e00e3c7e185bbc51928d09d2ad3ccabb3134c72a0edcef994d6cc517015190d88c41301cf73c73419c594977f86a2906' + 'SKIP' + 'e403bdc300284c4f0f4302e501b8ccfe5e9af04e73a6070eb6615322f5f40ed6edad53af2ed278741f61a4e3811b92faf1af02f113dbcc2a19bde335a55930d7' + 'SKIP' + '5de29d0eb5264e24ab9228bea2ea4b549b3fe37ea67c045df9f83064f11c2f557b9641e772d28db59f8d258418c77435b66ff471c3695043f0f8275d5e7b1685' + 'SKIP' + '25a4ec87d1c789cab55e8ee6357276eb2e87b5e70eba2cd978b2c898e7b79de3fbc8cf5997fcd660998223b6173c98e440c853ad7c3e116f52a48d38622dfb46' + 'SKIP' + '2b33b11e48d8dd8d6743f26170fb99eae38541e3665e2448d91cedf729cca7c0278bfba1078ecbe88201eac4407ec5bd0292a97dbab9cfc67e42646712befc1f' + 'SKIP' + '5ef0d9561a570941752fd1976a2929eb25fb4dc16ff7fad09ce71e0d6881924f1ba8839574f7f877bd8089d116d689e33a54c14e2f177fe797dc86b305a74c0f' + 'SKIP' + '0415549ab1bf3ef0f2af4e62130b66e80d31dd3a1d1acda1cfcc2e4c926f25cf9449153736216a564cbd0710c0f0f1294607bf27c26790bad16e0f8956127e32' + 'SKIP' + 'a0a17aa48cdbf60db7a6d3677fae8a3388757b0f1de71043d8eb93028710f5a26aa57eb2011199b84e9689f7e4457843b74a5731c7dc14e4d1fca44b957bf33e' + 'SKIP' + 'ff1f07b3ad829d444b92c93fa63ab2c08277fa512483806d119a4cc75efbbcfc197dc982d9a146b7e9b94a9ca5bac95eed54735f607d7715cd52444ff0039e30' + 'SKIP' + 'a5670a422ae3d084f20800a5ca2c5615efaef4cdc58e466ceb25a8c56597e592cbf3eea7f4b8b28f1e7c79e9ecc7ff29c284d7be41de26fc6291df020fdd3d33' + 'SKIP' + '353b7e89a7044b7426db730d5b900eb347907aa0c20e307d2317925d6021a969a343649ede7a32e698dad60dd4472eb197c9578fb0e36fc354a60266fd680cd7' + 'SKIP' + 'd70e2f90fd0630f53b9680a1a935294d0a9e86e52ef9a712905a7799827ced2ff5acfa27a51980cf6f8157d60d9831cc0d62c623f98cf577810a4cab02b334fe' + 'SKIP' + '88a071e8e20be14db31253152064a26961b74c329793b7fd0c81b629973bd39040e9a66189e3dfda31ecc189f82e65781b310603f498e13456b8090662f80b0a' + 'SKIP' + '0cdfeb8a469295f0d7afc27800f5109f5c88c4afda93056d4c4fc9601988334c32d287e1490966ae21bbe80c5e4f8b8da2cdb6a019ec72682521972840247b8c' + 'SKIP' + 'acc6611ef0605b18b3326e2170f32c3daad02b6472b4fd8fd2a8ba4f99a35b319f2d67b6f1f017e9beb6e8cdb8edc081e97382f3cbe7999d8ad57bd5e929a9bb' + 'SKIP' + '29f44ba6256ca05c8f40f0f1b0e813a5b3928f23e37a23cef9e7e148832f41d8ab4ec43b398ef21a06cc8588e4feee24fbf1f3ec4428ef1b22b1d43a776022c8' + 'SKIP' + 'f3437588231ac856c45eee210b6d1e4f31019480665ae31f62e0fcc4b9931cea4bdcd2bb95345cb9dea26dba43931ccc73e9c9ed209ab3281a1618378658ec0d' + 'SKIP' + '824089f9f45e2ff9e788d874bb9294b9208b4486fd22c56cb59d4d88cb996ff5a81ac22f8ff136ddffa1e40330f02e53ab759ffea7e4535c11d4f8195069966b' + 'SKIP' + '22e8b6835a86ad485e5b23ba73a4e1515242b06f42063c99d0dda1f9248ce222e003acd43a517dced198a28bbd1812ce5faf66fa589717734558783fa385bb13' + 'SKIP' + '7228e249d25a99f5106040b8ddb5705979b3a5af21ca60d0d43a9ecaf6eaccef6bde8ea69c896cffbf2b5963ec4f68987e69b184a8885c7f4c98d2b05fd59fbb' + 'SKIP' + '4d5c5e2fbb5d8fe50a899bcfc629645d1bc9ef995c76611ecb38d25070552487d53ea59cb48bb3922d9d9965cc1f7d37ceea4f2ec789ed1bf37d69b831dea6bf' + 'SKIP' + '47015b9baebb1d6dd2a68321980c1c97da097825966f480c8569bcc9df5bef0257c51d5f7398960f28016258eaf1fff25bf142a64a01b829e882b4c1dda10612' + 'SKIP' + '4f3df2be1b52573ef4299934896dd5b4a5b9ebfa1f69c92f125edee1aa2db2f99bd2e6cf67734e1c953e9413bc6936067e8ac619cad66a5fe8dbcfcfc7906b83' + 'SKIP' + 'ee01ba98e614695154ba62789874843e48ce2a4715b3e6ca0304da0526f705672bb29253e0c52dc8f8fd3148c072067232ae6f4e86315dfc27b1563073cb92eb' + 'SKIP' + '0963ee814b6f64903d67757c5c55a93ec1f5b16374af16aeff2e7e494254d19031d4e1422428f4f7a8167592b7750a1db87476871eeb5cba851b377e59911149' + 'SKIP' + 'dcb350ef2987b801e481b5cf32cdfbe47018939f6b43e45b6dcff87eb75cc1a48f25e679caa823f3fe6391048f216ed9d95ae79b9cac237041857458f56e7f7a' + 'SKIP' + '0e4156949673d16caa6ee1405bf33d432ce2632e433d0abea2f4e9bc5b413500573ca06c10b8dfb477d2a6c7b4201f66ebe81ffb05302e3771dd2f0c515fc5da' + 'SKIP' + '9576c977d2c95cc474e84ac8dd7683a71df38d1d6e1ad80065cfa78db8185c7a52bb408af9881a71767a1c7e3f011424a180d0cba574b14ea53f65a567784181' + 'SKIP' + '4834e1cc74f3902e8e88eb28f9fb1f2bc3cdcda6745083092e7fc39c131bb0b1a8b06d74e6112e5d4c97d14e8b56302096691005474e6e5d2720da02463246a9' + 'SKIP' + '5d82f32f7c04b084530722b9848254aac289c2a754a10e16821083a871ec14065dd9ee83e72b8e9e8ba2915f3fbaf17b0874df724002eb08a5f4f84d1b6aecd8' + 'SKIP' + '4928cc008dc91fddb89b154b89b1ce2bbff14d8186c0ec1f81971fb9d3b622475e93e42015916699c3442e2268680779f545d183112b57dedae96fc48a75844c' + 'SKIP' + 'f93494f5f3196cc35d017ff9719d146bf3e5e7bfe32a7f5e75d96468ce30ef367428ba83b1c99b665064d3edaec84cf3bf18211d8f7b4f118b3bdee495eb8ef9' + 'SKIP' + 'eb79554ef0d014b94bc72d4d559c2cc5419df96486acb3b6a09d5e8e9dc48db626ce0f90338c67fe873b2cc3c45c3f308c8080532b60f74a07c9e39e01d34197' + 'SKIP' + '89482f70ea83fde5a88554f54c866d11c98baab1cbcb7fa6fe0079187821736b7ad9896246cb3976ec9d471fc0ebcec6dab32b95b4928704e23e3f4ff935f221' + 'SKIP' + '31202d94636ee8a62214952d0d54eb12b8e1e264edd20c374678dd442d5fc9f8b3ffa2e94cdb6d27c58004a660823d62ffe11aa81decb5af166cc6912486b9cc' + 'SKIP' + 'c0551a31a3c63b70966c9f87eb852cbbf43a13f649bb14b6fd2e8ca23f7fb311ba55d94ddb589a78a432eb225cd2336e553d399787071cee9933f2078fe8b5ad' + 'SKIP' + 'e6f6460dd43c5a7e4d943e6545479438286712237c9feec357317b1431aa778684132b734c5c113f1e57180de366411542c29f62507095e7db62e2d9aa6ad9a6' + 'SKIP' + '58899f7c2bb14ee442c6cfedb9a354f729c03cefd325cfe71da23f33d5a548f6083d5ad922231108fb58ee00f7ef2a2d45ce58c5767079e3ae3efaff306924d8' + 'SKIP' + 'acfcf80889e146bde867b12a7c1b4a7b88a71c09603d58974b647d8066cc281b300b7a43c0e1820f22fafb5f7056522091b9c6c0072ae6a4835e603578c5f95f' + 'SKIP' + 'c446acd1c5e498f0972febf76bf6198b4ee72c6e3e4ef285862564f2467d7ad7ad74eee88191fe1fd887a90a19ad61a3945ed9ee22a2ff6902fc5a806788b151' + 'SKIP' + '8bf8f181ffbd249b0af3a8fcc8463d84daa3c4aeb567595065c311f29b2dec2344fdd240d30314eae2c3d4a4daac53dad34e8452df11e386ce0a028267b18c0d' + 'SKIP' + 'bb06066e90132f0172333d46be54ca816eb7d3230a193a6cae765d8edc50df4a6ba9fb7c0647cd6befc8c3bbbe1d96c285ee202812477d7295c1130ea8cdd6f4' + 'SKIP' + '788488e828ac47a55ab78ad43251f7a2e5ad15bd5b5468bb31d4ee31e5de01a79b5680d5b048cb123eb3b7bde75e6b3d1e366e745009ed4129c8a6585d92b6b1' + 'SKIP' + '3bdf369bc73fad9bcf5b866043ff007365302318f42de7107fee47a7e8404c02c9c8fb5762d07ef10aebd2eb815c5483fc4960b7936e30ea5aa969a55f392474' + 'SKIP' + 'bdc66e50a9ef697e3baeee768f0f2dc56485afeb8a4e9f9ffd45f183d9614c33e0d0e72a8babca87963d1d9d701148eb41990730f2215a1c40e0965cc7f05e78' + 'SKIP' + 'a22e13b9bf0eac5d4190fd42bfde72ad0830cdbde8c0d309b2dfe9b0151e4c85f9f14f595ba3f36af479173ba1274f7700293c3d61dd913f711196a2dae8d6dd' + 'SKIP' + 'ebf13eb83afc051e3b9c84bfff7b326d73de6bac03f5b4d5996485d06a9cc87aca795b5c029646f804d62314a97e4a2b5da0b5f72f71556f33b62fd26529797e' + 'SKIP' + '8c6b5b96a3992c7cfbe50384fc0a4504e6d522c6918739f822b5bab29066eaeee7d1cc525b41a9b5b354ce020b1837e88d9bb940f3d2ba55a034aa9a845d489e' + 'SKIP' + 'aa24ab789db9badbd38db52f1e01fbc9d5abc09d812e2426ff281c869bbc0923cd903842d0c10ed8cf0e1a4695d3508b8ee4650f6a3eac3655247830aebb2c0b' + 'SKIP' + '1cf95a50e985ac37abd0faf86f4138e510cfb33af0ec172a2ca63f9252e6e4cba2f6c43a0babb11a96973bef3b7bf309a0f22ede26dc437673fcc77afef7fc31' + 'SKIP' + 'd5ab07d8a1db9191fc3b0d1f44c0237e93d662fb8bf04dd55385d8cded9589f66c8212a4d37c651c505fcfcb4a26da072c0be71d97fa0774b4724ba925a7af8e' + 'SKIP' + '7da8c7cd405efee8b37aff9916215b2d7052850f734b693656d2b66bae485661484efadc7207fa00dca5aa02d5e1bbaec2df9abc3e583f280097a939fc32096b' + 'SKIP' + '36fa6403c6519e064972afa0905cbff55f88fb89cad7582a89079f657537458da3d93deae474e33e018928d03090e1a373c6246b180d79f43366e16ccee533f7' + 'SKIP' + '44dcaad2ab326ebee62d3e63207a161dcb1b63bdb21412b5624ca7875bb6e99997528683a633d7dd526dc5ae9408e73bd066e2a1e5b34ba5c829162df2265346' + 'SKIP' + '69c1d61ffec58e2d3058d9e9e5fda57a089397d5ad451224f75f1cc2816c7f3fbd650b31bfb5911157fd364f77cb6f720e0825ae3deed8fe9f03576b8f7f1b31' + 'SKIP' + 'e3d60abe9fbfa046409598588dd23a9b16439474595136526e3169ff47982e011ede263d403211f5f5692ac43cf88af5bbf0d11b8e7e959478305c67687c525d' + 'SKIP' + '1fb895cb1deb1b227515087e12fb0f7fab70b0db25a1a535fa3c294a5455af4d987d02c7c8ff24aed41359055d1383ea90bf9709999382610ed156dbc4069086' + 'SKIP' + 'a2fb510d537b9afe8719334e5578a79a8ce7b021ff76c59830c749dbd963c38b7dfb60a61422b88f76886ccffb5ad5cb456b307a14ed68a5c86981eefd4fe3d0' + 'SKIP' + '5ecc37fe83f8dad00a82aa40a0c75d7518d6458b2f22d77820a28a34d772f1255cdb2befa5e525344d5deabac8f5dd092434a9ee2a9c27ccca5c5c231790c017' + 'SKIP' + 'bf138fd2ba2618ae9ff64838706c2212b478513e04b54ca3bdd8bf97292a8a310d73e0cd96533be62f139b645d7ac5de22a4c3bc1fd9f67e807bb862e965ea08' + 'SKIP' + '825397852f1c25b18c37d25bc53a7706af1eedd97cb9cf85ac590d1044e2254d06c4639bd54cac06ad42534399081b4ca17b0b10605c152ed41a22674c0ae42d' + 'SKIP' + '42a4c3debfa847f46c26db0d3e7cb1a540d3d15deae359b582eb2c71514c2cdb36c28c8c57b22dc32d0cee4d00ad7519da01c66127446692c81ea7a9178d722e' + 'SKIP' + 'ab28a1f4f1756b8451840566d8100cb3d0b498b13d006593c72829b9783e94900bae78ab47c576d156e1d08c56602274b3f7d5bd885de17336623b23c3e4f255' + 'SKIP' + '8481f23c33a84d8efb798f4b83f78011f74cd5a3dec428b177d7e600922836c1eec61c4238724038221d8ca2e2cdf20462c5911085da3461aa315f7dd19d96d8' + 'SKIP' + 'eca2778279d88085b6bf7af742773ad533906f98b146ba2526a9e00136e154913f233be728105765b0d2fc2774068f670a4ab1b49d8a7486d20e04d116f71c0b' + 'SKIP' + 'fea498b5c5ada6d7f57caf652b68f687081aae8552d2d04cd9e96764efd1b896208671f4f501210bb557710cca3ceb0c02ac2b5da6d4c04c210e87ec2d715384' + 'SKIP' + '39650b6ac7f62174d4b24e5267f9c6042c22452f16c649e032570eacf428e83ef8e10959fe54adf8573ac1c84d6082eb713ae5f173165af7d1f687e5d26fe6bc' + 'SKIP' + '3acc8aeadbac6ea2dd5a4fba4c10165dc1e6a4a55b838bff184fa46e827df67ea4e9a8535e17ed8cc80cc5338252306a76049af5956dc767bd591729b2aceb4c' + 'SKIP' + 'd442bf561a4b5dd1058c45a8181157feb268a84da94ec7f260dc6d10f7e0ddb71f1097bef945509f3d212431975ad3197f778bcc1c93ce1829ed2070bcf6bf9c' + 'SKIP' + 'c966ed5918d71acb91e988f3776d84db0b072f42e3e3f05cc178fa92a0d902fa3e34beb790c963042b52bc500d6ab9a2802b84a8411ca02cc1e28d361603bb2d' + 'SKIP' + '60fde203ea68744ea9bb8b81a18aedc8a4de8a985dc65bfd6b2f6b43210f87c2875e53eb61f4498c9b236892abde92da32755b69ee5bdb23f079079f22b529ac' + 'SKIP' + '56420f41da60382143b4df2d1fd58384180ca3a179b9f1b5082b2e4b74976ed13a29725c622e61c698631d923384082b43c9f703ce417d09e99556e4600f981f' + 'SKIP' + '5d880f3cdb32ed6fb7ce26ffbd1774fda56641d9304b5372806b6e559dab31dcac233cd6765a0b64bb6afe99fd9602402fb5e3b8c791cd1a9eaf9af28ca01bee' + 'SKIP' + 'a6098df3b653702e2689ec25934839c8a986b0e2f113b216ff4f86c8c5d530584f61d33bf4a027d1b304deb989406a3b342f13e11a66cc91ec69457c5d2e6f14' + 'SKIP' + '4a4af88fc8a8c37ae6d20b35d19e60a17672569d5489be120edbcc62ab3ba4bbc43b78cd0799b9fd73c84b089364320bcbad6fcb7128c2cb06d15ed984d6fc8c' + 'SKIP' + '411fd61157830b68da00e19be0d0db7ed61de97fd99b46a31c3958c5f66885265521e9e099c4f3404975db9de9b178cb698dbbe1399d81bf13ecff79b9ebd8b8' + 'SKIP' + '49adc1fc4c68da5c39d96746007d19107ae2d293518cfb36f3742aeba7723db31660fb1f7b3579e8fa88bb53206dbd1e718934f9b37e87925c6c0b06759e77fd' + 'SKIP' + 'f8a67f01fca5614f0eb3bfef59658913fb9b88b043f57c8bfedf04ad79912ff04d5d356dce8ff453ca001c151ab1bc017dcd7daffd5024e2bc20b087d08ab8ce' + 'SKIP' + '561a635f88fb3729937e1632d736a8981002cffd57cf16edad538381de8bb6a583f48b05e4d2bf1c8b6c03aece2495ac2850c1d66c4b540af2b88e1a9a0d9c2b' + 'SKIP' + 'da96dbbe3b6b4e189cf7bdce14647bba07bbc5599ce28ed385a1c34d237ee7ae3ac595d2552444615f2b15c2b7eda42f40743d5bdebd443e3ec31e5743f59056' + 'SKIP' + 'cb2494c930b2c2c4cd6755494339c5f95ace87940b2b2e51928d98ea63262e4bf7a4245f629b8bb06e7592f45a0c379e5583c8695563011009fdb07f965d7c1a' + 'SKIP' + '6083db5b92aa46bf54144b4d2fab368916974ef01334fbe934bded3818c5dfb4fc8d5d0e896bf1baddc29aac1c559f80dabc727082a757301117843def8089c8' + 'SKIP' + 'c25bff6e5be62aca887ae0781899e37a39e1aec90f0eb934ec5394abf560f4d02ad1fb3973a45d00058b46555bbc8d9febfcc8026e210f53a8864a91b3b80a9d' + 'SKIP' + 'e70e0077249bf008e069041a0239c6bb63075044cd0df3218649ff92a6a2d43467026886f2a6a70c70552268f6936764459d7cc0817a103b6a0f74c37c52c72d' + 'SKIP' + 'f1f853a0ef095a53080629a00598b7b1e0023141fb1890622ffd8efc4688afdeb87be4f1a096b76868840d45c10b3c88bb33f44677ff70378d63ec81eb3110e3' + 'SKIP' + '1b63569b589e994d1869e2f8eaf5d4ee225fe68862ac5c848e46544b827ca5fddb4bf060f5f39001608fd9bb284eec005f5f9b095307d3a008c9ea8957c2fad1' + 'SKIP' + 'f6430036af77a31a9ddd16200bd3c2c7b1b7e46475c7917dee91c835766be046a31736123ba8429ca2f0f8d3b93ef60522873bbec45d50b954cbb8319e6f25ba' + 'SKIP' + 'd7dffb68fd22db7ef41d1ac193dd297fb6150f034f257a44e6cb0a4848dc4a94e328c2e26d5296a72993e2db75d09e3ac46456d337a5bae767fb266082d3cc66' + 'SKIP' + '4e4792acaf0455f41cb1541d20d37e7a39104aa2dfb505e9be29dc3e7fecf328557780982b32cd8f67f77594542f5b8104766a4e8b5ce2270c9c601728363b3f' + 'SKIP' + '00417f024d2cc0b0fad28dec7f11c3054f5da7bf8c353d06fd1086be1926eacbe07ba924380157f270aac910d771f909f34beed0f60106f6ae60c96f58423b4a' + 'SKIP' + '2c254a2df00e79f03b51d13846f232073e9276e022c7bf46bfe810cc98456d481535152afa9d915e0726e7701594453f9363b6190b8e616db203d176a08fd31f' + 'SKIP' + 'cbfa20431371f3332f28013bfa21beef21a5a6f616e09fa91e9adb42899cb2e1880e27cf4b90bba980bce26710af3ac3c1e49054df4e48051bcc4612732d3e9e' + 'SKIP' + 'aca0527f5630671a319e7ecff958a3a64f29df73b427c67c1d29763cc1801fa82e96761c3a61c22d936913943a49261da64d490a0752ba9ffc8e0c1d92f99835' + 'SKIP' + '803736a8e836560b3e50b7c0c8cf1f9ebb16b8642cc7bc6e5167d19037bd757431565fe4581776e50eb2693c49f778a24fecff41a553612e7e498f755b8f2f67' + 'SKIP' + '4bc132d9c34deaae9b13d08dcff8ea83aa8f9ce4398531e0e0a80df30da3808815f3a587fe5627f6553b8e9c2aea6cc1749b752250a91c94f1cf8ba4f3eb5e8d' + 'SKIP' + '335c0c1164e9a2b9a9a252ddf7418ca0e6493f2f0fddcf3f01ae20666b6cb6713b8bf7a2a165d37485d2107b6c00f42b201974154c41c15c4456615b3bb0d78f' + 'SKIP' + '01a28159b9c42e6b52147d1b061e1a2cb40ee381f8b6f7e2db3f94adc160365bc0dee602713cf42745fd2275b822b273df25d739d7b77f03273922edc746e50f' + 'SKIP' + '42703ec988c2b1865fbe4eef67840f4370958e3e874d9f8a03a46c43619bed7656c56cae0ef1d8cca5340648b47ba7ddf813d25d9db3307f10146c45b8e34ade' + 'SKIP' + '029d9e899dd9e7bdbcacee34ee9b468e2e2a8f726e38d014891c8353f6afcc52a58c7d9289fb0487cce4d90c8d51f578c27b1dbcdab42de7308f50b7baf27877' + 'SKIP' + '343b48e982195e3f07aa95dac09d5e09d5c02f823b91cc4f0775fa9529e9a985923a5af48067a1f071b99613acfa25b18e3b083e094f3cd97f6758a495c91c3e' + 'SKIP' + '9ac15b3542629c5333cc7d7f53b4f2995d807a31331b9e04d3da051be0ddde7e8c3cbc79837ffb49a4d364db1680cdc6d763465fa56bd4d26b16b765985babe1' + 'SKIP' + '70e35154f9385156a11280294cc254cb314fd89653daedb46546a6bd64c550e3fc7e7a8df3e653c516687f0317bcc710fce82b4d649472333c501ed85fcd6cf6' + 'SKIP' + '576fd826f28d945782840865f3e5b7c87d7f6f91f08e473ff0d06a37caa2f89cdd9cb4a7aafef5551363aab9c60e887ee794d5b6292874c12baf88c23ea5668e' + 'SKIP' + '01125c624a4971686d02a23918e3da697645a322e5a7638159636d9a16c82f815efdad1d8e22c507518dc0b92b6842277637cb2d0940f4eaab40c0faa77d8da6' + 'SKIP' + '322e4e255a2b900ad224ff376b00199c40e26fc5407e15dd36c1ca4e51c7ca0431397a69696959d1c1910b02a4bdac8efbaa20f6f6f6dd5424b711c149ea367b' + 'SKIP' + 'ae93d961d0eef41ed39c473fe9478b62fab13ba395333b3c11b34b7787904a3d2684520ec76dbe2603dd96a146a68bcbe98da1b7e4cc1e659246127384bce22c' + 'SKIP') +b2sums_x86_64=('94b27e0d777e81615d3d98ab7f1d4caec6f607ad72c1a9d495e1d5f3fc8bd3789a183d4fca35900e45cd2d27608478ba1a12d49ecef0281346f7ef9429784d11') + +# https://www.kernel.org/pub/linux/kernel/v7.x/sha256sums.asc +sha256sums=('12e8d5a973d1ad7c5a5c69882e4022b131ed715db7003fdcd760ddf8c3e51941' + 'SKIP' + '777e4bbfe44531c6504fa646ee74e95e8ff11f264a3fa281b528e25960e741ad' + 'SKIP' + '6cf74fc3f28a751354187b6cf610c3e43cf9088b5f730b68dbb575828c3a7478' + 'SKIP' + '58f21f8c48dbbb1295d488815aae50003155ec9ea5633ffbca4f0e17b18e8803' + 'SKIP' + '6a27e1b363f1bb133b9905f84b00e4d01885cac84858db46bdbf764849c9984b' + 'SKIP' + '83d51eee049d9898a217d3846edeef317365f4b74b277988582668fa71cb4a28' + 'SKIP' + '86dcf3d18fba4756eccba9997a3302445de347e878369c7b119851354d6a1c1e' + 'SKIP' + 'c89cb6da5e007551dfc6437a485adb664e9ac68e6bb80763dea757ef66c989da' + 'SKIP' + '01319b540a2cb4772eb4cccdc8c85ba4c96b150be0dcc88e3ac1290b4fdf6cdc' + 'SKIP' + '4fc90cc8e9d9979d7c839fd1761e42221577667ceb7e4502c354081b8d40d3f5' + 'SKIP' + '40177376862e4d7f45684c5e2a743f3da40d59817b0afa3050a3002ac6838085' + 'SKIP' + 'df870910371645a95140a3f92424db43c4e1a92bd493393e598d61c6266f1c7b' + 'SKIP' + '3d5550935087a7d82b527227e8f08ed98c2ffdb830b526c09e30b93137b3e607' + 'SKIP' + '2351136c78ad2dfe68e34bf9a70d377724257f6239e68bf8f501637b607af6b2' + 'SKIP' + '6c93475fc28d211ad7c15c691ea882deedeea8c0defe153cdde0a2a74488c7a0' + 'SKIP' + '718b40e15350049e03c0ed281b9257fca5432b8dec2e0e145e8b26507ee8892d' + 'SKIP' + 'b7ba949eea77e169aceb2c401d4eb83a7413aab6f15ee2a7ab1a96352f0aa12d' + 'SKIP' + '341424b925d506869793686e22ea8f095a34048595ebebec409c0a7bbd346ca2' + 'SKIP' + '7c25d0a53a115bc1f072ff0cfdd9aa88858e754ae8b15026a2582656e8bd9c43' + 'SKIP' + '336d72ab830bb33ef2a23bda1869e1fc071af64b24779281e197073ab70c851a' + 'SKIP' + '829300e576f418e64101a20d87f30f7c90798cd6e179bfb72768a83d99fa711e' + 'SKIP' + '5e3b455024fab2855b590091c9d14b0d12d5363f3d4bf025b31b9aa88b65eba5' + 'SKIP' + 'abd8c9326cecc9bb85db4b3dc98ddcb66306b34a6d84fb05d0805aed537e2dc4' + 'SKIP' + '60a9df54821cd98581e7476f8a7bb6cb0819762bdbed4d356332e41d164a8182' + 'SKIP' + '929108ae0a8eb4782cafdd89e3d4426d02d86f2c2102ed99e760e31f0bc3794a' + 'SKIP' + 'e1226c836a9c2fb6daff109e56ba21c13fd198e109cbb181de920af04fe153e6' + 'SKIP' + '2cdd81f5520b935e1d99629fbd6e1cc9d1351b301396316f37946b95084f1a26' + 'SKIP' + 'e65c2645b0d01301a91874183faed44a390b7a402d2dffd45171d210034dcc93' + 'SKIP' + 'd8e64b9da3beab7c33832c019da50d0977b39dc32ec1f649a7c3bc93a2fdb9a5' + 'SKIP' + '5e2515879d58eba10c861f73318f4c4b478b8dd592680eb58961aa4065d4c3df' + 'SKIP' + '874efac3eb32970f3e06275adc072a384b89ff69e2e5b7452d6146a6e89049b0' + 'SKIP' + '43aa4a11d9d48f5094b4c0e807d1d31598e861a50695bdfa52f19819b5ff5285' + 'SKIP' + '2b49e4c98c5d704bee0a0e2b38051d59177161bca7b0188e6c0feb555a95fbf1' + 'SKIP' + 'e6b770d37e80509ed7ec5d8b59b4d2e5d6dba54ba659d7392de3b567f1eb6e54' + 'SKIP' + 'a9b3ef8aa79488d1cd813507e040e0762d4c8c5845b7f4ecc29c6cea1ade8056' + 'SKIP' + '264d49d74eb4006c8eded08e39409045032920d76df035aebe8a1d0939d4b7b7' + 'SKIP' + '5cc215215fed4247c2d6b9732deff586331a07d54c3b00538a81921093a3a1a1' + 'SKIP' + 'e303da14a3c8a15fd1cb45394138f03dd16e66d2ac0d1ebcd933977df937d771' + 'SKIP' + '1f0c958b64ba48b8dc8b5548e1ad1934b8d4903fc16fec15014759e3681ea275' + 'SKIP' + 'd9eb3717ba98e270b0a998f8dd90cbda072f63b6a6ea8f66763bde3ea64e591d' + 'SKIP' + 'ce634014dc0131a44c3c95a8e9cb0a9de433f59d73fd99d3e3297adde65fef71' + 'SKIP' + 'd069e594d170adb016c5000d9cb7eac12c3c267a6b60c27afde7f046dba0509b' + 'SKIP' + '78feb2e2fabccaf954fdae5b776a22cec4a3f4135fbd24f79596a5274fc0129b' + 'SKIP' + 'f864c7daeaac0bad482bbf3853583d8a6cbbf2bf264562e397fc26355ffd5504' + 'SKIP' + 'c3a709af1589bd0c467565dc66ec4c01bed9c2b94314dde30c839084e594557b' + 'SKIP' + '1e2fddb2e0c5d184a2e8c774886cf9be2f2f292e4f05832b50e5b49c48a7bacc' + 'SKIP' + 'b9b8771b6a8bd7128f4344ad189e32c155abf72abd3ff646dcf5c78b08eb94c4' + 'SKIP' + '34991cf6cec6c22bc1a55a76bc5f72b405165a2f14ef977a0446df7c18bdfbb4' + 'SKIP' + 'cae59282e3d1afd69f4f5dc00a180c712ef464c98b8fd7ccc9b03de944dc79b9' + 'SKIP' + '3b06b5285923c251b0ebaf69911875f796cf7f1d7580ec33bb218509fea313a7' + 'SKIP' + '15609bef72571868fec6b8971f53b74441e5e93fbdd3c677ede963d0719cbc40' + 'SKIP' + '1231a6e23557936b811ce5dc184c23a7fbd268a20d582b6820c67125df8f07c0' + 'SKIP' + 'ec12a77671afb85f8297c86fc97f8314b4f00a1630acb199af12e3550a9d4ec8' + 'SKIP' + '1b1660064a3dadf2bb3006b140d1c7016a1ad051f27e7a4d6d9f3f40d491fe9c' + 'SKIP' + '40ac31789399a5964c4fd820d4cdc7214add91109bbcf4a614619e5d8b367441' + 'SKIP' + 'ab3b968d8bc2073e8c53478aa5d5afbadc5329a22b1486a014e5d0d84bfcf752' + 'SKIP' + '2a2a81e647aefda80192d230cd1dbae2aeb611f66b7d6c83694b9f9f8e2befdb' + 'SKIP' + '2772f0733267d12f36ae2a339c9aeaf0a133a20381a6b73e0c26f2ef92996ff3' + 'SKIP' + '3998c774884fdfc94be3da3c4c3641bd4b5aeb1878d8ef13bf0e27cd9f2e9994' + 'SKIP' + '0d5afb79681a948a65943f557d143c15126e2497e71c5ff50ac13ed8619a67e5' + 'SKIP' + 'e95f8fb6d116b30c2b86d9fb51747a9f9b4e5f980c1a3b627a38940db9d0e521' + 'SKIP' + 'dab92dbc6eac02771c72801d94e6a53aabcf629a9cd79e85e0ce2ba44a65b06b' + 'SKIP' + 'f55bc6366f8b9ffef744b289788a19e8604239e84c1af8b929a6922cf07d223d' + 'SKIP' + '0057dff07a3ce9c7b7085edd1f912958e01ce8f7400151d55dfb74c0c6a084e2' + 'SKIP' + '9c4c16b9593449ce556a4d6325e5e2205cb1698f9000a967ba7df118395b1ef0' + 'SKIP' + '00afdc277c53dff0898ac86fd44ead020e007373134d7c7c333285a9f1dbf786' + 'SKIP' + 'bed39a5e6bbb7cdac3f56a883a4684b2a63f3e8fe2f8cdcdd0b89b374b8d2a21' + 'SKIP' + '75d7fc371ba9b00a78af2e4b0fdb7cf79bf25a6620c983662d6b2e90cf5ce8c0' + 'SKIP' + '0fe32924142868879ac9417c67b0233b6ef8ddb0163183352479f5163bf7b5df' + 'SKIP' + '7444186ad4f6d8e2b52a3729064f649b035af6eae4f4ad46b9768c006419fdbc' + 'SKIP' + '94750a925a726ad6631d0486e7f3cb3796b3941715b188e790fa135d0aa5734d' + 'SKIP' + '143193a175084d65035bcfdcc81e9dfef2e794dd56d637556db2c73b117f708f' + 'SKIP' + 'f18821fa9527c7ee07a49b9c1c983a3584d5058f9734b520b5d51cb485c93f17' + 'SKIP' + 'f7ff13ea46359217d696c6ccd49bc3d74c441ac5893d5151d95138017b0d10aa' + 'SKIP' + 'd17493b3579c730d27dc723447175b70d991f50253c9fd419df5e923bdf7a244' + 'SKIP' + '92971bb4dbde209cf170838cfcd75d8ac9978239821d3493c28cc12623c2bb60' + 'SKIP' + '7245c6e2cb5c0b0ddf800894f087770cbf8ccc6f8b3f53b9a21c704e9dfa42c2' + 'SKIP' + 'd49629fd003900f13418c05d8c2fc37c8dea2fd8a15debb5b863008c9c46021f' + 'SKIP' + '411fe33ab7021dcf73b02cdc80a64094a511333c52dd754e54d382fe1145de08' + 'SKIP' + '5104ee45fc11994b1cb44130811435c84fe4db532a2fa9a722c7b03dbbdc8bf1' + 'SKIP' + 'f7617e3c4248e015f6f174e7c8659299d831035d0fb3c89acd1a858a202f91b9' + 'SKIP' + 'e7dd17ccd4b417a1813c21285c738a3fdede1326d8a1445086ea1af294c3710b' + 'SKIP' + '058aa32a18723035b18a770e1bd7f4b4f101bf5618bf0114e1874a398de42e06' + 'SKIP' + '833c5ede23f4a014f428c64b7da550cdcd7ecc939dfeb45dce172b18417888a5' + 'SKIP' + '21a9196887fe8453218e4805e171b19958005f38e5d21886c58a55f8d9b86795' + 'SKIP' + '29c61ec984bd342113b3c4310a3d5fddfd6d7db83847cfb26b84cc730385320a' + 'SKIP' + '4b5abcc24f557e83e4d385c8304c781d6ab78fc0a3935db97e01e7d27fc617ea' + 'SKIP' + '0dc5f0f91640715ee1744fb8cfe680de6ac1370f4df8e17d31016744f31d3638' + 'SKIP' + 'cd068c7e199f458356886eb321f759a91894bca374c71ccac242407d8b22a1f5' + 'SKIP' + '618369a173be9a5a2f91fb6044931d897bbf4911586bd94a10b43a25838872a2' + 'SKIP' + 'bd3535f78183d56b133986b814ec31a8c1aa933d71b3a611937e6377ee04af10' + 'SKIP' + 'bb1e2ab62b109e434bd2c2635b5912602b8a8cc0ba24743b7bb5f691dcde2353' + 'SKIP' + '55ddb7c072f3933eef42ac48f3b32f90a5298f5cf90b4ba5b2128a197250494a' + 'SKIP' + '62e446b250e96fb65a3068bac424e1e5fe4482ad6d7ac473fa94cb8ac047c0ab' + 'SKIP' + '8b55dbedf730b0dc675793418c21b909aed5db4311248bd277d3184839d261f0' + 'SKIP' + '5a09e7b8e10fdc61839ada49e9a33a64b240fa54847c1c0e0044518297196f0b' + 'SKIP' + 'b857f4c98ff5998adab1765a06ad307f9334a8d7d9644a3de556f2b0e9cb2b4b' + 'SKIP' + 'c28fca9ba015e96599627acf42e52737a6a846bdcbfd3d4af4147eda3109e12d' + 'SKIP' + 'd15cdfc9b86c40a119a4f21f4fbaec72efebc67677a7386df46a61816d4c6e02' + 'SKIP' + '1b070eef78ccffb3763b464f5a1b0636936f4c33b0be9b44ab116c5dcbadbebe' + 'SKIP' + 'eb0923de01175707151930d28b1a1a912d24bbc171248fa9f45f57a2125d077a' + 'SKIP' + 'c076ed3752bcc2033e435043668fe007eb1ea1760597416fbb5d90bed4947bec' + 'SKIP' + '0fa9fdc6d6c85435d7b3cb38b51823f458ab273c527fcbe21b945dbd89686304' + 'SKIP' + 'ef66f6c32ac98a311b7437265b21a8c70746f1ea4dfbe28aff655e778d09c28b' + 'SKIP' + 'b45303b559ab8990ecb4e0281e5d529625311e795d6c3a9a52c2c27498141e18' + 'SKIP' + '1728e516153acca3c343f5184c9894fe6f1a1fbc95abe1594f544ef601db39ed' + 'SKIP' + '534e68a989d36823f14a10299803f294eef39391619b4c329d78c20539d9fcd5' + 'SKIP' + '516e6ec51ca0330989128a4eb2a8f6785e5d45d930899cbbbf37b8147ddfd854' + 'SKIP' + '757ccc291d53030b89088802615ecf727df6f18ab2515cc0075008ebbd564e36' + 'SKIP' + '3a271bc6b0219152047fb2b78d9e695eb791b796ea6d8233096912c77d62a5c0' + 'SKIP' + 'fd6bf3ed3d16c788330630fdd15604836ec2a0b6a7db2b04216f756da9117bd2' + 'SKIP' + '4d598b9e00edf7c17d915eec7c8d369fc0ea40badb7f4576cb3dedd92a685d4b' + 'SKIP' + '98ff0d6196470c582b3e3841ef35bf82a63b57ebaef952885bd1905bcb8e627b' + 'SKIP' + 'de2682af1db7f5ae8cd74da4f9020bfb7d2167f030eb15f0afb7bd46ffe49e84' + 'SKIP' + '73dc22b7f97a6cc5a5f35d6b30b9b7b12be2566160a024769550290a0e7e4029' + 'SKIP' + 'f06834dfaa9e976a5778fa4fd07117a85bbff3b788c91e61d8cbc628e1b8bfb3' + 'SKIP' + '11884198740c5ac572cbe87086b1744ce19f0e1f856775e6edccce843ab097a3' + 'SKIP' + 'e6d848172228e98dde3a7ec679e7ea6bb0a42cca0b0105c58c8f9d6d44e33943' + 'SKIP' + '4e80f2d05591175d4ed0a1a144509e97260e5593472aae586c07956215d99162' + 'SKIP' + '1b442ad6f28c684068844ce93616690b84651e35870802b02937351bea078b4a' + 'SKIP' + '9be4f91e6a4be87791d700f44c228fe599468f06a4f627b79e75718ac020db4d' + 'SKIP' + 'ed635ed3b63cdb61614b8805aa5a9515d5b538522165be625dca89bdb7d6e801' + 'SKIP' + 'e28c29b9f359db85a60bfd49d2f28ba51f4d2272eb79b7d3e19ba8b3d5acdac9' + 'SKIP' + '3175c56fd2935848ce99fe10be1bc348231909f8479c3d3af911c5c7ab7f381b' + 'SKIP' + '30a12a616afa8fe95b969e90b42aeb240962b9fab8b8bd357ac00706abdd68c7' + 'SKIP' + 'eb0ebb8c55332dab8931c667ec84cd32c91c657d21af4504327ae05643108e1d' + 'SKIP' + '945c90d99f9a9fa47d61e471f76d17c0229ffa0fa8cda22de990a2ccc4194bb2' + 'SKIP' + '70ff41b2341836c27c5545a7948258f137d991c2879cbeb29f7af740c11d20e6' + 'SKIP' + 'b4efd997d3f09cbf258fd0f78aca44e4c96694dc4efc5c8c9a677ea67ebf5a54' + 'SKIP' + '2e1e2a0eb039ce61c1612bf6c7ab5227b99df053bcd5592da7758715dd333fda' + 'SKIP' + '6800dd82115ebe71d80dde0bb368fbd8563caa6c29127ffde0d6b5df81b502b0' + 'SKIP' + 'd90cc6570a47c8754e4c5d45834e0434c0a1fcabda9b8933b1fba84e3dabc083' + 'SKIP' + 'a008c052ca657efcd4e27b8f7b819adbc9606e261aac37d41a40cf67c094cff9' + 'SKIP' + '57169ef893dff957cbf33f7c0dc22f2fdfcfcb3befcd62ad59e2456484423bac' + 'SKIP' + '01ecc1adbe715bb31153a2350ca46e1cb8a6e3fdc6899b2debeff015af2412ed' + 'SKIP' + 'a4331d3968fc5002534063b42bd219bddfe4a7d6b08e4cb30ed60f4366ca3c41' + 'SKIP' + '028bf538c870465e1752514725372fa9eef6b7178d9b8d1e2ecc15edc5a63cc8' + 'SKIP' + 'a92a84405ee9845738c6b52d8f0f0eca16eb40afe0ebe0f4e9e1168597675311' + 'SKIP' + '44a0b10a6dc83465ea86f5fba936b2bfbeffb1b3f0b2e04013bfed99ba4f6c5a' + 'SKIP' + '6f01b5357af7deed3f4bccea6678b4d9e8afc83e598978f42f244241667f975d' + 'SKIP' + '0da7247035a359e2491933f9effff43ea7b29748f21a0e3080bef0018c2488e3' + 'SKIP' + 'f81f6b5769e47716ca318ecf76ab1c0fafa0e165fa858a64251359937bffcf04' + 'SKIP' + 'c67fee35a42866dd3c9056ff099fc504cdad9530c107d959331b5572b21af818' + 'SKIP' + 'fdfe62019e6ef5dfba2fabecc6ee5b58400f41ef000883fed135ecaca881b40c' + 'SKIP' + '07683e522d6dea3d3ce658ee80bf4317f6c3caf248259da960bc4610f4d1e807' + 'SKIP' + 'c5279468d93e562f509a6b599a2b7ca7ee0032d3fe35314c5769fc6c9a9234ab' + 'SKIP' + 'c0111614ec44014cbf621eedf5a4ef302a855423bc1633ee692392950e971d0e' + 'SKIP' + 'c2f916fa04d91edf926abf8fed086302fe538ba62d92450af0ddb6d3a33942f1' + 'SKIP' + 'd17774053ab07de92e18abdb0ff4d00352a02b6a97c48e28d8c875954c8eec36' + 'SKIP' + '774f337663b215c5aa8877c06ffce95be44403fe77516c1be9ef9789e2d049e5' + 'SKIP') + +export KBUILD_BUILD_HOST=omarchy +export KBUILD_BUILD_USER=$pkgbase +export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" + +prepare() { + cd $_srcname + + echo "Setting version..." + echo "-$pkgrel" > localversion.10-pkgrel + echo "${pkgbase#linux}" > localversion.20-pkgname + + if [[ -n ${_rcpatch:-} ]]; then + echo "Applying patch $_rcpatch..." + patch -Np1 --fuzz=0 < "../$_rcpatch" + fi + + local src + for src in "${source[@]}"; do + src="${src%%::*}" + src="${src##*/}" + src="${src%.zst}" + [[ $src = *.patch ]] || continue + echo "Applying patch $src..." + patch -Np1 --fuzz=0 < "../$src" + done + + echo "Setting config..." + cp ../config.$CARCH .config + make olddefconfig + diff -u ../config.$CARCH .config || : + + make -s kernelrelease > version + echo "Prepared $pkgbase version $( - #include - #include -+#include - #include - #include - #include -@@ -4385,6 +4386,109 @@ static int test_for_valid_rec(struct dyn_ftrace *rec) - return 1; - } - -+#if defined(CONFIG_MODULES) && defined(CONFIG_KALLSYMS) -+#define FTRACE_MOD_SYMS -+/* -+ * test_for_valid_rec() resolves an address with kallsyms_lookup(), which -+ * scans the whole symbol table of a module. Calling it for every record of -+ * a module being loaded costs O(records * symbols): several seconds for a -+ * driver as large as amdgpu, all of it under ftrace_lock. Sort the symbol -+ * addresses of the module once instead and binary search them. The module -+ * symbol table itself is left untouched, as livepatch relies on its order. -+ */ -+struct ftrace_mod_syms { -+ unsigned long *addrs; -+ unsigned int nr; -+}; -+ -+static int ftrace_cmp_addr(const void *a, const void *b) -+{ -+ unsigned long x = *(const unsigned long *)a; -+ unsigned long y = *(const unsigned long *)b; -+ -+ return x < y ? -1 : x > y; -+} -+ -+/* Collect the symbols find_kallsyms_symbol() would consider. */ -+static void ftrace_mod_syms_init(struct ftrace_mod_syms *syms, -+ struct module *mod) -+{ -+ /* A coming module cannot have its kallsyms replaced under us. */ -+ struct mod_kallsyms *kallsyms = rcu_dereference_raw(mod->kallsyms); -+ unsigned int i; -+ -+ syms->nr = 0; -+ syms->addrs = kvmalloc_array(kallsyms->num_symtab, -+ sizeof(*syms->addrs), GFP_KERNEL); -+ if (!syms->addrs) -+ return; -+ -+ for (i = 1; i < kallsyms->num_symtab; i++) { -+ const Elf_Sym *sym = &kallsyms->symtab[i]; -+ const char *name = kallsyms->strtab + sym->st_name; -+ -+ if (sym->st_shndx == SHN_UNDEF || *name == '\0' || -+ is_mapping_symbol(name)) -+ continue; -+ syms->addrs[syms->nr++] = kallsyms_symbol_value(sym); -+ } -+ -+ sort(syms->addrs, syms->nr, sizeof(*syms->addrs), ftrace_cmp_addr, NULL); -+} -+ -+/* Same answer as test_for_valid_rec(), using the sorted addresses. */ -+static int test_for_valid_mod_rec(struct ftrace_mod_syms *syms, -+ struct module *mod, struct dyn_ftrace *rec) -+{ -+ unsigned long ip = rec->ip, base, best; -+ unsigned int lo = 0, hi = syms->nr, mid; -+ struct module_memory *mod_mem = NULL; -+ -+ if (!syms->addrs) -+ return test_for_valid_rec(rec); -+ -+ for_each_mod_mem_type(type) { -+#ifndef CONFIG_KALLSYMS_ALL -+ if (!mod_mem_type_is_text(type)) -+ continue; -+#endif -+ if (within_module_mem_type(ip, mod, type)) { -+ mod_mem = &mod->mem[type]; -+ break; -+ } -+ } -+ if (!mod_mem) -+ goto invalid; -+ base = (unsigned long)mod_mem->base; -+ -+ /* Find the last symbol at or below ip. */ -+ while (lo < hi) { -+ mid = lo + (hi - lo) / 2; -+ if (syms->addrs[mid] <= ip) -+ lo = mid + 1; -+ else -+ hi = mid; -+ } -+ if (!lo) -+ goto invalid; -+ best = syms->addrs[lo - 1]; -+ -+ /* Weak functions can cause invalid addresses */ -+ if (best < base || ip - best > FTRACE_MCOUNT_MAX_OFFSET) -+ goto invalid; -+ return 1; -+ -+invalid: -+ rec->flags |= FTRACE_FL_DISABLED; -+ return 0; -+} -+ -+static void ftrace_mod_syms_free(struct ftrace_mod_syms *syms) -+{ -+ kvfree(syms->addrs); -+} -+#endif -+ - static struct workqueue_struct *ftrace_check_wq __initdata; - static struct work_struct ftrace_check_work __initdata; - -@@ -8010,11 +8114,30 @@ void ftrace_release_mod(struct module *mod) - } - } - -+#ifndef FTRACE_MOD_SYMS -+struct ftrace_mod_syms { }; -+ -+static inline void ftrace_mod_syms_init(struct ftrace_mod_syms *syms, -+ struct module *mod) { } -+ -+static inline int test_for_valid_mod_rec(struct ftrace_mod_syms *syms, -+ struct module *mod, -+ struct dyn_ftrace *rec) -+{ -+ return test_for_valid_rec(rec); -+} -+ -+static inline void ftrace_mod_syms_free(struct ftrace_mod_syms *syms) { } -+#endif -+ - void ftrace_module_enable(struct module *mod) - { -+ struct ftrace_mod_syms syms; - struct dyn_ftrace *rec; - struct ftrace_page *pg; - -+ ftrace_mod_syms_init(&syms, mod); -+ - mutex_lock(&ftrace_lock); - - if (ftrace_disabled) -@@ -8050,7 +8173,7 @@ void ftrace_module_enable(struct module *mod) - cond_resched(); - - /* Weak functions should still be ignored */ -- if (!test_for_valid_rec(rec)) { -+ if (!test_for_valid_mod_rec(&syms, mod, rec)) { - /* Clear all other flags. Should not be enabled anyway */ - rec->flags = FTRACE_FL_DISABLED; - continue; -@@ -8087,6 +8210,8 @@ void ftrace_module_enable(struct module *mod) - out_unlock: - mutex_unlock(&ftrace_lock); - -+ ftrace_mod_syms_free(&syms); -+ - process_cached_mods(mod->name); - } - diff --git a/pkgbuilds/linux-omarchy/0860-ftrace-module-enable-sorted-symbol-search.patch.sig b/pkgbuilds/linux-omarchy/0860-ftrace-module-enable-sorted-symbol-search.patch.sig deleted file mode 100644 index a486f08..0000000 Binary files a/pkgbuilds/linux-omarchy/0860-ftrace-module-enable-sorted-symbol-search.patch.sig and /dev/null differ diff --git a/pkgbuilds/linux-omarchy/PKGBUILD b/pkgbuilds/linux-omarchy/PKGBUILD index 7d129f7..40c2605 100644 --- a/pkgbuilds/linux-omarchy/PKGBUILD +++ b/pkgbuilds/linux-omarchy/PKGBUILD @@ -1,980 +1,29 @@ # Maintainer: The Omarchy Authors -# Adopted from the Arch Linux linux package. pkgbase=linux-omarchy +pkgname=( + linux-omarchy + linux-omarchy-headers +) pkgver=7.2.8 -pkgrel=2 -pkgdesc='Omarchy Linux' +pkgrel=5 +pkgdesc='Omarchy Linux (BORE CPU scheduler, ADIOS I/O scheduler)' url='https://omarchy.org' arch=( x86_64 ) license=(GPL-2.0-only) -makedepends=( - bc - binutils - cpio - gettext - glibc - libelf - libgcc - openssl - pahole - perl - python - rust - rust-bindgen - rust-src - tar - xxhash - xz - zlib - zstd -) -options=( - !debug - !strip -) -_major=${pkgver%%.*} -_srcname=linux-7.2.8 -source=( - https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/${_srcname}.tar.{xz,sign} - ${_rcpatch:+https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/stable-review/${_rcpatch}.xz} - ${_rcpatch:+https://cdn.kernel.org/pub/linux/kernel/v${_major}.x/stable-review/${_rcpatch}.sign} - 0010-archlinux-base.patch{,.sig} - 0011-kbuild-optimize-for-performance-o3.patch{,.sig} - 0120-tlbpull.patch{,.sig} - 0121-smp-preempt.patch{,.sig} - 0130-sched-detach-tasks.patch{,.sig} - 0140-sched-always-inline.patch{,.sig} - 0141-sched-urgent-fixes.patch{,.sig} - 0143-sched-hybrid-cluster-balancing.patch{,.sig} - 0144-sched-nohz-idle-core.patch{,.sig} - 0145-sched-eevdf-tunables.patch{,.sig} - 0210-pm-updates.patch{,.sig} - 0211-pm-fixes-1.patch{,.sig} - 0212-pm-fixes-2.patch{,.sig} - 0213-pm-fixes-3.patch{,.sig} - 0220-x86-amd-zen5-tlb-sizes.patch{,.sig} - 0250-zsmalloc.patch{,.sig} - 0260-mglru-exec-protect.patch{,.sig} - 0270-ksm-rmap-walk.patch{,.sig} - 0280-mm-updates.patch{,.sig} - 0281-mm-no-deferred-kernel-page-table-free-at-boot.patch{,.sig} - 0290-zstd-bmi2-fallback-aliases.patch{,.sig} - 0291-zstd-bmi2-cpu-feature-dispatch.patch{,.sig} - 0292-crypto-zstd-defer-cstream-init.patch{,.sig} - 0293-crypto-zstd-defer-dstream-init.patch{,.sig} - 0295-af-alg-restrict.patch{,.sig} - 0300-btrfs.patch{,.sig} - 0301-btrfs-fixes-1.patch{,.sig} - 0302-btrfs-zstd-decompress-direct-to-page.patch{,.sig} - 0303-btrfs-fixes-2.patch{,.sig} - 0304-btrfs-fixes-3.patch{,.sig} - 0310-fuse-eof-zeroing.patch{,.sig} - 0311-fuse-perf.patch{,.sig} - 0312-fuse-writethrough-uptodate.patch{,.sig} - 0313-fuse-background-wakeup.patch{,.sig} - 0320-vfs-open-consume-path-reference.patch{,.sig} - 0350-drm-edid-populate-monitor-range-from-displayid-adaptive-sync.patch{,.sig} - 0360-gpu-mem-cgroup.patch{,.sig} - 0400-drm-i915-alpm-limit-pr-alpm-to-panel-replay.patch{,.sig} - 0401-psr2-early-transport-panels.patch{,.sig} - 0402-drm-i915-quirk-panel-replay-exit-on-flush.patch{,.sig} - 0403-drm-i915-quirk-dell-xps14-ptl-panel-replay-exit-on-flush.patch{,.sig} - 0404-drm-i915-quirk-dell-xps16-ptl-panel-replay-exit-on-flush.patch{,.sig} - 0405-drm-i915-quirk-dell-xps13-dx13260-ptl-psr1-only.patch{,.sig} - 0406-drm-i915-quirk-dell-xps13-dx13260-wcl-panel-replay-exit-on-flush.patch{,.sig} - 0411-drm-xe-display-no-stolen-framebuffers.patch{,.sig} - 0420-safe-window.patch{,.sig} - 0430-fbc.patch{,.sig} - 0440-xe3-peak-bandwidth.patch{,.sig} - 0442-drm-i915-psr-clear-stale-sel-fetch-bits.patch{,.sig} - 0443-drm-i915-dsb-delayed-vblank-scanline-shift.patch{,.sig} - 0444-drm-i915-vrr-dc-balance-off-by-default.patch{,.sig} - 0450-amd-hdmi-vrr-allm.patch{,.sig} - 0451-amd-vtem-tmds-links.patch{,.sig} - 0452-amd-hdmi-frl-default.patch{,.sig} - 0453-amd-vtem-null-sink.patch{,.sig} - 0454-amd-hdmi-frl-status-polling.patch{,.sig} - 0455-amd-hdmi-frl-cap-on-nondestructive-verify.patch{,.sig} - 0456-amd-dml-frl-compressed-cap-check.patch{,.sig} - 0460-vesa-displayid-dsc-bpp.patch{,.sig} - 0461-vesa-dsc-passthru-mode-match-fix.patch{,.sig} - 0472-amdgpu-userq-post-reset-error.patch{,.sig} - 0474-amd-display-oled-vesa-backlight.patch{,.sig} - 0475-revert-drm-i915-dp-as-sdp-vrr-or-pr.patch{,.sig} - 0476-amd-display-ycbcr420-only-modes.patch{,.sig} - 0477-amd-display-irq-atomic-rmw.patch{,.sig} - 0478-amd-freesync-vcp-code-check-hdmi-pcon.patch{,.sig} - 0479-amd-hdmi-allm-hf-vsif-in-vsp-infopacket.patch{,.sig} - 0510-sound-updates.patch{,.sig} - 0511-asoc-updates.patch{,.sig} - 0512-sound-fixes-1.patch{,.sig} - 0513-asoc-fixes-1.patch{,.sig} - 0514-sound-fixes-2.patch{,.sig} - 0515-xps13-sof-quirk.patch{,.sig} - 0516-rt766-stream-config-type.patch{,.sig} - 0517-hda-realtek-rog-strix-g733zw-speakers.patch{,.sig} - 0518-asoc-amd-yc-acer-aspire-a314-23p.patch{,.sig} - 0522-sound-fixes-3.patch{,.sig} - 0523-asoc-fixes-2.patch{,.sig} - 0524-sound-fixes-4.patch{,.sig} - 0525-asoc-fixes-3.patch{,.sig} - 0526-sof-amd-acp7x-suspend-unknown-revision.patch{,.sig} - 0527-sound-fixes-5.patch{,.sig} - 0528-asoc-fixes-4.patch{,.sig} - 0541-cvs-nova-lake-acpi-id.patch{,.sig} - 0542-media-cvs-wake-irq-without-claiming-gpio.patch{,.sig} - 0543-media-laptop-cameras.patch{,.sig} - 0544-ipu-bridge-lenovo-x9-upside-down.patch{,.sig} - 0545-ipu-bridge-dell-16-premium-da16250-upside-down.patch{,.sig} - 0546-ipu-bridge-samsung-galaxy-book5-pro-360-upside-down.patch{,.sig} - 0547-int3472-imx471-vana-power-enable.patch{,.sig} - 0548-media-cvs-sensor-node-in-bound-callback.patch{,.sig} - 0549-media-imx471-analog-gain-max-960.patch{,.sig} - 0560-input-updates.patch{,.sig} - 0561-input-fixes.patch{,.sig} - 0562-hid-fixes.patch{,.sig} - 0563-input-fixes-2.patch{,.sig} - 0565-i2c-asue140d-touchpad-100khz.patch{,.sig} - 0566-hid-asus-no-keyboard-init-reports-to-touchpads.patch{,.sig} - 0601-thunderbolt-updates.patch{,.sig} - 0602-thunderbolt-fixes.patch{,.sig} - 0603-usb-updates.patch{,.sig} - 0604-xhci-fixes.patch{,.sig} - 0605-thunderbolt-pcie-rescan-after-tunnel.patch{,.sig} - 0606-thunderbolt-fixes-2.patch{,.sig} - 0607-usb-fixes.patch{,.sig} - 0620-usb-string-sanitize.patch{,.sig} - 0650-wireguard-tstamp-type.patch{,.sig} - 0660-btusb-mediatek-mt7922-13d3-3625.patch{,.sig} - 0662-iwlwifi-mld-skip-tx-when-firmware-dead.patch{,.sig} - 0663-btintel-pcie-serialize-reset-type.patch{,.sig} - 0664-btintel-pcie-stale-cache-in-dxstate-fallback.patch{,.sig} - 0665-btintel-pcie-pm-flow-s0ix-s3-s4.patch{,.sig} - 0666-btintel-pcie-verify-serialize-dstate.patch{,.sig} - 0667-btintel-pcie-gp0-cause-w1c-write.patch{,.sig} - 0668-btintel-pcie-dstate-races.patch{,.sig} - 0669-btintel-version-tlv-parse-errors.patch{,.sig} - 0670-bluetooth-fixes.patch{,.sig} - 0700-pci-target-speed-quirk.patch{,.sig} - 0701-pci-amd-enhanced-atomics.patch{,.sig} - 0702-ahci-jmb585-32bit-dma-revert.patch{,.sig} - 0703-pci-vmd-scan-bios-enumerated-devices.patch{,.sig} - 0704-pci-vmd-meteor-lake-mtl016-flush.patch{,.sig} - 0705-pci-toshiba-ahci-ssd-dma-alias-quirk.patch{,.sig} - 0740-hwmon-updates.patch{,.sig} - 0741-hwmon-fixes-1.patch{,.sig} - 0742-hwmon-fixes-2.patch{,.sig} - 0770-acpi-pm-acer-swift3-sf314-56g-power-resource.patch{,.sig} - 0800-platform-updates.patch{,.sig} - 0801-amd-pmf-util-unbind-use-after-free.patch{,.sig} - 0802-platform-fixes.patch{,.sig} - 0850-futex-wait-multiple.patch{,.sig} - 0851-futex-wait-multiple-fixes.patch{,.sig} - 0852-futex-wait-multiple-abi-fixes.patch{,.sig} - 0860-ftrace-module-enable-sorted-symbol-search.patch{,.sig} - 8204-mm-opportunistic-compaction.patch{,.sig} - 8205-mm-hint-uses-allocation-order.patch{,.sig} - 8206-mm-carry-order-and-hint-in-one-word.patch{,.sig} - 8207-mm-classify-huge-page-allocations-as-failable.patch{,.sig} - 8209-xe-shrinker-use-opportunistic-hint.patch{,.sig} - 8210-xe-shrinker-single-backup-decision.patch{,.sig} - 8211-xe-shrinker-skip-active-vm.patch{,.sig} - 8212-xe-shrinker-backup-in-kswapd-only.patch{,.sig} - 8213-xe-hibernation-writeback-gated.patch{,.sig} -) -source_x86_64=(config.x86_64) -validpgpkeys=( - ABAF11C65A2970B130ABE3C479BE3E4300411886 # Linus Torvalds - 647F28654894E3BD457199BE38DBBDC86092693E # Greg Kroah-Hartman - 12D27D5D8C8E9BF1AABC7C7C7C64768D3DE334E7 # Krzysztof Wilczynski -) -b2sums=('5326dde778eb945f282740ef0d8765b46fbd198f1209cdfd7b91e5dac1312fc01f8bf0b2bc67b16a76de736edd8ea21b38b6c91e696ec0c4b39746cd21a15214' - 'SKIP' - '60eac409f1ba50fe319f6b3aa5b0af81bc7ce5628ca41c1af346a6d5ef0fc9c577527742d1f70ece7e07ea410fcd112b32d64f0a05af5b532f27b62e5e7d837a' - 'SKIP' - 'cc2a66a097b5567e80c59b7d6c492fef5e667fc71a0390908712c69512c4136dbaf3d150b62d04eff960c796f7a94e6d0915d3b92cb336318b49f5f516a3bba6' - 'SKIP' - 'c5a06c5632ba1eeb592f19b7f1581acfb7adf603b098d1d966359a1bb266a330a5707b64aa1f0e0346003e0b3008f46d8af669b621ccacd9f219838fb5e122bc' - 'SKIP' - '6aa6ea3690f3e4e145818650537cd110d33720d662af0b3660d95e15a3f91e48c993e31117c0a2fde852f55a77a83e3a50a1a95c0df78a33ae75d43d46a9fe15' - 'SKIP' - '91e65754432c2d33fd44d81f9c8664b8c233dece280ed27800d9a319f035db18764ec6b8c90617238c6a54ab98fef9f524ca65facbe7434c00891a2dcde1eea9' - 'SKIP' - '39dfe3393acf96effce036db341dc7310f33f2f6431edc5e9cfe95edae0e9782dbce46a29fcec9134cfcff361cdffcb24f195bc0c648e79e94eca19ec93962e5' - 'SKIP' - '9f0d647d9cbe6f758f2d260920c3fda78ed91ed52f8c3108ff9a1a263505b18430ea21700311e5e162dfcdadc8feef120b999d622db803363785c8beca1f50ec' - 'SKIP' - 'c94778de1f106d30c7f2628be8b99f5bed8864e09dc3298e5c85181804150df49f3b151eaa94f801f14b1d6c3b132184d133840c4903192b565799cae226a4e9' - 'SKIP' - '3d5a9ed6d78d5f82b43da9fb43cb57b5621faa7601ff04bba71b5c3ead05bd4fd916323ce68e50cf178e2a9c14bc826ea85ab203c878de26446618f180a5fb4c' - 'SKIP' - '64a2e489285c40df691f822dbca67e2b2f21446f300465f01bb589380173f6da182eda71d09a840e7ea3e14acae940d3cde66fc3b476ef6417c6e8479841cc56' - 'SKIP' - '921a4b6ca25fb1a10588d7a3df65277cf6acf1115e618741486d230bd8eee16daef3f712518f98c8a49222aed468e706015eb238ba289769a464f5f33a21b21e' - 'SKIP' - '486987a57ff24ae8c58953c01db6c8e4f4eca4093a8484b28b9a647790a6757a381631e13d64605bb009613985b686a0f98ef58b2e2f9c9ddc5b4d0de1c62de1' - 'SKIP' - 'e2d21e10be9239260aaf41ec5584885555d3d5150a817fdc2b04001444ae07cebefd140b20e841c0988843749e850ad52f93b98d005d5b158e158454c2020691' - 'SKIP' - 'cd6d3232202e8e6a44e80783becc1b527336027420e308f354b32b6de1f83de210aac78ee0c639ba23030b4a0811cf7728bcaeed08e9dbe11caf3edff380ed6c' - 'SKIP' - 'e59c4da548b2ea4fd6144886e3e2e765b3e73972121e9e73dbc05c066834b2b35e6ef4c17617e77efc90260566bf7c0910d2138d8d5c1c3b6094eeac9de64cfe' - 'SKIP' - '9809e258eb684b80d508fa2f2fa270683b62bd1412ed05a970114aaa7d84c37c0beaea51f9ff8c6ee1bc7318c4aee3725e9a1131fefb51ba700801de6ac414c5' - 'SKIP' - 'f115e8c80d723f7c24e6b1638b801cd664bef20acb1d2f6e6f5612744b916278693011782228cd3f4d0518654b8d53309bc5b06bbe8ed722fab9995f369bf548' - 'SKIP' - '31abdd15ae3f9709d6912c90319a0b62d8380e1ae1169575c0e8e419f8ce264a7cf7c72558a85719cd5a1cae7341007adb3e3936268999ebd5215c2ed288f22c' - 'SKIP' - 'f95af54bcfaf17e80d9c0f60243d946aff2bbb796ae47c92a97a353f598483f03ca87fccefbaa47639b1018b82e7879dae4b8759e8fd9206b33d219560d682a7' - 'SKIP' - 'ff9a3e5df8457880b25caef9de90a7eb513ad8de99296ed503268749a32d8fa79da11f598a5fd80d28231abdd65a247e2aa92ce7c8ccc9f497fa483eee93aa82' - 'SKIP' - '55951c59286df43f069302b0b1036424812f80b45c5ea13219fce1bfc3e831731432c216288d722e44493c736cbf89a3e44801b5a4f1f242c17b5a89b236a5ef' - 'SKIP' - '737db39c2f7f46550de4d6d80659bd6c1fc2bf1ca42bd7bd6fc345fc90af995acd056051e12175ac6c957333629a017051d76d5359c871158c93f0a294fb8de5' - 'SKIP' - '4d0646c8ad139add6abb62d75308d2d7b5b07afbc74a0f0297ffc2148f0db38abaea16b048704187da49fe3ddee8370b10a7a41d6e62b665650cd79e8c392b4e' - 'SKIP' - 'bd7bce1bf0ee24ce201fe0e5f0b8a6c829a84d224800547cf97a893326381e2e6eaed9c70529a6864b0c338276b3a307b14e26fba221e62263b90c02eb5e5f34' - 'SKIP' - 'ad2cfdc3d8de2193110325395e11015577f26ef1081307bb236ed73fbd109822dd44ea026a57c2e17233e1fb7982e78aa986b71c043f42887e6c5d7f51b84ea9' - 'SKIP' - '92cadbb0f7c288987838534f523f85a67d07db19ce27fd6c8717f73c02f7ec7b7b47276fea8b2a86593178dbc4f44e774727050f2b46baafdb7296028fb24a0f' - 'SKIP' - '0b281a5780efd064a6c98a08a41eadb1286a2aa5a7f1bab33d3adaa82713f4676bd3acf07556f3617ab0649f95fa5ce3a0418da1b6ae48cb580f0d7d5d9752b3' - 'SKIP' - 'a51e5f2a5e37c350fb4d715ece644c565a508970c3aeb1d28cb6cd03a0c7316a1935e028b64f20a03818926c611b50ae0ffd77d04c676d604d303beed0f96e1f' - 'SKIP' - '71e8a5d91d285519367ba73241d01adc3b61a2b7b21f8061ecc3749fbf9d87f5ca414809343fd37530bfd5226f919cc3d87dc3b4034cc5b8be9c720f8b4676b2' - 'SKIP' - '64ca5b3c45b579c51c04f1177c8e6eb25db4c76f17f7b253c5ed959c9688bafaa97da701257435b34338432e88071f04a8d4049ba66895dd3ba804173cb08b28' - 'SKIP' - '4dfbcdb23d7117b75202944547f7ce956dd8fa7405bc5ca4856135e2becc21d950eb6e1aaec082da4290ac6cffa402686c2c9137d4dc23952796ce3334b95ff7' - 'SKIP' - '51a7a4f87d53e4b3d25041a0536b238d4550fcfdef0e7de5aa75c26a7a9217f6f3e260670154b9fa6674470f72e5e09c76571e6224d8be4eb5dd4383fef64a55' - 'SKIP' - 'fd487cb02212ffdae5d8beb7d895819377686085b95658dcf597a534b017adcb65dfdf06e0276e7322a46dc28118803b05c246c22e7d3c361f1778ed9e12a3c6' - 'SKIP' - '2c58614d716943cc1883dc513c2206e82f49574eca79f3e7dde21f8dd0f02f18611b2b2a444745df820c30c887d8263bdf9786a4a90b7979efee8d86633cbb88' - 'SKIP' - '218d01002d5487e2cb29f479f9ef9a2beb8226d2adccd1a9f932dc162a8502003db19b1bf74395b0239a2a15888131bcdc969b737cf56358dac6ab14d1b4501d' - 'SKIP' - '1b340a502dcf5a1680caf5320b3aa72aa4317e4cf1d877c1f6425e281a5668d5f092417e1f282371c0a211344f5c187fb3bdaf3f97c7e122951edf7e4c08ca58' - 'SKIP' - '1124c5c3fd5104c886c841ead1ae9afb42683388b640b1a86523dad9919c6bd59a1f78b07ee5a213e0dca77c636a29676af0592d4ed1735ea35f282f6f23e46f' - 'SKIP' - '505bf01a9d6b0926b557b673bb686d1a4ff73ee70539991e52272fbf58aad3ea25cf5ffc5c2d094a2d5e78b18a1a134f2ab530f595073a2d3eba9ff2c1418e1e' - 'SKIP' - 'b4bf4c4c0672bad91d7f8d309e741104918dd8ee8688a00d600379eba5828d1b8157953377c73d0b58050b4ff888c43013ede4e9c959be8d9c028a6143bf58ed' - 'SKIP' - 'a5ae2f6c29ba850292fcd1cd39d7af6041169ad9d73151d8fcc07ec2e1da473f3ac801eda892082b615d7f19c2a3ac17bceeb1d100dc1e2ff4b30287bbd8fc8b' - 'SKIP' - '3b8e01822f9f97842c5f7d7211df876d46d8477321546bd5b8cb74484550a2c520ffe351ce0ebb7df5659d2745187081883c091574c855ae7361315d153bc557' - 'SKIP' - '90e189032c6a04ca809607a5c9a8e798ff2f3dfa7d82bb510eb608da961196bb4b53f35907bfa9ce4006fe182102900bfa20f4566b146aaddaace4fc19adc305' - 'SKIP' - 'b9f60ea91694fb859543cf895ac9d654edd0aad92a3bce6ba9cfcfc450f413e49bc8cdb08adc6fba1a46ef319c10cdc501e3ffe6b37de222b11cd1c6cf138db9' - 'SKIP' - 'f80573494f330b31af70f1a079100082e00e3c7e185bbc51928d09d2ad3ccabb3134c72a0edcef994d6cc517015190d88c41301cf73c73419c594977f86a2906' - 'SKIP' - 'e403bdc300284c4f0f4302e501b8ccfe5e9af04e73a6070eb6615322f5f40ed6edad53af2ed278741f61a4e3811b92faf1af02f113dbcc2a19bde335a55930d7' - 'SKIP' - '5de29d0eb5264e24ab9228bea2ea4b549b3fe37ea67c045df9f83064f11c2f557b9641e772d28db59f8d258418c77435b66ff471c3695043f0f8275d5e7b1685' - 'SKIP' - '25a4ec87d1c789cab55e8ee6357276eb2e87b5e70eba2cd978b2c898e7b79de3fbc8cf5997fcd660998223b6173c98e440c853ad7c3e116f52a48d38622dfb46' - 'SKIP' - '2b33b11e48d8dd8d6743f26170fb99eae38541e3665e2448d91cedf729cca7c0278bfba1078ecbe88201eac4407ec5bd0292a97dbab9cfc67e42646712befc1f' - 'SKIP' - '5ef0d9561a570941752fd1976a2929eb25fb4dc16ff7fad09ce71e0d6881924f1ba8839574f7f877bd8089d116d689e33a54c14e2f177fe797dc86b305a74c0f' - 'SKIP' - '0415549ab1bf3ef0f2af4e62130b66e80d31dd3a1d1acda1cfcc2e4c926f25cf9449153736216a564cbd0710c0f0f1294607bf27c26790bad16e0f8956127e32' - 'SKIP' - 'a0a17aa48cdbf60db7a6d3677fae8a3388757b0f1de71043d8eb93028710f5a26aa57eb2011199b84e9689f7e4457843b74a5731c7dc14e4d1fca44b957bf33e' - 'SKIP' - 'ff1f07b3ad829d444b92c93fa63ab2c08277fa512483806d119a4cc75efbbcfc197dc982d9a146b7e9b94a9ca5bac95eed54735f607d7715cd52444ff0039e30' - 'SKIP' - 'a5670a422ae3d084f20800a5ca2c5615efaef4cdc58e466ceb25a8c56597e592cbf3eea7f4b8b28f1e7c79e9ecc7ff29c284d7be41de26fc6291df020fdd3d33' - 'SKIP' - '353b7e89a7044b7426db730d5b900eb347907aa0c20e307d2317925d6021a969a343649ede7a32e698dad60dd4472eb197c9578fb0e36fc354a60266fd680cd7' - 'SKIP' - 'd70e2f90fd0630f53b9680a1a935294d0a9e86e52ef9a712905a7799827ced2ff5acfa27a51980cf6f8157d60d9831cc0d62c623f98cf577810a4cab02b334fe' - 'SKIP' - '88a071e8e20be14db31253152064a26961b74c329793b7fd0c81b629973bd39040e9a66189e3dfda31ecc189f82e65781b310603f498e13456b8090662f80b0a' - 'SKIP' - '0cdfeb8a469295f0d7afc27800f5109f5c88c4afda93056d4c4fc9601988334c32d287e1490966ae21bbe80c5e4f8b8da2cdb6a019ec72682521972840247b8c' - 'SKIP' - 'acc6611ef0605b18b3326e2170f32c3daad02b6472b4fd8fd2a8ba4f99a35b319f2d67b6f1f017e9beb6e8cdb8edc081e97382f3cbe7999d8ad57bd5e929a9bb' - 'SKIP' - '29f44ba6256ca05c8f40f0f1b0e813a5b3928f23e37a23cef9e7e148832f41d8ab4ec43b398ef21a06cc8588e4feee24fbf1f3ec4428ef1b22b1d43a776022c8' - 'SKIP' - 'f3437588231ac856c45eee210b6d1e4f31019480665ae31f62e0fcc4b9931cea4bdcd2bb95345cb9dea26dba43931ccc73e9c9ed209ab3281a1618378658ec0d' - 'SKIP' - '824089f9f45e2ff9e788d874bb9294b9208b4486fd22c56cb59d4d88cb996ff5a81ac22f8ff136ddffa1e40330f02e53ab759ffea7e4535c11d4f8195069966b' - 'SKIP' - '22e8b6835a86ad485e5b23ba73a4e1515242b06f42063c99d0dda1f9248ce222e003acd43a517dced198a28bbd1812ce5faf66fa589717734558783fa385bb13' - 'SKIP' - '7228e249d25a99f5106040b8ddb5705979b3a5af21ca60d0d43a9ecaf6eaccef6bde8ea69c896cffbf2b5963ec4f68987e69b184a8885c7f4c98d2b05fd59fbb' - 'SKIP' - '4d5c5e2fbb5d8fe50a899bcfc629645d1bc9ef995c76611ecb38d25070552487d53ea59cb48bb3922d9d9965cc1f7d37ceea4f2ec789ed1bf37d69b831dea6bf' - 'SKIP' - '47015b9baebb1d6dd2a68321980c1c97da097825966f480c8569bcc9df5bef0257c51d5f7398960f28016258eaf1fff25bf142a64a01b829e882b4c1dda10612' - 'SKIP' - '4f3df2be1b52573ef4299934896dd5b4a5b9ebfa1f69c92f125edee1aa2db2f99bd2e6cf67734e1c953e9413bc6936067e8ac619cad66a5fe8dbcfcfc7906b83' - 'SKIP' - 'ee01ba98e614695154ba62789874843e48ce2a4715b3e6ca0304da0526f705672bb29253e0c52dc8f8fd3148c072067232ae6f4e86315dfc27b1563073cb92eb' - 'SKIP' - '0963ee814b6f64903d67757c5c55a93ec1f5b16374af16aeff2e7e494254d19031d4e1422428f4f7a8167592b7750a1db87476871eeb5cba851b377e59911149' - 'SKIP' - 'dcb350ef2987b801e481b5cf32cdfbe47018939f6b43e45b6dcff87eb75cc1a48f25e679caa823f3fe6391048f216ed9d95ae79b9cac237041857458f56e7f7a' - 'SKIP' - '0e4156949673d16caa6ee1405bf33d432ce2632e433d0abea2f4e9bc5b413500573ca06c10b8dfb477d2a6c7b4201f66ebe81ffb05302e3771dd2f0c515fc5da' - 'SKIP' - '9576c977d2c95cc474e84ac8dd7683a71df38d1d6e1ad80065cfa78db8185c7a52bb408af9881a71767a1c7e3f011424a180d0cba574b14ea53f65a567784181' - 'SKIP' - '4834e1cc74f3902e8e88eb28f9fb1f2bc3cdcda6745083092e7fc39c131bb0b1a8b06d74e6112e5d4c97d14e8b56302096691005474e6e5d2720da02463246a9' - 'SKIP' - '5d82f32f7c04b084530722b9848254aac289c2a754a10e16821083a871ec14065dd9ee83e72b8e9e8ba2915f3fbaf17b0874df724002eb08a5f4f84d1b6aecd8' - 'SKIP' - '4928cc008dc91fddb89b154b89b1ce2bbff14d8186c0ec1f81971fb9d3b622475e93e42015916699c3442e2268680779f545d183112b57dedae96fc48a75844c' - 'SKIP' - 'f93494f5f3196cc35d017ff9719d146bf3e5e7bfe32a7f5e75d96468ce30ef367428ba83b1c99b665064d3edaec84cf3bf18211d8f7b4f118b3bdee495eb8ef9' - 'SKIP' - 'eb79554ef0d014b94bc72d4d559c2cc5419df96486acb3b6a09d5e8e9dc48db626ce0f90338c67fe873b2cc3c45c3f308c8080532b60f74a07c9e39e01d34197' - 'SKIP' - '89482f70ea83fde5a88554f54c866d11c98baab1cbcb7fa6fe0079187821736b7ad9896246cb3976ec9d471fc0ebcec6dab32b95b4928704e23e3f4ff935f221' - 'SKIP' - '31202d94636ee8a62214952d0d54eb12b8e1e264edd20c374678dd442d5fc9f8b3ffa2e94cdb6d27c58004a660823d62ffe11aa81decb5af166cc6912486b9cc' - 'SKIP' - 'c0551a31a3c63b70966c9f87eb852cbbf43a13f649bb14b6fd2e8ca23f7fb311ba55d94ddb589a78a432eb225cd2336e553d399787071cee9933f2078fe8b5ad' - 'SKIP' - 'e6f6460dd43c5a7e4d943e6545479438286712237c9feec357317b1431aa778684132b734c5c113f1e57180de366411542c29f62507095e7db62e2d9aa6ad9a6' - 'SKIP' - '58899f7c2bb14ee442c6cfedb9a354f729c03cefd325cfe71da23f33d5a548f6083d5ad922231108fb58ee00f7ef2a2d45ce58c5767079e3ae3efaff306924d8' - 'SKIP' - 'acfcf80889e146bde867b12a7c1b4a7b88a71c09603d58974b647d8066cc281b300b7a43c0e1820f22fafb5f7056522091b9c6c0072ae6a4835e603578c5f95f' - 'SKIP' - 'c446acd1c5e498f0972febf76bf6198b4ee72c6e3e4ef285862564f2467d7ad7ad74eee88191fe1fd887a90a19ad61a3945ed9ee22a2ff6902fc5a806788b151' - 'SKIP' - '8bf8f181ffbd249b0af3a8fcc8463d84daa3c4aeb567595065c311f29b2dec2344fdd240d30314eae2c3d4a4daac53dad34e8452df11e386ce0a028267b18c0d' - 'SKIP' - 'bb06066e90132f0172333d46be54ca816eb7d3230a193a6cae765d8edc50df4a6ba9fb7c0647cd6befc8c3bbbe1d96c285ee202812477d7295c1130ea8cdd6f4' - 'SKIP' - '788488e828ac47a55ab78ad43251f7a2e5ad15bd5b5468bb31d4ee31e5de01a79b5680d5b048cb123eb3b7bde75e6b3d1e366e745009ed4129c8a6585d92b6b1' - 'SKIP' - '3bdf369bc73fad9bcf5b866043ff007365302318f42de7107fee47a7e8404c02c9c8fb5762d07ef10aebd2eb815c5483fc4960b7936e30ea5aa969a55f392474' - 'SKIP' - 'bdc66e50a9ef697e3baeee768f0f2dc56485afeb8a4e9f9ffd45f183d9614c33e0d0e72a8babca87963d1d9d701148eb41990730f2215a1c40e0965cc7f05e78' - 'SKIP' - 'a22e13b9bf0eac5d4190fd42bfde72ad0830cdbde8c0d309b2dfe9b0151e4c85f9f14f595ba3f36af479173ba1274f7700293c3d61dd913f711196a2dae8d6dd' - 'SKIP' - 'ebf13eb83afc051e3b9c84bfff7b326d73de6bac03f5b4d5996485d06a9cc87aca795b5c029646f804d62314a97e4a2b5da0b5f72f71556f33b62fd26529797e' - 'SKIP' - '8c6b5b96a3992c7cfbe50384fc0a4504e6d522c6918739f822b5bab29066eaeee7d1cc525b41a9b5b354ce020b1837e88d9bb940f3d2ba55a034aa9a845d489e' - 'SKIP' - 'aa24ab789db9badbd38db52f1e01fbc9d5abc09d812e2426ff281c869bbc0923cd903842d0c10ed8cf0e1a4695d3508b8ee4650f6a3eac3655247830aebb2c0b' - 'SKIP' - '1cf95a50e985ac37abd0faf86f4138e510cfb33af0ec172a2ca63f9252e6e4cba2f6c43a0babb11a96973bef3b7bf309a0f22ede26dc437673fcc77afef7fc31' - 'SKIP' - 'd5ab07d8a1db9191fc3b0d1f44c0237e93d662fb8bf04dd55385d8cded9589f66c8212a4d37c651c505fcfcb4a26da072c0be71d97fa0774b4724ba925a7af8e' - 'SKIP' - '7da8c7cd405efee8b37aff9916215b2d7052850f734b693656d2b66bae485661484efadc7207fa00dca5aa02d5e1bbaec2df9abc3e583f280097a939fc32096b' - 'SKIP' - '36fa6403c6519e064972afa0905cbff55f88fb89cad7582a89079f657537458da3d93deae474e33e018928d03090e1a373c6246b180d79f43366e16ccee533f7' - 'SKIP' - '44dcaad2ab326ebee62d3e63207a161dcb1b63bdb21412b5624ca7875bb6e99997528683a633d7dd526dc5ae9408e73bd066e2a1e5b34ba5c829162df2265346' - 'SKIP' - '69c1d61ffec58e2d3058d9e9e5fda57a089397d5ad451224f75f1cc2816c7f3fbd650b31bfb5911157fd364f77cb6f720e0825ae3deed8fe9f03576b8f7f1b31' - 'SKIP' - 'e3d60abe9fbfa046409598588dd23a9b16439474595136526e3169ff47982e011ede263d403211f5f5692ac43cf88af5bbf0d11b8e7e959478305c67687c525d' - 'SKIP' - '1fb895cb1deb1b227515087e12fb0f7fab70b0db25a1a535fa3c294a5455af4d987d02c7c8ff24aed41359055d1383ea90bf9709999382610ed156dbc4069086' - 'SKIP' - 'a2fb510d537b9afe8719334e5578a79a8ce7b021ff76c59830c749dbd963c38b7dfb60a61422b88f76886ccffb5ad5cb456b307a14ed68a5c86981eefd4fe3d0' - 'SKIP' - '5ecc37fe83f8dad00a82aa40a0c75d7518d6458b2f22d77820a28a34d772f1255cdb2befa5e525344d5deabac8f5dd092434a9ee2a9c27ccca5c5c231790c017' - 'SKIP' - 'bf138fd2ba2618ae9ff64838706c2212b478513e04b54ca3bdd8bf97292a8a310d73e0cd96533be62f139b645d7ac5de22a4c3bc1fd9f67e807bb862e965ea08' - 'SKIP' - '825397852f1c25b18c37d25bc53a7706af1eedd97cb9cf85ac590d1044e2254d06c4639bd54cac06ad42534399081b4ca17b0b10605c152ed41a22674c0ae42d' - 'SKIP' - '42a4c3debfa847f46c26db0d3e7cb1a540d3d15deae359b582eb2c71514c2cdb36c28c8c57b22dc32d0cee4d00ad7519da01c66127446692c81ea7a9178d722e' - 'SKIP' - 'ab28a1f4f1756b8451840566d8100cb3d0b498b13d006593c72829b9783e94900bae78ab47c576d156e1d08c56602274b3f7d5bd885de17336623b23c3e4f255' - 'SKIP' - '8481f23c33a84d8efb798f4b83f78011f74cd5a3dec428b177d7e600922836c1eec61c4238724038221d8ca2e2cdf20462c5911085da3461aa315f7dd19d96d8' - 'SKIP' - 'eca2778279d88085b6bf7af742773ad533906f98b146ba2526a9e00136e154913f233be728105765b0d2fc2774068f670a4ab1b49d8a7486d20e04d116f71c0b' - 'SKIP' - 'fea498b5c5ada6d7f57caf652b68f687081aae8552d2d04cd9e96764efd1b896208671f4f501210bb557710cca3ceb0c02ac2b5da6d4c04c210e87ec2d715384' - 'SKIP' - '39650b6ac7f62174d4b24e5267f9c6042c22452f16c649e032570eacf428e83ef8e10959fe54adf8573ac1c84d6082eb713ae5f173165af7d1f687e5d26fe6bc' - 'SKIP' - '3acc8aeadbac6ea2dd5a4fba4c10165dc1e6a4a55b838bff184fa46e827df67ea4e9a8535e17ed8cc80cc5338252306a76049af5956dc767bd591729b2aceb4c' - 'SKIP' - 'd442bf561a4b5dd1058c45a8181157feb268a84da94ec7f260dc6d10f7e0ddb71f1097bef945509f3d212431975ad3197f778bcc1c93ce1829ed2070bcf6bf9c' - 'SKIP' - 'c966ed5918d71acb91e988f3776d84db0b072f42e3e3f05cc178fa92a0d902fa3e34beb790c963042b52bc500d6ab9a2802b84a8411ca02cc1e28d361603bb2d' - 'SKIP' - '60fde203ea68744ea9bb8b81a18aedc8a4de8a985dc65bfd6b2f6b43210f87c2875e53eb61f4498c9b236892abde92da32755b69ee5bdb23f079079f22b529ac' - 'SKIP' - '56420f41da60382143b4df2d1fd58384180ca3a179b9f1b5082b2e4b74976ed13a29725c622e61c698631d923384082b43c9f703ce417d09e99556e4600f981f' - 'SKIP' - '5d880f3cdb32ed6fb7ce26ffbd1774fda56641d9304b5372806b6e559dab31dcac233cd6765a0b64bb6afe99fd9602402fb5e3b8c791cd1a9eaf9af28ca01bee' - 'SKIP' - 'a6098df3b653702e2689ec25934839c8a986b0e2f113b216ff4f86c8c5d530584f61d33bf4a027d1b304deb989406a3b342f13e11a66cc91ec69457c5d2e6f14' - 'SKIP' - '4a4af88fc8a8c37ae6d20b35d19e60a17672569d5489be120edbcc62ab3ba4bbc43b78cd0799b9fd73c84b089364320bcbad6fcb7128c2cb06d15ed984d6fc8c' - 'SKIP' - '411fd61157830b68da00e19be0d0db7ed61de97fd99b46a31c3958c5f66885265521e9e099c4f3404975db9de9b178cb698dbbe1399d81bf13ecff79b9ebd8b8' - 'SKIP' - '49adc1fc4c68da5c39d96746007d19107ae2d293518cfb36f3742aeba7723db31660fb1f7b3579e8fa88bb53206dbd1e718934f9b37e87925c6c0b06759e77fd' - 'SKIP' - 'f8a67f01fca5614f0eb3bfef59658913fb9b88b043f57c8bfedf04ad79912ff04d5d356dce8ff453ca001c151ab1bc017dcd7daffd5024e2bc20b087d08ab8ce' - 'SKIP' - '561a635f88fb3729937e1632d736a8981002cffd57cf16edad538381de8bb6a583f48b05e4d2bf1c8b6c03aece2495ac2850c1d66c4b540af2b88e1a9a0d9c2b' - 'SKIP' - 'da96dbbe3b6b4e189cf7bdce14647bba07bbc5599ce28ed385a1c34d237ee7ae3ac595d2552444615f2b15c2b7eda42f40743d5bdebd443e3ec31e5743f59056' - 'SKIP' - 'c25bff6e5be62aca887ae0781899e37a39e1aec90f0eb934ec5394abf560f4d02ad1fb3973a45d00058b46555bbc8d9febfcc8026e210f53a8864a91b3b80a9d' - 'SKIP' - 'e70e0077249bf008e069041a0239c6bb63075044cd0df3218649ff92a6a2d43467026886f2a6a70c70552268f6936764459d7cc0817a103b6a0f74c37c52c72d' - 'SKIP' - 'f1f853a0ef095a53080629a00598b7b1e0023141fb1890622ffd8efc4688afdeb87be4f1a096b76868840d45c10b3c88bb33f44677ff70378d63ec81eb3110e3' - 'SKIP' - '1b63569b589e994d1869e2f8eaf5d4ee225fe68862ac5c848e46544b827ca5fddb4bf060f5f39001608fd9bb284eec005f5f9b095307d3a008c9ea8957c2fad1' - 'SKIP' - 'f6430036af77a31a9ddd16200bd3c2c7b1b7e46475c7917dee91c835766be046a31736123ba8429ca2f0f8d3b93ef60522873bbec45d50b954cbb8319e6f25ba' - 'SKIP' - 'd7dffb68fd22db7ef41d1ac193dd297fb6150f034f257a44e6cb0a4848dc4a94e328c2e26d5296a72993e2db75d09e3ac46456d337a5bae767fb266082d3cc66' - 'SKIP' - '4e4792acaf0455f41cb1541d20d37e7a39104aa2dfb505e9be29dc3e7fecf328557780982b32cd8f67f77594542f5b8104766a4e8b5ce2270c9c601728363b3f' - 'SKIP' - 'aca0527f5630671a319e7ecff958a3a64f29df73b427c67c1d29763cc1801fa82e96761c3a61c22d936913943a49261da64d490a0752ba9ffc8e0c1d92f99835' - 'SKIP' - '803736a8e836560b3e50b7c0c8cf1f9ebb16b8642cc7bc6e5167d19037bd757431565fe4581776e50eb2693c49f778a24fecff41a553612e7e498f755b8f2f67' - 'SKIP' - '4bc132d9c34deaae9b13d08dcff8ea83aa8f9ce4398531e0e0a80df30da3808815f3a587fe5627f6553b8e9c2aea6cc1749b752250a91c94f1cf8ba4f3eb5e8d' - 'SKIP' - 'b76c03e8c59c0d2c06d00130cbe4984932762107f3d8180f90ac6c63bd435d6b8dfd317b9d1e756a89c513a20bdb52dcf4f3887daa6598449e560ca1076c5a1d' - 'SKIP' - '42703ec988c2b1865fbe4eef67840f4370958e3e874d9f8a03a46c43619bed7656c56cae0ef1d8cca5340648b47ba7ddf813d25d9db3307f10146c45b8e34ade' - 'SKIP' - '029d9e899dd9e7bdbcacee34ee9b468e2e2a8f726e38d014891c8353f6afcc52a58c7d9289fb0487cce4d90c8d51f578c27b1dbcdab42de7308f50b7baf27877' - 'SKIP' - '343b48e982195e3f07aa95dac09d5e09d5c02f823b91cc4f0775fa9529e9a985923a5af48067a1f071b99613acfa25b18e3b083e094f3cd97f6758a495c91c3e' - 'SKIP' - '9ac15b3542629c5333cc7d7f53b4f2995d807a31331b9e04d3da051be0ddde7e8c3cbc79837ffb49a4d364db1680cdc6d763465fa56bd4d26b16b765985babe1' - 'SKIP' - '70e35154f9385156a11280294cc254cb314fd89653daedb46546a6bd64c550e3fc7e7a8df3e653c516687f0317bcc710fce82b4d649472333c501ed85fcd6cf6' - 'SKIP' - '576fd826f28d945782840865f3e5b7c87d7f6f91f08e473ff0d06a37caa2f89cdd9cb4a7aafef5551363aab9c60e887ee794d5b6292874c12baf88c23ea5668e' - 'SKIP' - '01125c624a4971686d02a23918e3da697645a322e5a7638159636d9a16c82f815efdad1d8e22c507518dc0b92b6842277637cb2d0940f4eaab40c0faa77d8da6' - 'SKIP' - '322e4e255a2b900ad224ff376b00199c40e26fc5407e15dd36c1ca4e51c7ca0431397a69696959d1c1910b02a4bdac8efbaa20f6f6f6dd5424b711c149ea367b' - 'SKIP' - 'ae93d961d0eef41ed39c473fe9478b62fab13ba395333b3c11b34b7787904a3d2684520ec76dbe2603dd96a146a68bcbe98da1b7e4cc1e659246127384bce22c' - 'SKIP') -b2sums_x86_64=('92ba00a8ce0ff16806ca125e22434eb687ac8b74d9daf4fffe0cc8de54b13affc75b48792c7c32f3427387c2e147046d169da2d6353f4b9e2abe04addbf5369b') -# https://www.kernel.org/pub/linux/kernel/v7.x/sha256sums.asc -sha256sums=('12e8d5a973d1ad7c5a5c69882e4022b131ed715db7003fdcd760ddf8c3e51941' - 'SKIP' - '777e4bbfe44531c6504fa646ee74e95e8ff11f264a3fa281b528e25960e741ad' - 'SKIP' - '6cf74fc3f28a751354187b6cf610c3e43cf9088b5f730b68dbb575828c3a7478' - 'SKIP' - '58f21f8c48dbbb1295d488815aae50003155ec9ea5633ffbca4f0e17b18e8803' - 'SKIP' - '6a27e1b363f1bb133b9905f84b00e4d01885cac84858db46bdbf764849c9984b' - 'SKIP' - '83d51eee049d9898a217d3846edeef317365f4b74b277988582668fa71cb4a28' - 'SKIP' - '86dcf3d18fba4756eccba9997a3302445de347e878369c7b119851354d6a1c1e' - 'SKIP' - 'c89cb6da5e007551dfc6437a485adb664e9ac68e6bb80763dea757ef66c989da' - 'SKIP' - '01319b540a2cb4772eb4cccdc8c85ba4c96b150be0dcc88e3ac1290b4fdf6cdc' - 'SKIP' - '4fc90cc8e9d9979d7c839fd1761e42221577667ceb7e4502c354081b8d40d3f5' - 'SKIP' - '40177376862e4d7f45684c5e2a743f3da40d59817b0afa3050a3002ac6838085' - 'SKIP' - 'df870910371645a95140a3f92424db43c4e1a92bd493393e598d61c6266f1c7b' - 'SKIP' - '3d5550935087a7d82b527227e8f08ed98c2ffdb830b526c09e30b93137b3e607' - 'SKIP' - '2351136c78ad2dfe68e34bf9a70d377724257f6239e68bf8f501637b607af6b2' - 'SKIP' - '6c93475fc28d211ad7c15c691ea882deedeea8c0defe153cdde0a2a74488c7a0' - 'SKIP' - '718b40e15350049e03c0ed281b9257fca5432b8dec2e0e145e8b26507ee8892d' - 'SKIP' - 'b7ba949eea77e169aceb2c401d4eb83a7413aab6f15ee2a7ab1a96352f0aa12d' - 'SKIP' - '341424b925d506869793686e22ea8f095a34048595ebebec409c0a7bbd346ca2' - 'SKIP' - '7c25d0a53a115bc1f072ff0cfdd9aa88858e754ae8b15026a2582656e8bd9c43' - 'SKIP' - '336d72ab830bb33ef2a23bda1869e1fc071af64b24779281e197073ab70c851a' - 'SKIP' - '829300e576f418e64101a20d87f30f7c90798cd6e179bfb72768a83d99fa711e' - 'SKIP' - '5e3b455024fab2855b590091c9d14b0d12d5363f3d4bf025b31b9aa88b65eba5' - 'SKIP' - 'abd8c9326cecc9bb85db4b3dc98ddcb66306b34a6d84fb05d0805aed537e2dc4' - 'SKIP' - '60a9df54821cd98581e7476f8a7bb6cb0819762bdbed4d356332e41d164a8182' - 'SKIP' - '929108ae0a8eb4782cafdd89e3d4426d02d86f2c2102ed99e760e31f0bc3794a' - 'SKIP' - 'e1226c836a9c2fb6daff109e56ba21c13fd198e109cbb181de920af04fe153e6' - 'SKIP' - '2cdd81f5520b935e1d99629fbd6e1cc9d1351b301396316f37946b95084f1a26' - 'SKIP' - 'e65c2645b0d01301a91874183faed44a390b7a402d2dffd45171d210034dcc93' - 'SKIP' - 'd8e64b9da3beab7c33832c019da50d0977b39dc32ec1f649a7c3bc93a2fdb9a5' - 'SKIP' - '5e2515879d58eba10c861f73318f4c4b478b8dd592680eb58961aa4065d4c3df' - 'SKIP' - '874efac3eb32970f3e06275adc072a384b89ff69e2e5b7452d6146a6e89049b0' - 'SKIP' - '43aa4a11d9d48f5094b4c0e807d1d31598e861a50695bdfa52f19819b5ff5285' - 'SKIP' - '2b49e4c98c5d704bee0a0e2b38051d59177161bca7b0188e6c0feb555a95fbf1' - 'SKIP' - 'e6b770d37e80509ed7ec5d8b59b4d2e5d6dba54ba659d7392de3b567f1eb6e54' - 'SKIP' - 'a9b3ef8aa79488d1cd813507e040e0762d4c8c5845b7f4ecc29c6cea1ade8056' - 'SKIP' - '264d49d74eb4006c8eded08e39409045032920d76df035aebe8a1d0939d4b7b7' - 'SKIP' - '5cc215215fed4247c2d6b9732deff586331a07d54c3b00538a81921093a3a1a1' - 'SKIP' - 'e303da14a3c8a15fd1cb45394138f03dd16e66d2ac0d1ebcd933977df937d771' - 'SKIP' - '1f0c958b64ba48b8dc8b5548e1ad1934b8d4903fc16fec15014759e3681ea275' - 'SKIP' - 'd9eb3717ba98e270b0a998f8dd90cbda072f63b6a6ea8f66763bde3ea64e591d' - 'SKIP' - 'ce634014dc0131a44c3c95a8e9cb0a9de433f59d73fd99d3e3297adde65fef71' - 'SKIP' - 'd069e594d170adb016c5000d9cb7eac12c3c267a6b60c27afde7f046dba0509b' - 'SKIP' - '78feb2e2fabccaf954fdae5b776a22cec4a3f4135fbd24f79596a5274fc0129b' - 'SKIP' - 'f864c7daeaac0bad482bbf3853583d8a6cbbf2bf264562e397fc26355ffd5504' - 'SKIP' - 'c3a709af1589bd0c467565dc66ec4c01bed9c2b94314dde30c839084e594557b' - 'SKIP' - '1e2fddb2e0c5d184a2e8c774886cf9be2f2f292e4f05832b50e5b49c48a7bacc' - 'SKIP' - 'b9b8771b6a8bd7128f4344ad189e32c155abf72abd3ff646dcf5c78b08eb94c4' - 'SKIP' - '34991cf6cec6c22bc1a55a76bc5f72b405165a2f14ef977a0446df7c18bdfbb4' - 'SKIP' - 'cae59282e3d1afd69f4f5dc00a180c712ef464c98b8fd7ccc9b03de944dc79b9' - 'SKIP' - '3b06b5285923c251b0ebaf69911875f796cf7f1d7580ec33bb218509fea313a7' - 'SKIP' - '15609bef72571868fec6b8971f53b74441e5e93fbdd3c677ede963d0719cbc40' - 'SKIP' - '1231a6e23557936b811ce5dc184c23a7fbd268a20d582b6820c67125df8f07c0' - 'SKIP' - 'ec12a77671afb85f8297c86fc97f8314b4f00a1630acb199af12e3550a9d4ec8' - 'SKIP' - '1b1660064a3dadf2bb3006b140d1c7016a1ad051f27e7a4d6d9f3f40d491fe9c' - 'SKIP' - '40ac31789399a5964c4fd820d4cdc7214add91109bbcf4a614619e5d8b367441' - 'SKIP' - 'ab3b968d8bc2073e8c53478aa5d5afbadc5329a22b1486a014e5d0d84bfcf752' - 'SKIP' - '2a2a81e647aefda80192d230cd1dbae2aeb611f66b7d6c83694b9f9f8e2befdb' - 'SKIP' - '2772f0733267d12f36ae2a339c9aeaf0a133a20381a6b73e0c26f2ef92996ff3' - 'SKIP' - '3998c774884fdfc94be3da3c4c3641bd4b5aeb1878d8ef13bf0e27cd9f2e9994' - 'SKIP' - '0d5afb79681a948a65943f557d143c15126e2497e71c5ff50ac13ed8619a67e5' - 'SKIP' - 'e95f8fb6d116b30c2b86d9fb51747a9f9b4e5f980c1a3b627a38940db9d0e521' - 'SKIP' - 'dab92dbc6eac02771c72801d94e6a53aabcf629a9cd79e85e0ce2ba44a65b06b' - 'SKIP' - 'f55bc6366f8b9ffef744b289788a19e8604239e84c1af8b929a6922cf07d223d' - 'SKIP' - '0057dff07a3ce9c7b7085edd1f912958e01ce8f7400151d55dfb74c0c6a084e2' - 'SKIP' - '9c4c16b9593449ce556a4d6325e5e2205cb1698f9000a967ba7df118395b1ef0' - 'SKIP' - '00afdc277c53dff0898ac86fd44ead020e007373134d7c7c333285a9f1dbf786' - 'SKIP' - 'bed39a5e6bbb7cdac3f56a883a4684b2a63f3e8fe2f8cdcdd0b89b374b8d2a21' - 'SKIP' - '75d7fc371ba9b00a78af2e4b0fdb7cf79bf25a6620c983662d6b2e90cf5ce8c0' - 'SKIP' - '0fe32924142868879ac9417c67b0233b6ef8ddb0163183352479f5163bf7b5df' - 'SKIP' - '7444186ad4f6d8e2b52a3729064f649b035af6eae4f4ad46b9768c006419fdbc' - 'SKIP' - '94750a925a726ad6631d0486e7f3cb3796b3941715b188e790fa135d0aa5734d' - 'SKIP' - '143193a175084d65035bcfdcc81e9dfef2e794dd56d637556db2c73b117f708f' - 'SKIP' - 'f18821fa9527c7ee07a49b9c1c983a3584d5058f9734b520b5d51cb485c93f17' - 'SKIP' - 'f7ff13ea46359217d696c6ccd49bc3d74c441ac5893d5151d95138017b0d10aa' - 'SKIP' - 'd17493b3579c730d27dc723447175b70d991f50253c9fd419df5e923bdf7a244' - 'SKIP' - '92971bb4dbde209cf170838cfcd75d8ac9978239821d3493c28cc12623c2bb60' - 'SKIP' - '7245c6e2cb5c0b0ddf800894f087770cbf8ccc6f8b3f53b9a21c704e9dfa42c2' - 'SKIP' - 'd49629fd003900f13418c05d8c2fc37c8dea2fd8a15debb5b863008c9c46021f' - 'SKIP' - '411fe33ab7021dcf73b02cdc80a64094a511333c52dd754e54d382fe1145de08' - 'SKIP' - '5104ee45fc11994b1cb44130811435c84fe4db532a2fa9a722c7b03dbbdc8bf1' - 'SKIP' - 'f7617e3c4248e015f6f174e7c8659299d831035d0fb3c89acd1a858a202f91b9' - 'SKIP' - 'e7dd17ccd4b417a1813c21285c738a3fdede1326d8a1445086ea1af294c3710b' - 'SKIP' - '058aa32a18723035b18a770e1bd7f4b4f101bf5618bf0114e1874a398de42e06' - 'SKIP' - '833c5ede23f4a014f428c64b7da550cdcd7ecc939dfeb45dce172b18417888a5' - 'SKIP' - '21a9196887fe8453218e4805e171b19958005f38e5d21886c58a55f8d9b86795' - 'SKIP' - '29c61ec984bd342113b3c4310a3d5fddfd6d7db83847cfb26b84cc730385320a' - 'SKIP' - '4b5abcc24f557e83e4d385c8304c781d6ab78fc0a3935db97e01e7d27fc617ea' - 'SKIP' - '0dc5f0f91640715ee1744fb8cfe680de6ac1370f4df8e17d31016744f31d3638' - 'SKIP' - 'cd068c7e199f458356886eb321f759a91894bca374c71ccac242407d8b22a1f5' - 'SKIP' - '618369a173be9a5a2f91fb6044931d897bbf4911586bd94a10b43a25838872a2' - 'SKIP' - 'bd3535f78183d56b133986b814ec31a8c1aa933d71b3a611937e6377ee04af10' - 'SKIP' - 'bb1e2ab62b109e434bd2c2635b5912602b8a8cc0ba24743b7bb5f691dcde2353' - 'SKIP' - '55ddb7c072f3933eef42ac48f3b32f90a5298f5cf90b4ba5b2128a197250494a' - 'SKIP' - '62e446b250e96fb65a3068bac424e1e5fe4482ad6d7ac473fa94cb8ac047c0ab' - 'SKIP' - '8b55dbedf730b0dc675793418c21b909aed5db4311248bd277d3184839d261f0' - 'SKIP' - '5a09e7b8e10fdc61839ada49e9a33a64b240fa54847c1c0e0044518297196f0b' - 'SKIP' - 'b857f4c98ff5998adab1765a06ad307f9334a8d7d9644a3de556f2b0e9cb2b4b' - 'SKIP' - 'c28fca9ba015e96599627acf42e52737a6a846bdcbfd3d4af4147eda3109e12d' - 'SKIP' - 'd15cdfc9b86c40a119a4f21f4fbaec72efebc67677a7386df46a61816d4c6e02' - 'SKIP' - '1b070eef78ccffb3763b464f5a1b0636936f4c33b0be9b44ab116c5dcbadbebe' - 'SKIP' - 'eb0923de01175707151930d28b1a1a912d24bbc171248fa9f45f57a2125d077a' - 'SKIP' - 'c076ed3752bcc2033e435043668fe007eb1ea1760597416fbb5d90bed4947bec' - 'SKIP' - '0fa9fdc6d6c85435d7b3cb38b51823f458ab273c527fcbe21b945dbd89686304' - 'SKIP' - 'ef66f6c32ac98a311b7437265b21a8c70746f1ea4dfbe28aff655e778d09c28b' - 'SKIP' - 'b45303b559ab8990ecb4e0281e5d529625311e795d6c3a9a52c2c27498141e18' - 'SKIP' - '1728e516153acca3c343f5184c9894fe6f1a1fbc95abe1594f544ef601db39ed' - 'SKIP' - '534e68a989d36823f14a10299803f294eef39391619b4c329d78c20539d9fcd5' - 'SKIP' - '516e6ec51ca0330989128a4eb2a8f6785e5d45d930899cbbbf37b8147ddfd854' - 'SKIP' - '757ccc291d53030b89088802615ecf727df6f18ab2515cc0075008ebbd564e36' - 'SKIP' - '3a271bc6b0219152047fb2b78d9e695eb791b796ea6d8233096912c77d62a5c0' - 'SKIP' - 'fd6bf3ed3d16c788330630fdd15604836ec2a0b6a7db2b04216f756da9117bd2' - 'SKIP' - '4d598b9e00edf7c17d915eec7c8d369fc0ea40badb7f4576cb3dedd92a685d4b' - 'SKIP' - '98ff0d6196470c582b3e3841ef35bf82a63b57ebaef952885bd1905bcb8e627b' - 'SKIP' - 'de2682af1db7f5ae8cd74da4f9020bfb7d2167f030eb15f0afb7bd46ffe49e84' - 'SKIP' - '73dc22b7f97a6cc5a5f35d6b30b9b7b12be2566160a024769550290a0e7e4029' - 'SKIP' - 'f06834dfaa9e976a5778fa4fd07117a85bbff3b788c91e61d8cbc628e1b8bfb3' - 'SKIP' - '11884198740c5ac572cbe87086b1744ce19f0e1f856775e6edccce843ab097a3' - 'SKIP' - 'e6d848172228e98dde3a7ec679e7ea6bb0a42cca0b0105c58c8f9d6d44e33943' - 'SKIP' - '4e80f2d05591175d4ed0a1a144509e97260e5593472aae586c07956215d99162' - 'SKIP' - '1b442ad6f28c684068844ce93616690b84651e35870802b02937351bea078b4a' - 'SKIP' - '9be4f91e6a4be87791d700f44c228fe599468f06a4f627b79e75718ac020db4d' - 'SKIP' - 'ed635ed3b63cdb61614b8805aa5a9515d5b538522165be625dca89bdb7d6e801' - 'SKIP' - 'e28c29b9f359db85a60bfd49d2f28ba51f4d2272eb79b7d3e19ba8b3d5acdac9' - 'SKIP' - '3175c56fd2935848ce99fe10be1bc348231909f8479c3d3af911c5c7ab7f381b' - 'SKIP' - '945c90d99f9a9fa47d61e471f76d17c0229ffa0fa8cda22de990a2ccc4194bb2' - 'SKIP' - '70ff41b2341836c27c5545a7948258f137d991c2879cbeb29f7af740c11d20e6' - 'SKIP' - 'b4efd997d3f09cbf258fd0f78aca44e4c96694dc4efc5c8c9a677ea67ebf5a54' - 'SKIP' - '2e1e2a0eb039ce61c1612bf6c7ab5227b99df053bcd5592da7758715dd333fda' - 'SKIP' - '6800dd82115ebe71d80dde0bb368fbd8563caa6c29127ffde0d6b5df81b502b0' - 'SKIP' - 'd90cc6570a47c8754e4c5d45834e0434c0a1fcabda9b8933b1fba84e3dabc083' - 'SKIP' - 'a008c052ca657efcd4e27b8f7b819adbc9606e261aac37d41a40cf67c094cff9' - 'SKIP' - '028bf538c870465e1752514725372fa9eef6b7178d9b8d1e2ecc15edc5a63cc8' - 'SKIP' - 'a92a84405ee9845738c6b52d8f0f0eca16eb40afe0ebe0f4e9e1168597675311' - 'SKIP' - '44a0b10a6dc83465ea86f5fba936b2bfbeffb1b3f0b2e04013bfed99ba4f6c5a' - 'SKIP' - 'ab4a43d7b8d56a4405aaebaac00dd33d2019cae407039fad4b0dae9ba1ffaa78' - 'SKIP' - 'f81f6b5769e47716ca318ecf76ab1c0fafa0e165fa858a64251359937bffcf04' - 'SKIP' - 'c67fee35a42866dd3c9056ff099fc504cdad9530c107d959331b5572b21af818' - 'SKIP' - 'fdfe62019e6ef5dfba2fabecc6ee5b58400f41ef000883fed135ecaca881b40c' - 'SKIP' - '07683e522d6dea3d3ce658ee80bf4317f6c3caf248259da960bc4610f4d1e807' - 'SKIP' - 'c5279468d93e562f509a6b599a2b7ca7ee0032d3fe35314c5769fc6c9a9234ab' - 'SKIP' - 'c0111614ec44014cbf621eedf5a4ef302a855423bc1633ee692392950e971d0e' - 'SKIP' - 'c2f916fa04d91edf926abf8fed086302fe538ba62d92450af0ddb6d3a33942f1' - 'SKIP' - 'd17774053ab07de92e18abdb0ff4d00352a02b6a97c48e28d8c875954c8eec36' - 'SKIP' - '774f337663b215c5aa8877c06ffce95be44403fe77516c1be9ef9789e2d049e5' - 'SKIP') - -export KBUILD_BUILD_HOST=omarchy -export KBUILD_BUILD_USER=$pkgbase -export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" - -prepare() { - cd $_srcname - - echo "Setting version..." - echo "-$pkgrel" > localversion.10-pkgrel - echo "${pkgbase#linux}" > localversion.20-pkgname - - if [[ -n ${_rcpatch:-} ]]; then - echo "Applying patch $_rcpatch..." - patch -Np1 --fuzz=0 < "../$_rcpatch" - fi - - local src - for src in "${source[@]}"; do - src="${src%%::*}" - src="${src##*/}" - src="${src%.zst}" - [[ $src = *.patch ]] || continue - echo "Applying patch $src..." - patch -Np1 --fuzz=0 < "../$src" - done - - echo "Setting config..." - cp ../config.$CARCH .config - make olddefconfig - diff -u ../config.$CARCH .config || : - - make -s kernelrelease > version - echo "Prepared $pkgbase version $(