8

If I look for ACPI interrupts, I find:

/sys/firmware/acpi/interrupts/sci:   55414
/sys/firmware/acpi/interrupts/error:       0
/sys/firmware/acpi/interrupts/gpe00:       0   invalid
/sys/firmware/acpi/interrupts/gpe01:       0   invalid
/sys/firmware/acpi/interrupts/gpe02:       0   invalid
/sys/firmware/acpi/interrupts/gpe03:       0   invalid
/sys/firmware/acpi/interrupts/gpe04:       0   invalid
/sys/firmware/acpi/interrupts/gpe05:       0   invalid
/sys/firmware/acpi/interrupts/gpe06:       0   enabled
/sys/firmware/acpi/interrupts/gpe07:       0   enabled
/sys/firmware/acpi/interrupts/gpe08:       0   invalid
/sys/firmware/acpi/interrupts/gpe09:       0   disabled
/sys/firmware/acpi/interrupts/gpe10:       0   enabled
/sys/firmware/acpi/interrupts/gpe11:       0   invalid
/sys/firmware/acpi/interrupts/gpe12:       0   invalid
/sys/firmware/acpi/interrupts/gpe13:       0   invalid
/sys/firmware/acpi/interrupts/gpe14:       1   enabled
/sys/firmware/acpi/interrupts/gpe15:       0   invalid
/sys/firmware/acpi/interrupts/gpe16:       1   enabled
/sys/firmware/acpi/interrupts/gpe0A:       0   invalid
/sys/firmware/acpi/interrupts/gpe17:   54753   enabled
/sys/firmware/acpi/interrupts/gpe0B:       0   invalid
/sys/firmware/acpi/interrupts/gpe18:       0   invalid
/sys/firmware/acpi/interrupts/gpe0C:       0   invalid
/sys/firmware/acpi/interrupts/gpe19:       0   invalid
/sys/firmware/acpi/interrupts/gpe0D:       0   disabled
/sys/firmware/acpi/interrupts/gpe0E:       0   invalid
/sys/firmware/acpi/interrupts/gpe20:       0   invalid
/sys/firmware/acpi/interrupts/gpe0F:       0   invalid
/sys/firmware/acpi/interrupts/gpe21:       0   invalid
/sys/firmware/acpi/interrupts/gpe22:       0   invalid
/sys/firmware/acpi/interrupts/gpe23:       0   enabled
/sys/firmware/acpi/interrupts/gpe24:       0   invalid
/sys/firmware/acpi/interrupts/gpe25:       0   invalid
/sys/firmware/acpi/interrupts/gpe26:       0   invalid
/sys/firmware/acpi/interrupts/gpe1A:       0   invalid
/sys/firmware/acpi/interrupts/gpe27:       0   invalid
/sys/firmware/acpi/interrupts/gpe1B:       0   invalid
/sys/firmware/acpi/interrupts/gpe28:       0   invalid
/sys/firmware/acpi/interrupts/gpe1C:       0   invalid
/sys/firmware/acpi/interrupts/gpe29:       0   invalid
/sys/firmware/acpi/interrupts/gpe1D:       0   invalid
/sys/firmware/acpi/interrupts/gpe1E:       0   invalid
/sys/firmware/acpi/interrupts/gpe30:       0   invalid
/sys/firmware/acpi/interrupts/gpe1F:       0   invalid
/sys/firmware/acpi/interrupts/gpe31:       0   invalid
/sys/firmware/acpi/interrupts/gpe32:       0   invalid
/sys/firmware/acpi/interrupts/gpe33:       0   invalid
/sys/firmware/acpi/interrupts/gpe34:       0   invalid
/sys/firmware/acpi/interrupts/gpe35:       0   invalid
/sys/firmware/acpi/interrupts/gpe36:       0   invalid
/sys/firmware/acpi/interrupts/gpe2A:       0   invalid
/sys/firmware/acpi/interrupts/gpe37:       0   invalid
/sys/firmware/acpi/interrupts/gpe2B:       0   invalid
/sys/firmware/acpi/interrupts/gpe38:       0   invalid
/sys/firmware/acpi/interrupts/gpe2C:       0   invalid
/sys/firmware/acpi/interrupts/gpe39:       0   invalid
/sys/firmware/acpi/interrupts/gpe2D:       0   invalid
/sys/firmware/acpi/interrupts/gpe2E:       0   invalid
/sys/firmware/acpi/interrupts/gpe2F:       0   invalid
/sys/firmware/acpi/interrupts/gpe3A:       0   invalid
/sys/firmware/acpi/interrupts/gpe3B:       0   invalid
/sys/firmware/acpi/interrupts/gpe3C:       0   invalid
/sys/firmware/acpi/interrupts/gpe3D:       0   invalid
/sys/firmware/acpi/interrupts/gpe3E:       0   invalid
/sys/firmware/acpi/interrupts/gpe3F:       0   invalid
/sys/firmware/acpi/interrupts/sci_not:       0
/sys/firmware/acpi/interrupts/ff_pmtimer:       0   invalid
/sys/firmware/acpi/interrupts/ff_rt_clk:       0   disabled
/sys/firmware/acpi/interrupts/gpe_all:   55414
/sys/firmware/acpi/interrupts/ff_gbl_lock:       0   enabled
/sys/firmware/acpi/interrupts/ff_pwr_btn:       0   enabled
/sys/firmware/acpi/interrupts/ff_slp_btn:       0   invalid

