LINUX.ORG.RU

SA_* - это для «старых» ядер

кем стал SA_INTERRUPT не скажу, но SA_SHIRQ стал IRQF_SHARED

upd: видимо SA_INTERRUPT => IRQF_DISABLED http://lwn.net/Articles/229673/

updd: и таки лучше использовать IRQF_SHARED, вдруг на том прерывании еще кто-то висит

metawishmaster ★★★★★
()
Последнее исправление: metawishmaster (всего исправлений: 2)
Ответ на: комментарий от metawishmaster

Спасибо, кажется, это именно то, что надо.

braboar ★★
() автор топика
Ответ на: комментарий от metawishmaster

Осталось маленькое но...

int request_irq(unsigned int irq,
              void (*handler)(int, void *, struct pt_regs *),
              unsigned long irqflags, const char *devname,
              void *dev_id);

Гугль не рекомендует передавать последним параметром NULL. А чтобы такое туда передать?

braboar ★★
() автор топика
Ответ на: комментарий от metawishmaster

Да, полегчало, но...

[Tue Mar 12 16:45:19 2013] request_irq done [Tue Mar 12 16:45:19 2013] ------------[ cut here ]------------ [Tue Mar 12 16:45:19 2013] WARNING: at kernel/irq/manage.c:421 __enable_irq+0x38/0xc0() [Tue Mar 12 16:45:19 2013] Hardware name: System Product Name [Tue Mar 12 16:45:19 2013] Unbalanced enable for IRQ 11 [Tue Mar 12 16:45:19 2013] Modules linked in: sgdma(O+) pci_stub vboxpci(O) vboxnetadp(O) vboxnetflt(O) vboxdrv(O) snd_seq_dummy snd_seq_oss snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss ipv6 lp ppdev parport_pc parport fuse i915 snd_hda_codec_hdmi snd_hda_codec_realtek joydev usbhid hid drm_kms_helper drm intel_agp intel_gtt video agpgart i2c_algo_bit snd_hda_intel snd_hda_codec snd_hwdep eeepc_wmi snd_pcm asus_wmi r8169 mii processor psmouse thermal fan mei(C) i2c_i801 i2c_core thermal_sys sparse_keymap snd_page_alloc rfkill snd_timer button serio_raw evdev snd hwmon wmi soundcore loop [last unloaded: sgdma] [Tue Mar 12 16:45:19 2013] Pid: 2886, comm: insmod Tainted: G WC O 3.2.29 #2

sgdma - это мой модуль, и он портит ядро. И таки шо с этим делать?

braboar ★★
() автор топика
Ответ на: Осталось маленькое но... от braboar

хм... я туда передаю указатель на структуру описывающую устройство, а он потом передастся в обработчик прерывания: т.е. что-то типа такого круговорота воды в природе:

static int mkopci_request_irq(struct mkopci_device *dev)
{
...
ret = request_irq(dev->core.irq, &mkopci_int_handler, IRQF_SHARED, dev->core.name, dev);
...
}

static long mkopci_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
struct mkopci_device *dev = (struct mkopci_device *)filp->private_data;
...
ret = mkopci_request_irq(dev);
...
}

static irqreturn_t mkopci_int_handler(int irq, void *dev)
{
struct mkopci_device *mko_dev = (struct mkopci_device *)dev;
// и здесь мы поймем, наше ли устройство вызвало прерывание
...
}

metawishmaster ★★★★★
()
Ответ на: комментарий от metawishmaster

угу, косякнул с оформлением.

Вопрос в том, что при установке модуля получаем

insmod Tainted: G WC O 3.2.29 #2
(так лучше?)

и как от этого избавиться? А в обработчик не заходим, да :-(

braboar ★★
() автор топика
Ответ на: комментарий от metawishmaster

А то, попадаются

insmod Tainted: G C O 3.2.29 #2

G - GPL лицензия, понятно. 3.2.29 - ядро. А вот что такое C 0 - пока не понял.

braboar ★★
() автор топика
Ответ на: А то, попадаются от braboar

Documentation/oops-tracing.txt:261


11: 'C' if a staging driver has been loaded.


а теперь уже у меня вопрос: как Вы сделали модуль staging'овым? :)

upd: а про O:

13: 'O' if an externally-built («out-of-tree») module has been loaded.

metawishmaster ★★★★★
()
Последнее исправление: metawishmaster (всего исправлений: 1)
Ответ на: комментарий от metawishmaster

^_^

Теперь бы точно разузнать, что такое staging, а О - действительно, собирается вне дерева ядра.

braboar ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.