On Tue, May 15, 2018 at 09:58:03PM -0700, Andy Lutomirski wrote: > > > > On May 15, 2018, at 8:11 PM, Frederic Weisbecker <frede...@kernel.org> > > wrote: > > > >> On Wed, May 09, 2018 at 11:17:03AM +0200, Peter Zijlstra wrote: > >>> On Sun, May 06, 2018 at 09:19:54PM +0200, Frederic Weisbecker wrote: > >>> arch/arm/include/asm/hw_breakpoint.h | 5 ++++- > >>> arch/arm/kernel/hw_breakpoint.c | 22 +++------------------- > >>> arch/arm64/include/asm/hw_breakpoint.h | 5 ++++- > >>> arch/arm64/kernel/hw_breakpoint.c | 22 +++------------------- > >>> arch/powerpc/include/asm/hw_breakpoint.h | 5 ++++- > >>> arch/powerpc/kernel/hw_breakpoint.c | 22 +++------------------- > >>> arch/sh/include/asm/hw_breakpoint.h | 5 ++++- > >>> arch/sh/kernel/hw_breakpoint.c | 22 +++------------------- > >>> arch/x86/include/asm/hw_breakpoint.h | 5 ++++- > >>> arch/x86/kernel/hw_breakpoint.c | 23 +++-------------------- > >>> arch/xtensa/include/asm/hw_breakpoint.h | 5 ++++- > >>> arch/xtensa/kernel/hw_breakpoint.c | 22 +++------------------- > >> > >> Because of those ^, > >> > >>> kernel/events/hw_breakpoint.c | 11 ++++++----- > >> > >> would it not make sense to have a prelimenary patch doing something > >> like: > >> > >> __weak int hw_breakpoint_arch_check(struct perf_event *bp) > >> { > >> return arch_validate_hwbkpt_settings(bp); > >> } > > > > So eventually I fear I can't do that, due to linking order. > > > > Say I convert x86 to implement hw_breakpoint_arch_check(), so I > > remove arch_validate_hwbkpt_settings(). On build time, the weak version > > is still compiled and can't find a declaration for > > arch_validate_hwbkpt_settings(). > > > > I tried to keep the declaration while the definition has been removed but > > it seems the weak version is linked first before it gets later replaced by > > the overriden arch version. So I get a build error. > > > > I could keep arch_validate_hwbkpt_settings() around on all archs and remove > > it in > > the end with the weak version but that would defeat the purpose of removing > > the mid-state in the current patch. > > How about just not using weak functions? Weak functions have annoying issues > like this, and they have trouble generating good code. I much prefer the > pattern: > > in arch header: > extern void arch_func(whatever); > #define arch_func arch_func > > in generic header: > #ifndef arch_func > static inline void arch_func(whatever) ... > #endif
Thanks, that works well!