Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Apr 2006 08:08:48 -0600
From:      Scott Long <scottl@samsco.org>
To:        Nickolas <nickolas@atlas.ua>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Context switching
Message-ID:  <443A66F0.7050802@samsco.org>
In-Reply-To: <1879959918.20060410165511@atlas.ua>
References:  <1879959918.20060410165511@atlas.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
Nickolas wrote:
> Hello All!
> 
>   I'm porting a CPI card driver from linux to FreeBSD.
>   Some initialization routines require much time (~1-2 seconds).
>   Initialization of hardware should be done during opening device
>   special file. So, I need to switch thread context.
> 
>   I'm doing it in such way:
> 
>   mi_switch(SW_VOL, choosethread());
> 
>   Main trouble: system panic after program exit.
> 
>   dmesg output:
> --------------------------
> Fatal trap 12: page fault while in user mode
> fault virtual address   = 0xbfbfe5bc
> fault code              = user write, protection violation
> instruction pointer     = 0x1f:0x8074604
> stack pointer           = 0x2f:0xbfbfe5c0
> frame pointer           = 0x2f:0xbfbfe5f8
> code segment            = base 0xc090f8c0, limit 0x0, type 0x13
>                         = DPL 0, pres 1, def32 1, gran 1
> processor eflags        = interrupt enabled, resume, IOPL = 0
> current process         = 472 (bash)
> trap number             = 12
> panic: page fault
> --------------------------
> 
>   Please, tell how correct context switching should be implemented?
> 
>   OS version: FreeBSD 5.4
> 

tsleep and msleep are the appropriate ways to context switch.  mi_switch
is an implementation detail of the scheduler.

Scott




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?443A66F0.7050802>