tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
ci_want_resched bits vs. MD ci_data.cpu_softints bits
Hey folks,
while staring at PR 55415 and recently having learned that powerpc fast
softints are broken, I found a strange ancient line of code that I think
is not correct in the current world order any more:
Index: kern_synch.c
===================================================================
RCS file: /cvsroot/src/sys/kern/kern_synch.c,v
retrieving revision 1.351
diff -u -p -r1.351 kern_synch.c
--- kern_synch.c 29 Jun 2022 22:27:01 -0000 1.351
+++ kern_synch.c 7 Jul 2022 19:16:13 -0000
@@ -553,7 +553,8 @@ nextlwp(struct cpu_info *ci, struct sche
* the update to ci_want_resched will become globally visible before
* the release of spc_mutex becomes globally visible.
*/
- ci->ci_want_resched = ci->ci_data.cpu_softints;
+ if (ci->ci_data.cpu_softints == 0)
+ ci->ci_want_resched = 0;
return newl;
}
I guess in older times ci->ci_want_resched was used as a boolean flag, so only
0 or !0 did matter - but nowadays it is a flag word of various bits:
#define RESCHED_REMOTE 0x01 /* request is for a remote CPU */
#define RESCHED_IDLE 0x02 /* idle LWP observed */
#define RESCHED_UPREEMPT 0x04 /* immediate user ctx switch */
#define RESCHED_KPREEMPT 0x08 /* immediate kernel ctx switch */
The MD usage of ci_data.cpu_softints on powerpc is a bitmask of pending
softint IPLs, which could easily collide with above flags.
I don't know if this has any bad consequences, but it seems cleaner
to avoid the possibility and either clear or leave alone.
Or am I overlooking some magic?
Martin
Home |
Main Index |
Thread Index |
Old Index