I wrote a service script to disable this on boot:

#!/bin/bash

### BEGIN INIT INFO
# Provides:          disable-gpe17
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

logger -t gpe17 -s "Disabling gpe17 interrupts..."

/etc/pm/sleep.d/30_disable_gpe17 thaw

exit 0

This calls my PM script:

#!/bin/sh

echo 0 > /sys/firmware/acpi/interrupts/gpe17 2>/dev/null

I've made both scripts executable, and added disable-gpe17 to the boot scripts with:

sudo update-rc.d disable-gpe17 defaults

When I look in my boot log, I don't see a record of the syslog entry stating that gpe17 has been disabled.

Is there a better, perhaps udev, way of disabling certain interrupts on boot? If not, why is my service script not running on boot?

I'm on a MacBook Pro 11,5 running kernel 3.19 with Ubuntu 14.04.

  • For those interested, the first listing can be obtained using something like for i in $( ls /sys/firmware/acpi/interrupts ) ; do echo -n $i ; cat $i ; done – jjmontes Dec 3 '19 at 19:00
10

I have the same issue, I needed to disable gpe16 and gpe17 for kworker to stop hogging the CPU. I followed the recipe found here: http://sudoremember.blogspot.com.au/2013/05/high-cpu-usage-due-to-kworker.html

An abbreviated (and corrected, at least for my instance) version is here:

$ sudo -s
# echo "disable" > /sys/firmware/acpi/interrupts/gpe16
# echo "disable" > /sys/firmware/acpi/interrupts/gpe17

You should now see the CPU load / hear the fans go down. Make sure this happens again on reboot - still while root privs:

# crontab -e

This opens your favourite editor. Add these lines:

@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe16 
@reboot echo "disable" > /sys/firmware/acpi/interrupts/gpe17

Since suspend mode doesn't work for me I didn't bother following the remainder of the instructions on how to create a script that reactivates those settings on resume after suspend.

| improve this answer | |
  • You saved my life (Y) – Haris Feb 22 at 12:46
1

In Linux 4.19, I found that disabling the GPE (echo "disable" > /sys/firmware/acpi/interrupts/gpe17) did not fix this issue anymore. Even with the GPE disabled, the number kept running up and the CPU kept busy. It seems the new solution since Linux 4.10 is masking instead of disabling:

# echo mask > /sys/firmware/acpi/interrupts/gpe17

Or use the boot parameter acpi_mask_gpe=0x17 (in Debian/Ubuntu add this to /etc/default/grub line GRUB_CMDLINE_LINUX_DEFAULT, then run update-grub and reboot).

For more details, see Linux kernel commit 9c4aa1ee which was first merged in Linux 4.10-rc3 and the bug reports linked to from there.

| improve this answer | |
0

This problem is present in almost all Linux distributions. Even in Ubuntu 18.04 and 20.04 LTS (Seems to be related to faulty hardware or drivers). You can use this bash script and program it in the crontab. Close any 4-digit GPE

#!/bin/bash
kworker=$(pwd)/gpelist.txt
echo "Check GPE..."
# Generates GPE list
grep enabled /sys/firmware/acpi/interrupts/* > $kworker
# Save in the variable $gpe the full address of the erroneous gpe
gpe=$(cat $kworker | egrep '[1-9][0-9][0-9][0-9]+ ' | sort -rnk 2 | head -n1 | cut -d":" -f1)
rm $kworker
if [ ! "$gpe" ]; then
   echo "No Kworker to Disable"
   echo Done
else
   echo "Send deactivation signal"
   echo "disable" > $gpe
   echo Done
fi

Source: Kworker

| improve this answer | |
0

I have the same problem running Lubuntu 20.10, 5.8 kernel, on a old Macbook 2006. In my case the solution was to use Peter Nowee suggestion.

I added boot parameter acpi_mask_gpe=0x17 to GRUB and rebooted. That solved the high CPU utilization.

I found the problem with this command: grep . -r /sys/firmware/acpi/interrupts/

The issue: /sys/firmware/acpi/interrupts/gpe17: 3491042 EN enabled unmasked

| improve this answer | |
New contributor
ofbarea is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
-1

For me the problem was with gpe03 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1861419 problem stopped adding in /etc/crontab a line: @reboot root echo "disable" > /sys/firmware/acpi/interrupts/gpe03

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.