Difference between revisions of "Lt hotswap"
(→Script to eject the ultrabay) |
Marcmerlin (Talk | contribs) m (→Features) |
||
(8 intermediate revisions by 7 users not shown) | |||
Line 3: | Line 3: | ||
|style="vertical-align:top" | | |style="vertical-align:top" | | ||
=== lt_hotswap === | === lt_hotswap === | ||
− | The <tt>lt_hotswap</tt> kernel module enables hot-swapping of UltraBay disk drives under Linux, with DMA support. | + | The <tt>lt_hotswap</tt> kernel module enables hot-swapping of UltraBay disk drives under Linux, with DMA support on machines with an old kernel where you might still be required to use piix+ide-disk. With 2.6.2x or better, you should use the new driver, ata_pixx with native hotswapping support.: |
|} | |} | ||
===Features=== | ===Features=== | ||
− | *enable hotswapping of [[UltraBay]] drives | + | *enable hotswapping of [[UltraBay]] drives if you have to use the old piix/ide-disk drive instead of ata_piix which supports hotswap natively. On new kernels, you should not bother with piix+ide-disk+lt_hotswap and just use ata_piix. See the [[How to hotswap UltraBay devices]] page for more detaoils on ata_piix vs iix+ide-disk+lt_hotswap |
*automatic IDE unregistering on [[ibm-acpi]] eject event | *automatic IDE unregistering on [[ibm-acpi]] eject event | ||
*leaves DMA support intact | *leaves DMA support intact | ||
Line 14: | Line 14: | ||
* Works only in conjunction with the <tt>ide-disk</tt> driver (recent ThinkPad models use <tt>ata_piix</tt> instead). | * Works only in conjunction with the <tt>ide-disk</tt> driver (recent ThinkPad models use <tt>ata_piix</tt> instead). | ||
* Does '''not''' get on well with idectl. Use one, or the other, or crash. | * Does '''not''' get on well with idectl. Use one, or the other, or crash. | ||
+ | * On Kernel >= 2.6.19 "#include <linux/config.h>" in lt_hotswap.c has to be replaced by "#include <linux/autoconf.h>" | ||
+ | * On Kernel >= 2.6.22, "create_proc_ide_interfaces();" in lt_hotswap.c has to be replaced by "ide_proc_register_port(&ide_hwifs[num]);". | ||
+ | * On Kernel >= 2.6.23, all occurrences of "acpi_bus_generate_event" in lt_hotswap.c need to be replaced by "acpi_bus_generate_proc_event". | ||
===Project Homepage / Availability=== | ===Project Homepage / Availability=== | ||
Line 29: | Line 32: | ||
===Supported models=== | ===Supported models=== | ||
The driver has been explicitly reported to work on the following models. It should work on many others as well: | The driver has been explicitly reported to work on the following models. It should work on many others as well: | ||
− | *ThinkPad {{A31p}} (warmswap), {{X22}}, {{T30}}, {{T22}}, {{T23}}, {{T40}}, {{T42}} | + | *ThinkPad {{A31p}} (warmswap), {{X22}}, {{X24}}, {{T30}}, {{T22}}, {{T23}}, {{T40}}, {{T42}} |
<tt>lt_hotswap</tt> does '''not''' work well on models that require the <tt>ata_piix</tt> driver rather than the generic <tt>ide-disk</tt> IDE driver. See [[problems with SATA and Linux]] for a list, and [[How to hotswap UltraBay devices]] for an alternative solution on these models. | <tt>lt_hotswap</tt> does '''not''' work well on models that require the <tt>ata_piix</tt> driver rather than the generic <tt>ide-disk</tt> IDE driver. See [[problems with SATA and Linux]] for a list, and [[How to hotswap UltraBay devices]] for an alternative solution on these models. | ||
Line 35: | Line 38: | ||
At least for a thinkpad T41p with a 2.6.15 kernel I recommend to use version 0.2 of lt_hotswap - the latest version reproducable produces oopses and kernel crashes for me. | At least for a thinkpad T41p with a 2.6.15 kernel I recommend to use version 0.2 of lt_hotswap - the latest version reproducable produces oopses and kernel crashes for me. | ||
− | ===Script to eject | + | ===Script to eject an optical ultrabay drive=== |
I configured my system to automatically eject my optical drive in battery mode, because it saves about 500mW which is about 5% when my system is idle. | I configured my system to automatically eject my optical drive in battery mode, because it saves about 500mW which is about 5% when my system is idle. | ||
But when the drive is in use, issuing an eject will result in a kernel ooops/crash. | But when the drive is in use, issuing an eject will result in a kernel ooops/crash. | ||
So the problem is: How do I check if the device is still in use, either by the kernel or by some other process? | So the problem is: How do I check if the device is still in use, either by the kernel or by some other process? | ||
The trick is to compile "cdrom and ide_cd" as modules. If the unload of ide_cd failes some other process is still using the device. | The trick is to compile "cdrom and ide_cd" as modules. If the unload of ide_cd failes some other process is still using the device. | ||
+ | <bash> | ||
+ | #!/bin/sh | ||
+ | # disable bay if possible | ||
+ | # saves about 500mW | ||
− | + | if modprobe -r ide_cd; then | |
− | + | modprobe -r cdrom | |
− | + | echo "MSTR eject" > /proc/acpi/lths | |
− | + | modprobe ide-cd | |
− | + | modprobe cdrom | |
− | + | else | |
− | + | echo "" | |
− | + | echo "$(fuser -vm /dev/hdc)" | |
− | + | fi | |
− | + | </bash> | |
− | |||
− | |||
− | |||
Latest revision as of 00:26, 27 December 2007
lt_hotswapThe lt_hotswap kernel module enables hot-swapping of UltraBay disk drives under Linux, with DMA support on machines with an old kernel where you might still be required to use piix+ide-disk. With 2.6.2x or better, you should use the new driver, ata_pixx with native hotswapping support.: |
Features
- enable hotswapping of UltraBay drives if you have to use the old piix/ide-disk drive instead of ata_piix which supports hotswap natively. On new kernels, you should not bother with piix+ide-disk+lt_hotswap and just use ata_piix. See the How to hotswap UltraBay devices page for more detaoils on ata_piix vs iix+ide-disk+lt_hotswap
- automatic IDE unregistering on ibm-acpi eject event
- leaves DMA support intact
Limitations
- Requires ibm-acpi to be running (does not work with APM).
- Works only in conjunction with the ide-disk driver (recent ThinkPad models use ata_piix instead).
- Does not get on well with idectl. Use one, or the other, or crash.
- On Kernel >= 2.6.19 "#include <linux/config.h>" in lt_hotswap.c has to be replaced by "#include <linux/autoconf.h>"
- On Kernel >= 2.6.22, "create_proc_ide_interfaces();" in lt_hotswap.c has to be replaced by "ide_proc_register_port(&ide_hwifs[num]);".
- On Kernel >= 2.6.23, all occurrences of "acpi_bus_generate_event" in lt_hotswap.c need to be replaced by "acpi_bus_generate_proc_event".
Project Homepage / Availability
- Project page: http://www.sourceforge.net/projects/lths
- Latest version: http://prdownloads.sourceforge.net/lths/lt_hotswap-0.3.6.tar.gz?download
Development and discussion of lt_hotswap is currently being held in Linux-ThinkPad Mailinglist.
Installation
In order to use the driver you must use ACPI and also have the ibm-acpi driver linked to your kernel (module or compiled).
When loading the hotswap module, you can use the module parameter: auto_eject=1
to automatically unregister the drives IDE interface. This will happen upon popping out the UltraBay lever.
Supported models
The driver has been explicitly reported to work on the following models. It should work on many others as well:
lt_hotswap does not work well on models that require the ata_piix driver rather than the generic ide-disk IDE driver. See problems with SATA and Linux for a list, and How to hotswap UltraBay devices for an alternative solution on these models.
At least for a thinkpad T41p with a 2.6.15 kernel I recommend to use version 0.2 of lt_hotswap - the latest version reproducable produces oopses and kernel crashes for me.
Script to eject an optical ultrabay drive
I configured my system to automatically eject my optical drive in battery mode, because it saves about 500mW which is about 5% when my system is idle. But when the drive is in use, issuing an eject will result in a kernel ooops/crash. So the problem is: How do I check if the device is still in use, either by the kernel or by some other process? The trick is to compile "cdrom and ide_cd" as modules. If the unload of ide_cd failes some other process is still using the device. <bash>
- !/bin/sh
- disable bay if possible
- saves about 500mW
if modprobe -r ide_cd; then
modprobe -r cdrom echo "MSTR eject" > /proc/acpi/lths modprobe ide-cd modprobe cdrom
else
echo "" echo "$(fuser -vm /dev/hdc)"
fi </bash>