Re:How to establish a priority to an interrupt handler

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Monica!

You can change the priority of the irq thread with the _chrt_ tool from user space.

With preempt-rt all your interrupts are forced threaded ones (excluding timer interrupt and may some others). If you realy want it to be executed in hard interrupt context u have to use the IRQF_NODELAY as irqflag when requesting the interrupt with request_irq().

This could however lead to larger latencies for the system, especially when your interrupt handler is long, since all irqs are disabled in that context. On the other hand your interrupt latency will be much shorter since no schedule() has to be done to schedule the irq_thread.

If you need to change the priority from within the driver code this thread (http://www.mail-archive.com/linux-rt-users@xxxxxxxxxxxxxxx/msg01022.html) my be interesting for you.

I hope this is helping you.

Kind regards

Johannes Bauer


----- UrsprÃngliche Nachricht -----
Von: "Monica Puig-Pey"
Erhalten: 16.05.2011 12:26
An: linux-rt-users@xxxxxxxxxxxxxxx

Hi,

I'm using Ubuntu 10.04 with the 2.6.31-11-rt patch installed. I'm 
developing a PCI device driver using hardware interrupts.
As I read at the RT wiki 
(https://rt.wiki.kernel.org/index.php/CONFIG_PREEMPT_RT_Patch ) 
interrupts are moved to kernel threads called Threaded Interrupts in the 
RT patch.

I would like to give a priority chosen by me to my IRQ handler, but I 
don't know how to do it, or if it is possible (it seems it is).

I've found (http://lwn.net/Articles/302043/ ) that what I had to use in 
order to get Threaded Interrupt is:

int request_threaded_irq(unsigned int irq, irq_handler_t handler,
irq_handler_t quick_check_handler,
unsigned long flags, const char *name, void *dev)

But there is not priority there!

Using ps -eo pid,pri,rtprio,cmd I've seen my handler runs with priority 50.

I also used :

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

and using ps command here my handler still runs with priority 50. 
Shouldn't it work as a non threaded interrupt then? Why 50 instead 99 or 
the highest priority one?

Which function should I use to chose the priority for the IRQ thread?

Is there any other function to call from this context where my handler 
could know its priority?

Thank you

MÃnica
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux