If we fail to emulate a vm86 trap in kernel mode, then we use
vm86_trap() to return to the calling program directly. vm86_trap() doesn't return, thus it was never returning to trap() to release Giant. Thus, release Giant before calling vm86_trap().
This commit is contained in:
parent
5dfa801a91
commit
05f9877c15
@ -467,6 +467,7 @@ trap(frame)
|
||||
/*
|
||||
* returns to original process
|
||||
*/
|
||||
mtx_exit(&Giant, MTX_DEF);
|
||||
vm86_trap((struct vm86frame *)&frame);
|
||||
goto out;
|
||||
}
|
||||
|
@ -467,6 +467,7 @@ trap(frame)
|
||||
/*
|
||||
* returns to original process
|
||||
*/
|
||||
mtx_exit(&Giant, MTX_DEF);
|
||||
vm86_trap((struct vm86frame *)&frame);
|
||||
goto out;
|
||||
}
|
||||
|
@ -467,6 +467,7 @@ trap(frame)
|
||||
/*
|
||||
* returns to original process
|
||||
*/
|
||||
mtx_exit(&Giant, MTX_DEF);
|
||||
vm86_trap((struct vm86frame *)&frame);
|
||||
goto out;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user