diff --git a/x11-drivers/nvidia-drivers/files/acpi_os_wait_events_complete.patch b/x11-drivers/nvidia-drivers/files/acpi_os_wait_events_complete.patch new file mode 100644 index 00000000..69c1ef85 --- /dev/null +++ b/x11-drivers/nvidia-drivers/files/acpi_os_wait_events_complete.patch @@ -0,0 +1,35 @@ +--- a/kernel/nv-acpi.c ++++ b/kernel/nv-acpi.c +@@ -303,7 +307,10 @@ static int nv_acpi_remove(struct acpi_de + + if (pNvAcpiObject->notify_handler_installed) + { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) ++ /* beginning with 3.13, acpi_remove_notify_handler() waits for events to finish */ + NV_ACPI_OS_WAIT_EVENTS_COMPLETE(); ++#endif + + // remove event notifier + status = acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, nv_acpi_event); +--- a/kernel/uvm/nvidia_uvm_linux.h ++++ b/kernel/uvm/nvidia_uvm_linux.h +@@ -405,11 +405,17 @@ typedef void irqreturn_t; + // not require the RCU's read lock on current->cred. + // + // ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0) ++#define NV_KUID_TO_UID(value) (__kuid_val(value)) ++#else ++#define NV_KUID_TO_UID(value) (value) ++#endif ++ + #if defined(NV_TASK_STRUCT_HAS_CRED) + #define NV_CURRENT_EUID() \ +- (((typeof(*current->cred) __force __kernel *)current->cred)->euid) ++ NV_KUID_TO_UID(((typeof(*current->cred) __force __kernel *)current->cred)->euid) + #else +-#define NV_CURRENT_EUID() (current->euid) ++#define NV_CURRENT_EUID() NV_KUID_TO_UID(current->euid) + #endif + + #define NV_ATOMIC_SET(data,val) atomic_set(&(data), (val)) diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-331.38.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-331.38.ebuild index db26a65c..a00467d3 100644 --- a/x11-drivers/nvidia-drivers/nvidia-drivers-331.38.ebuild +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-331.38.ebuild @@ -176,6 +176,11 @@ src_prepare() { epatch "${FILESDIR}"/${PN}-331.13-pax-usercopy.patch fi + # fix: Unknown symbol acpi_os_wait_events_complete (err 0) on linux-3.13 + if kernel_is ge 3 13 0 ; then + epatch "${FILESDIR}"/acpi_os_wait_events_complete.patch + fi + # Allow user patches so they can support RC kernels and whatever else epatch_user }