You are not logged in.

#1 2013-09-21 15:50:25

labotsirc
Member
Registered: 2013-08-21
Posts: 108

Depending on the build configuration, kernel fix works or not

After solving several on-the-way problems with the help of the forum membrs, i finally reached a point where i do not understand what is happening.
Decided to make a new post since the other sub-problem was actually solved, while this not.

My final goal is to fix a kernel issue with the usbhid driver. A forum member discovered the fix (credits to FxChip); to modify a line in drivers/hid/usbhid/hid-core.c and recompile the kernel.
I have downloaded the kernel sources from

git clone https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/

Now the problem is the following:

(1) If i use the default kernel settings (make menuconfig), plus some others for booting the main partiton, the keyboard fix does work perfectly....but lsmod shows an empty list. I have no modules, therefore i dont even have network. I thought
that a default configuration would grab the modules i need.


These are the modules i should have:

[cristobal@orion ~]$ lsmod   
Module                  Size  Used by
fuse                   74512  3 
snd_hda_codec_hdmi     30496  1 
iTCO_wdt                5407  0 
iTCO_vendor_support     1937  1 iTCO_wdt
joydev                  9671  0 
uvcvideo               72836  0 
videobuf2_vmalloc       3280  1 uvcvideo
videobuf2_memops        2343  1 videobuf2_vmalloc
ath3k                   7565  0 
videobuf2_core         28027  1 uvcvideo
btusb                  18536  0 
videodev              111140  2 uvcvideo,videobuf2_core
bluetooth             308892  3 ath3k,btusb
media                  11751  2 uvcvideo,videodev
nls_cp437               5961  1 
arc4                    2008  2 
mxm_wmi                 1475  0 
ath9k                  93273  0 
ath9k_common            2095  1 ath9k
ath9k_hw              393625  2 ath9k_common,ath9k
ath                    15817  3 ath9k_common,ath9k,ath9k_hw
evdev                  10989  18 
mac80211              466106  1 ath9k
pcspkr                  2035  0 
cfg80211              412694  3 ath,ath9k,mac80211
snd_hda_codec_realtek    38902  1 
rfkill                 15651  3 cfg80211,bluetooth
lpc_ich                13120  0 
i2c_i801               11277  0 
r8169                  58263  0 
mfd_core                3129  1 lpc_ich
i915                  654306  5 
mii                     4035  1 r8169
thermal                 8532  0 
fan                     2761  0 
snd_hda_intel          36904  5 
battery                 6837  0 
snd_hda_codec         149569  3 snd_hda_codec_realtek,snd_hda_codec_hdmi,snd_hda_intel
ac                      3332  0 
i2c_algo_bit            5399  1 i915
intel_agp              10880  1 i915
snd_hwdep               5988  1 snd_hda_codec
intel_gtt              12664  2 i915,intel_agp
snd_pcm                77069  3 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel
drm_kms_helper         36286  1 i915
snd_page_alloc          7210  2 snd_pcm,snd_hda_intel
drm                   238582  4 i915,drm_kms_helper
snd_timer              18694  1 snd_pcm
snd                    51534  17 snd_hda_codec_realtek,snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_hda_codec,snd_hda_intel
wmi                     8419  1 mxm_wmi
i2c_core               24164  6 drm,i915,i2c_i801,drm_kms_helper,i2c_algo_bit,videodev
mei_me                  9304  0 
video                  11196  1 i915
soundcore                952  1 snd
processor              24839  0 
button                  4677  1 i915
mei                    62126  1 mei_me
hid_generic             1161  0 
usbhid                 40321  0 
hid                    90166  2 hid_generic,usbhid
sd_mod                 30789  5 
ahci                   22896  4 
libahci                21401  1 ahci
libata                171040  2 ahci,libahci
ehci_pci                4000  0 
xhci_hcd              146123  0 
ehci_hcd               59156  1 ehci_pci
scsi_mod              129769  2 libata,sd_mod
usbcore               179012  7 ath3k,btusb,uvcvideo,ehci_hcd,ehci_pci,usbhid,xhci_hcd
usb_common              1656  1 usbcore
dm_mod                 81838  0 
ext4                  474123  2 
crc16                   1367  2 ext4,bluetooth
mbcache                 6082  1 ext4
jbd2                   83504  1 ext4
vfat                   10063  1 
fat                    51827  1 vfat

(2) Because of the modules problem, i decided to go and copy my configuration from my actual -ARCH build

zcat /proc/config.bz > .config

