On Tue, 16 Mar 2021 09:16:52 +0000 Janosch Frank <frankja@xxxxxxxxxxxxx> wrote: > Testing for facility only means the UV Call facility is available. > The UV will only indicate the share/unshare calls for a protected > guest 2, so let's also check that. > > Signed-off-by: Janosch Frank <frankja@xxxxxxxxxxxxx> Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > --- > lib/s390x/malloc_io.c | 5 +++-- > s390x/uv-guest.c | 6 ++++++ > 2 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/lib/s390x/malloc_io.c b/lib/s390x/malloc_io.c > index 1dcf1691..78582eac 100644 > --- a/lib/s390x/malloc_io.c > +++ b/lib/s390x/malloc_io.c > @@ -19,6 +19,7 @@ > #include <alloc_page.h> > #include <asm/facility.h> > #include <bitops.h> > +#include <uv.h> > > static int share_pages(void *p, int count) > { > @@ -47,7 +48,7 @@ void *alloc_io_mem(int size, int flags) > assert(size); > > p = alloc_pages_flags(order, AREA_DMA31 | flags); > - if (!p || !test_facility(158)) > + if (!p || !uv_os_is_guest()) > return p; > > n = share_pages(p, 1 << order); > @@ -65,7 +66,7 @@ void free_io_mem(void *p, int size) > > assert(IS_ALIGNED((uintptr_t)p, PAGE_SIZE)); > > - if (test_facility(158)) > + if (uv_os_is_guest()) > unshare_pages(p, 1 << order); > free_pages(p); > } > diff --git a/s390x/uv-guest.c b/s390x/uv-guest.c > index 95a968c5..8915b2f1 100644 > --- a/s390x/uv-guest.c > +++ b/s390x/uv-guest.c > @@ -16,6 +16,7 @@ > #include <asm/facility.h> > #include <asm/uv.h> > #include <sclp.h> > +#include <uv.h> > > static unsigned long page; > > @@ -141,6 +142,11 @@ int main(void) > goto done; > } > > + if (!uv_os_is_guest()) { > + report_skip("Not a protected guest"); > + goto done; > + } > + > page = (unsigned long)alloc_page(); > test_priv(); > test_invalid();