Messages in this thread | | | Date | Fri, 22 Nov 2019 00:34:03 +0000 | From | Russell King - ARM Linux admin <> | Subject | Re: [PATCH 1/3] arm/arm64/xen: use C inlines for privcmd_call |
| |
On Thu, Nov 21, 2019 at 07:30:41PM -0500, Pavel Tatashin wrote: > > > +#ifdef CONFIG_CPU_SW_DOMAIN_PAN > > > +static __always_inline void uaccess_enable(void) > > > +{ > > > + unsigned long val = DACR_UACCESS_ENABLE; > > > + > > > + asm volatile("mcr p15, 0, %0, c3, c0, 0" : : "r" (val)); > > > + isb(); > > > +} > > > + > > > +static __always_inline void uaccess_disable(void) > > > +{ > > > + unsigned long val = DACR_UACCESS_ENABLE; > > Oops, should be DACR_UACCESS_DISABLE. > > > > + > > > + asm volatile("mcr p15, 0, %0, c3, c0, 0" : : "r" (val)); > > > + isb(); > > > +} > > > > Rather than inventing these, why not use uaccess_save_and_enable().. > > uaccess_restore() around the Xen call? > > Thank you for suggestion: uaccess_enable() and uaccess_disable() are > common calls with arm64, so I will need them, but I think I can use > set_domain() with DACR_UACCESS_DISABLE /DACR_UACCESS_ENABLE inside > these inlines.
That may be, but be very careful that you only use them in ARMv7-only code. Using them elsewhere is unsafe as the domain register is used for other purposes, and merely blatting over it (as your uaccess_enable and uaccess_disable functions do) is unsafe.
-- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up
| |