On 02.06.2017 18:22, David Hildenbrand wrote: > >>>> +static uint8_t pagebuf[PAGE_SIZE * 2] __attribute__((aligned(PAGE_SIZE))); >>>> + >>>> +/* Enable or disable low-address protection */ >>>> +static void set_low_prot(bool enable) >>>> +{ >>>> + uint64_t cr0; >>>> + >>>> + asm volatile (" stctg 0,0,%0 " : : "Q"(cr0)); >>> >>> Use %c0 instead? >> >> It's got to be %%c0 ... not sure whether this looks really nicer here? > > %c0 should work, e.g. do a "git grep "%c0" in linux.git > > arch/s390/kernel/base.S: lctlg %c0,%c0,0(%r4) Well, that's a .S file ... for inline assembly in .c files, you need two percentage characters. >>>> +/* Test the TEST BLOCK instruction */ >>>> +static void test_testblock(void) >>>> +{ >>>> + int cc; >>>> + >>>> + memset(pagebuf, 0xaa, PAGE_SIZE); >>>> + >>>> + asm volatile ( >>>> + " lghi 0,0\n" >>> >>> %0,0 ? >> >> That's certainly wrong, since %0 is the reference to the first output >> parameter (cc). You likely mean %%0 or %%r0 ... and that looks rather >> cumbersome, too. I think I prefer the plain "0" here, what do you think? > > Sorry, of course I meant %r0. My keyboard ate one character ;) > > (again, only one % is required, see e.g. arch/s390/kernel/entry.S) Dito, also %% required here, since we're not in a .S file. Thomas