Context switching
Scott Long
scottl at samsco.org
Mon Apr 10 14:09:08 UTC 2006
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
More information about the freebsd-hackers
mailing list