Hi Boris,

On 8/28/17 5:51 AM, Borislav Petkov wrote:

[..]

> +static int __init early_set_memory_enc_dec(resource_size_t paddr,
>> +                                       unsigned long size, bool enc)
>> +{
>> +    unsigned long vaddr, vaddr_end, vaddr_next;
>> +    unsigned long psize, pmask;
>> +    int split_page_size_mask;
>> +    pte_t *kpte;
>> +    int level;
>> +
>> +    vaddr = (unsigned long)__va(paddr);
>> +    vaddr_next = vaddr;
>> +    vaddr_end = vaddr + size;
>> +
>> +    /*
>> +     * We are going to change the physical page attribute from C=1 to C=0
>> +     * or vice versa. Flush the caches to ensure that data is written into
>> +     * memory with correct C-bit before we change attribute.
>> +     */
>> +    clflush_cache_range(__va(paddr), size);
>> +
>> +    for (; vaddr < vaddr_end; vaddr = vaddr_next) {
>> +            kpte = lookup_address(vaddr, &level);
>> +            if (!kpte || pte_none(*kpte))
>> +                    return 1;
> Return before flushing TLBs? Perhaps you mean
>
>                       ret = 1;
>                       goto out;
>
> here and out does
>
>       __flush_tlb_all();
>       return ret;

thanks, good catch. I will fix in next rev.

-Brijesh

Reply via email to