qemu-s390x
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [qemu-s390x] [Qemu-devel] [PATCH v3 27/32] s390x/tcg: Provide probe_


From: Cornelia Huck
Subject: Re: [qemu-s390x] [Qemu-devel] [PATCH v3 27/32] s390x/tcg: Provide probe_write_access helper
Date: Thu, 7 Mar 2019 15:40:07 +0100

On Thu, 7 Mar 2019 15:34:27 +0100
David Hildenbrand <address@hidden> wrote:

> On 07.03.19 15:10, Richard Henderson wrote:
> > On 3/7/19 4:15 AM, David Hildenbrand wrote:  
> >> +void probe_write_access(CPUS390XState *env, uint64_t addr, uint64_t len,
> >> +                        uintptr_t ra)
> >> +{
> >> +#ifdef CONFIG_USER_ONLY
> >> +    if (!h2g_valid(addr) || !h2g_valid(addr + len - 1)) {
> >> +        s390_program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO, ra);
> >> +    }  
> > 
> > You need
> > 
> >   || page_check_range(addr, len, PAGE_WRITE) < 0
> > 
> > as well.  
> 
> Indeed, thanks.
> 
> So it should be
> 
> 
> +void probe_write_access(CPUS390XState *env, uint64_t addr, uint64_t len,
> +                        uintptr_t ra)
> +{
> +#ifdef CONFIG_USER_ONLY
> +    if (!h2g_valid(addr) || !h2g_valid(addr + len - 1) ||
> +        page_check_range(addr, len, PAGE_WRITE) < 0) {
> +        s390_program_interrupt(env, PGM_ADDRESSING, ILEN_AUTO, ra);
> +    }
> +#else
> +    /* test the actual access, not just any access to the page due to LAP */
> +    while (len) {
> +        const uint64_t pagelen = -(addr | -TARGET_PAGE_MASK);
> +        const uint64_t curlen = MIN(pagelen, len);
> +
> +        probe_write(env, addr, curlen, cpu_mmu_index(env, false), ra);
> +        addr = wrap_address(env, addr + curlen);
> +        len -= curlen;
> +    }
> +#endif
> +}
> 
> Conny, I can resend if you don't feel like fixing up (or there is more to do).
> 

If that's the only thing, I can easily fold it in.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]