Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Mar 2001 10:38:37 -0800 (PST)
From:      Matthew Jacob <mjacob@feral.com>
To:        Warner Losh <imp@harmony.village.org>
Cc:        Poul-Henning Kamp <phk@critter.freebsd.dk>, John Baldwin <jhb@FreeBSD.ORG>, arch@FreeBSD.ORG
Subject:   Re: man pages 
Message-ID:  <Pine.BSF.4.21.0103171037090.65580-100000@beppo.feral.com>
In-Reply-To: <200103171820.f2HIKq945996@harmony.village.org>

next in thread | previous in thread | raw e-mail | index | archive | help



Kernel Functions for Drivers		   ddi_enter_critical(9F)



NAME
     ddi_enter_critical, ddi_exit_critical -  enter  and  exit	a
     critical region of	control

SYNOPSIS
     #include <sys/conf.h>
     #include <sys/ddi.h>
     #include <sys/sunddi.h>

     unsigned int ddi_enter_critical(void);

     void ddi_exit_critical(unsigned int ddic);

INTERFACE LEVEL
     Solaris DDI specific (Solaris DDI).

ARGUMENTS
     ddic      The   returned	value	from	the    call    to
	       ddi_enter_critical()    must    be    passed    to
	       ddi_exit_critical().

DESCRIPTION
     Nearly all	driver operations can be done without any special
     synchronization  and protection mechanisms	beyond those pro-
     vided by, e.g., mutexes (see mutex(9F)).  However,	for  cer-
     tain devices there	can exist a very short critical	region of
     code which	must be	allowed	to run uninterrupted.  The  func-
     tion  ddi_enter_critical()	 provides  a mechanism by which	a
     driver can	ask the	system to guarantee to the  best  of  its
     ability that the current thread of	execution will neither be
     preempted nor interrupted.	This  stays  in	 effect	 until	a
     bracketing	 call  to  ddi_exit_critical()	is  made (with an
     argument	 which	  was	 the	returned    value    from
     ddi_enter_critical()).

     The driver	may not	call any functions external to itself  in
     between  the time it calls	ddi_enter_critical() and the time
     it	calls ddi_exit_critical().

RETURN VALUES
     ddi_enter_critical()  returns  an	opaque	unsigned  integer
     which   must   be	 used	in   the   subsequent	call   to
     ddi_exit_critical().

CONTEXT
     This function can be called from user or interrupt	context.

WARNINGS
     Driver writers should note	that in	a multiple processor sys-
     tem this function does not	temporarily suspend other proces-
     sors from executing. This function	also cannot guarantee  to
     actually  block  the  hardware  from  doing  such	things as



SunOS 5.6	     Last change: 4 Nov	1991			1






Kernel Functions for Drivers		   ddi_enter_critical(9F)



     interrupt acknowledge cycles. What	it can	do  is	guarantee
     that the currently	executing thread will not be preempted.

     Do	not write  code	 bracketed  by	ddi_enter_critical()  and
     ddi_exit_critical() that can get caught in	an infinite loop,
     as	the machine may	crash if you do.

SEE ALSO
     mutex(9F)

     Writing Device Drivers












































SunOS 5.6	     Last change: 4 Nov	1991			2



	


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0103171037090.65580-100000>