Move td_softdep_cleanup() from userret() to ast(); it's infrequent
at best. The schedule_cleanup() function already sets TDF_ASTPENDING.
Details
Diff Detail
- Repository
- rS FreeBSD src repository - subversion
- Lint
Lint Passed - Unit
No Test Coverage - Build Status
Buildable 33460 Build 30741: arc lint + arc unit
Event Timeline
sys/kern/subr_trap.c | ||
---|---|---|
198 | Leave the assert there. |
sys/kern/subr_trap.c | ||
---|---|---|
198 | Wouldn't it trip at the first possibility due to ast() being called from the syscall enter assembly code some time after userret() returns? |
sys/kern/subr_trap.c | ||
---|---|---|
198 | I do not understand what are you saying there. The assert can be triggered if userret() is executed before ast is handled, or if ast() 'forgot' to handle requested su cleanup. I do not believe that the first case is possible. Or rather, if userret() triggers that, there is a bug in your patch. |
sys/kern/subr_trap.c | ||
---|---|---|
198 | Erm, are you sure about it? My understanding is that (eg) amd64_syscall() calls syscallret(), syscallret() calls userret(), and then amd64_syscall() returns; ast() gets only called afterwards. |
sys/kern/subr_trap.c | ||
---|---|---|
198 | Yes you are right. I would say that this should be fixed, but actually your series of the patches makes it not matter at all. |
This change looks reasonable to me as at least for amd64 every path out of the kernel appears to check TDF_ASTPENDING and calls ast() if set.