can't load omnibook-kernel-module
ProblemType: KernelOops
DistroRelease: Ubuntu 10.10
Package: linux-image-2.6.35-19-generic 2.6.35-19.25
Regression: Yes
Reproducible: No
ProcVersionSignature: Ubuntu 2.6.35-19.25-generic 2.6.35.3
Uname: Linux 2.6.35-19-generic i686
AlsaVersion: Advanced Linux Sound Architecture Driver Version 1.0.23.
Annotation: Your system might become unstable now and might need to be restarted.
AplayDevices:
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC861-VD Analog [ALC861-VD Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
Architecture: i386
ArecordDevices:
**** List of CAPTURE Hardware Devices ****
card 0: Intel [HDA Intel], device 0: ALC861-VD Analog [ALC861-VD Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
AudioDevicesInUse:
USER PID ACCESS COMMAND
/dev/snd/controlC0: kamil 1651 F.... pulseaudio
CRDA: Error: [Errno 2] No such file or directory
Card0.Amixer.info:
Card hw:0 'Intel'/'HDA Intel at 0xdc440000 irq 45'
Mixer name : 'Realtek ALC861-VD'
Components : 'HDA:10ec0862,1179010c,00100001 HDA:11c11040,11790001,00100200'
Controls : 12
Simple ctrls : 9
Date: Thu Aug 26 18:59:00 2010
Failure: oops
Frequency: Once a day.
InstallationMedia: Ubuntu 9.10 "Karmic Koala" - Release Candidate i386 (20091020.3)
MachineType: TOSHIBA Satellite A200
PccardctlIdent:
Socket 0:
no product info available
PccardctlStatus:
Socket 0:
no card
ProcCmdLine: BOOT_IMAGE=(hd0,2)/boot2/vmlinuz-2.6.35-19-generic root=/dev/sda2 loop=/hostname/disks/root.disk splash
RelatedPackageVersions: linux-firmware 1.38
SourcePackage: linux
Title: BUG: unable to handle kernel paging request at 746f6fa4
dmi.bios.date: 08/21/2007
dmi.bios.vendor: TOSHIBA
dmi.bios.version: V1.80
dmi.board.name: ISKAE
dmi.board.vendor: TOSHIBA
dmi.board.version: 1.00
dmi.chassis.asset.tag: *
dmi.chassis.type: 10
dmi.chassis.vendor: TOSHIBA
dmi.chassis.version: N/A
dmi.modalias: dmi:bvnTOSHIBA:bvrV1.80:bd08/21/2007:svnTOSHIBA:pnSatelliteA200:pvrPSAE0E-00Y018PL:rvnTOSHIBA:rnISKAE:rvr1.00:cvnTOSHIBA:ct10:cvrN/A:
dmi.product.name: Satellite A200
dmi.product.version: PSAE0E-00Y018PL
dmi.sys.vendor: TOSHIBA
Created attachment 473162
Patch that fixes this module on x86_64 by padding struct omnibook_feature to 128 bytes. Also includes some cleanup of declarations and extra dprintks for debugging above issue
Description of problem:
Package: kernel
Latest Crash: Mon 10 Jan 2011 11:14:04 AM
Command: not_applicable
Reason: BUG: unable to handle kernel paging request at 000000000000b800
Comment: This has apparently been an issue with the omnibook module since kernel 2.6.33. Without this module, I'm unable to use laptop-specific keys and functions, or to get suspend/hibernate to work. What's worse is that without this module the fan speed control is broken, and so my laptop can easily overheat and shut down under high CPU loads.
Bug Reports: Kernel oops report was uploaded
Version-Release number of selected component (if applicable): 2.6.35. 10-74.fc14. x86_64. x86_64 and akmod-omnibook
kmod-omnibook-
How reproducible:
# modprobe omnibook
Steps to Reproduce:
1. Install akmod- or kmod-omnibook
2. Attempt to load it via modprobe
3. Module crashes during init, generates kernel oops
Actual results:
Crashed module, cannot be removed via modprobe -r
Expected results:
Omnibook laptop functionality enabled
Additional info: features_ driver[ i] to test all of the defined features, one at
I've tracked this to an alignment issue in the initialization code. This
module uses a section(.features) directive to register all of its features
into a portion of the .data section, and then defines a start and end
pointer via sections.lds which it pulls back into init.c. It then iterates
over &_start_
a time.
The failed paging request appears to be happening because of unexpected omnibook_ feature) was 104, the alignment was sometimes 104
linker behavior, possibly only on x86_64, and possibly due to a change in
GNU ld or gcc since 2007. I used objdump -t on omnibook.ko, and found that
while the sizeof(
and sometimes 108. This caused the array math in the feature loop to
misaddress the struct omnibook_feature found in the .feature section,
eventually leading to invalid calls and the above crash.
Now, I'm not a kernel hacker, and I haven't done any C programming since
college. I fixed this on my Toshiba Satellite L355D-S7901 running kernel
2.6.35 on arch x86_64 by padding struct omnibook_feature to 128 bytes, via
a char pad[24] at the end of the struct. Perhaps someone who is a more
skilled C programmer or kernel hacker can think of a better way to make
this work, and to guarantee that it works on both 32 and 64 bit
architectures.