Messages in this thread |  | | From | Michael Ellerman <> | Subject | Re: [PATCH 01/20] asm-generic/mmiowb: Add generic implementation of mmiowb() tracking | Date | Mon, 04 Mar 2019 12:01:08 +1100 |
| |
Nicholas Piggin <npiggin@gmail.com> writes: > Michael Ellerman's on March 3, 2019 7:26 pm: >> Nicholas Piggin <npiggin@gmail.com> writes: ... >>> what was broken about the powerpc one, which is basically: >>> >>> static inline void mmiowb_set_pending(void) >>> { >>> struct mmiowb_state *ms = __mmiowb_state(); >>> ms->mmiowb_pending = 1; >>> } >>> >>> static inline void mmiowb_spin_lock(void) >>> { >>> } >> >> The current powerpc code clears io_sync in spin_lock(). >> >> ie, it would be equivalent to: >> >> static inline void mmiowb_spin_lock(void) >> { >> ms->mmiowb_pending = 0; >> } > > Ah okay that's what I missed. How about we just not do that?
Yeah I thought of that too but it's not great. We'd start semi-randomly executing the sync in unlock depending on whether someone had done IO on that CPU prior to the spinlock.
eg.
writel(x, y); // sets paca->io_sync ...
<schedule>
spin_lock(a); ... // No IO in here ... spin_unlock(a); // sync() here because other task did writel().
Which wouldn't be *incorrect*, but would be kind of weird.
cheers
|  |