Date: Tue, 22 Nov 2005 11:19:18 +0200 From: "Konstantin Prokazoff" <kprokazov@svr.kiev.ua> To: "John Baldwin" <jhb@freebsd.org>, <freebsd-hackers@freebsd.org> Subject: Re: poll()/select() Message-ID: <0d4801c5ef45$d09ba3d0$0c02010a@svr012> References: <3.0.1.32.20051121044201.00aa1490@pop.redshift.com> <0bb401c5ee9d$79ac2c50$0c02010a@svr012> <200511211038.26937.jhb@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Welcome, John, thanks for the answer. I'll test today bus_setup_intr() without INTR_FAST flag, but how I remember, this cause to system heavy load for interrupt processing ;( in my case. My handler uses spin mutexes to block inter-interrupting & sleep mutexes to block some structures now. I have tried to use swi/taskqueue, but result is a "sync" degradation level. Can you help with sources briefing in my driver case? Thnx in advance. Best regards, Konstantin Prokazoff Center Of Excellence, S_V_R Ltd., Kyiv HQs, Ukraine Official business-partner & DevConnect member of Avaya Inc. Regional development & support center of Digium Inc. Tel. +38 044 594 1781, ext. 1038 Fax. +38 044 234 0455 ----- Original Message ----- From: "John Baldwin" <jhb@freebsd.org> To: <freebsd-hackers@freebsd.org> Cc: "Konstantin Prokazoff" <kprokazov@svr.kiev.ua> Sent: Monday, November 21, 2005 5:38 PM Subject: Re: poll()/select() > On Monday 21 November 2005 08:14 am, Konstantin Prokazoff wrote: > > Thanks for comment, > > > > I think, after kernel inspection, problem (maybe) in preemption. While > > syscall to poll or select holds sellock, and if another thread (process) > > tries to syscall or we have taken interrupt (where handler use > > selrecord/selwakeup too), kernel will deadlock. > > I have this situation cause to INTR_FAST interrupt handler in device > > driver for Digium's PCI board, which provides 4 T1/E1 interfaces. Problem > > 100% repetitive. > > Another way to avoid such deadlock - provide different kthread/ithreads > > for select/poll mechanism. > > You can't call selwakeup() from an INTR_FAST handler. Try removing INTR_FAST > and see if it fixes your issue. If you want to use INTR_FAST, then realize > that you can only use spin mutexes in your handler, and that any more > complicated work like selwakeup() that uses regular mutexes will have to be > deferred either by using a swi handler or dispatching a task to the Fast > taskqueue. > > -- > John Baldwin <jhb@FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/ > "Power Users Use the Power to Serve" = http://www.FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0d4801c5ef45$d09ba3d0$0c02010a>