and proceed building. This time the kernel boots and all modules are loaded. However, the keyboard fix no longer works.
I also tried

make localmodconfig

With modprobed_db, but also the same result.

Does someone know what is going on or what should i do  ?
In the end what i need is to have a working linux with the keyboard fix.
Thanks in advance

Edit: Using ABS with makepkg reproduces problem (2).

Last edited by labotsirc (2013-09-21 17:40:36)

Offline

#2 2013-09-25 15:10:46

labotsirc
Member
Registered: 2013-08-21
Posts: 108

Re: Depending on the build configuration, kernel fix works or not

Does it makes a difference (for the problem) the fact that ARCH uses USBHID as a module (M) and I use it as built-in (*)? 
I also wonder what other kernel options affect USBHID behavior, apart from the ones inside HID menu, maybe changing those options could solve the whole problem and even better i could just go back to ABS mode using those options.

Last edited by labotsirc (2013-09-25 15:20:36)

Offline

#3 2013-09-25 16:11:54

tomk
Forum Fellow
From: Ireland
Registered: 2004-07-21
Posts: 9,839

Re: Depending on the build configuration, kernel fix works or not

Is it necessary to use linux-git? As a general rule, it's preferable to use the current stable release - 3.11.1 at the moment.

Assuming that you can use that, I would suggest the following:
- create a patch that applies your hid-core.c change
- get the current 3.11.1-1 PKGBUILD and associated files from ABS
- edit the PKGBUILD to add your patch to the source array, add a checksum for it to the checksum array, and add the required patch command for it to the prepare() function
- place your patch in the build directory with the other files
- run makepkg

This will create a kernel package identical to the Arch default kernel except for the addition of your patch.

Offline

#4 2013-09-25 18:04:16

labotsirc
Member
Registered: 2013-08-21
Posts: 108

Re: Depending on the build configuration, kernel fix works or not

tomk wrote:

Is it necessary to use linux-git? As a general rule, it's preferable to use the current stable release - 3.11.1 at the moment.

Assuming that you can use that, I would suggest the following:
- create a patch that applies your hid-core.c change
- get the current 3.11.1-1 PKGBUILD and associated files from ABS
- edit the PKGBUILD to add your patch to the source array, add a checksum for it to the checksum array, and add the required patch command for it to the prepare() function
- place your patch in the build directory with the other files
- run makepkg

This will create a kernel package identical to the Arch default kernel except for the addition of your patch.

Thanks tomk. I have already tried this though, and the problem is still there.
As I mentioned earlier, the experiments i have done helped me discard any PKGBUILD or patch issues and deduce that it is a problem with the modules selection that ARCH does in comparison to the default
module selection from "make defconfig", where the fix did work. The best way to prove this was that i copied the .config file from ARCH and built traditionaly without using patches or PKGBUILD, and the problem was still there.

At the moment i am testing different variations of kernels based on the ARCH .config, by removing some modules (the defconfig one is much smaller than the ARCH one) and recompiling each time. At the moment no luck, but eventually the problematic module/option will be found. Any directions on which modules to look into is welcome.

Last edited by labotsirc (2013-09-25 18:05:59)

Offline

#5 2013-09-27 18:06:35

labotsirc
Member
Registered: 2013-08-21
Posts: 108

Re: Depending on the build configuration, kernel fix works or not

After 16 kernel compilations, gradually adding modules each time, i came to the cause of this problem.

The problem is a conflict between usbhid and usb 3.0 support. More specifically, this option is what is causing trouble:

-> Device Drivers 
    -> USB support (USB_SUPPORT [=y])
        -> <M>     xHCI HCD (USB 3.0) support

And this is where my fix is:

-> Device Drivers  
    -> HID support
        -> USB HID support ---->  (my fix is here, edited drivers/hid/usbhid/hid-core.c)

I think hxci_hcd module is taking over the keyboard, ignoring my the modified 1000Hz frecuency i have put into the usbhid module. ARCH default config includes xhci_hcd, that is why i was having trouble importing that configuration.
As soon as i remove xhci_hcd and recompile the kernel, the keyboard fix works again. At the moment i am working without xhci_hcd, therefore i dont have USB 3.0 support. The laptop USB ports are all 3.0 and because i am not having xci_hcd, i assume they are working as 2.0, indeed there is a wasted potential.

The question i have now is:
is it still possible to include xhci_hcd module but force it to not affect the laptop keyboard?

Last edited by labotsirc (2013-09-27 18:23:07)

Offline

Board footer

Powered by FluxBB