My laptop is burning

I have a laptop with hybrid ATI GPUs, without the proprietary ATI driver, the temperature of the laptop is ... very warm : the CPU's temperature is between 90 and 105 degrees. This leads to random crashes, random reboots, and there is this constant sound of fans running in background.

This article assumes you are using Archlinux with a recent kernel, and you have a laptop with hybrid GPUs, I'm also using the open source ATI driver (xf86-video-ati) and KMS is enabled :

$ uname -a
Linux nibbler 2.6.37-ARCH...
$ lspci | grep VGA 
01:05.0 VGA compatible controller: ATI Technologies Inc M880G [Mobility Radeon HD 4200]
02:00.0 VGA compatible controller: ATI Technologies Inc Redwood [Radeon HD 5600 Series]
$ lsmod  | grep -i radeon
radeon                845112  2 
ttm                    44512  1 radeon
drm_kms_helper         23703  1 radeon
drm                   141488  4 radeon,ttm,drm_kms_helper
i2c_algo_bit            4191  1 radeon
i2c_core               16029  6 videodev,radeon,drm_kms_helper,drm,i2c_piix4,i2c_algo_bit

Disabling one GPU

This is probably the best way to win degrees, with this my CPU is running between 55 and 65 degrees. The first step is to enable debugfs, by adding the following line to /etc/fstab:

none /sys/kernel/debug debugfs defaults 0 0

Then, to disable one GPU, simply do the following as root:

# echo OFF > /sys/kernel/debug/vgaswitcheroo/switch

This has to be done before starting X (otherwise it crashes). You can append that line to /etc/rc.local if you want it to be executed at start-up.

Changing the governor

Changing the governor can also be a solution, but this has the inconvenient to slow down the laptop (the frequency of the CPU will be dynamically changed by the kernel). With it I win about 5/10 degrees. If you don't care of your GPU performances but care about the CPU, the first solution might be better. More about this can be found on Archlinux's wiki: CPU Frequency Scaling.