Module Name: src Committed By: bouyer Date: Mon Apr 11 14:15:30 UTC 2016
Modified Files: src/sys/arch/amd64/include: profile.h Log Message: x86_lfence() calls mcount(), so inline lfence instructions in mcount helper functions To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/arch/amd64/include/profile.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/amd64/include/profile.h diff -u src/sys/arch/amd64/include/profile.h:1.17 src/sys/arch/amd64/include/profile.h:1.18 --- src/sys/arch/amd64/include/profile.h:1.17 Sun Jan 10 09:04:32 2016 +++ src/sys/arch/amd64/include/profile.h Mon Apr 11 14:15:30 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: profile.h,v 1.17 2016/01/10 09:04:32 ryo Exp $ */ +/* $NetBSD: profile.h,v 1.18 2016/04/11 14:15:30 bouyer Exp $ */ /* * Copyright (c) 1992, 1993 @@ -83,8 +83,9 @@ __asm(" .globl __mcount \n" \ static inline void mcount_disable_intr(void) { - /* works because __cli is a macro */ - __cli(); + /* should be __cli() but this calls x86_lfence() which calls mcount */ + curcpu()->ci_vcpu->evtchn_upcall_mask = 1; + __asm volatile("lfence" ::: "memory"); /* x86_lfence() */ } static inline u_long @@ -97,7 +98,8 @@ static inline void mcount_write_psl(u_long psl) { curcpu()->ci_vcpu->evtchn_upcall_mask = psl; - x86_lfence(); + /* can't call x86_lfence because it calls mcount() */ + __asm volatile("lfence" ::: "memory"); /* x86_lfence() */ /* XXX can't call hypervisor_force_callback() because we're in mcount*/ }