15

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.

1
  • 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
    Commented Dec 3, 2019 at 19:00

6 Answers 6

14

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.

1
  • You saved my life (Y)
    – Haris
    Commented Feb 22, 2020 at 12:46
8

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.

4

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

1

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

0

On Linux Lite 5.2, MacBook Pro 9.2, Bios 233.0.0.0 (6/10/2020), i had problems with the interrupts gpe17 and sci.

The solution from Peter Nowee above worked!

I masked it by systemctl:

  1. Create file /etc/systemd/system/mask-gpe17.service
  2. Copy following lines into it and save the file:
    [Unit]
    Description=Mask GPE 17
    
    [Service]
    ExecStart=/usr/bin/bash -c 'echo "mask" > /sys/firmware/acpi/interrupts/gpe17'
    
    [Install]
    WantedBy=multi-user.target
    
  3. Create file /etc/systemd/system/mask-sci.service
  4. Copy following lines into it and save the file:
    [Unit]
    Description=Mask SCI
    
    [Service]
    ExecStart=/usr/bin/bash -c 'echo "mask" > /sys/firmware/acpi/interrupts/sci'
    
    [Install]
    WantedBy=multi-user.target
    
  5. Then enable the services in the terminal:
    sudo systemctl enable mask-gpe17.service
    
    sudo systemctl enable mask-sci.service
    
-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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .