[PATCH 6/7] arm64/kexec: Add core kexec support

Vivek Goyal
2014-10-01T14:56:02Z

On Tue, Sep 30, 2014 at 12:54:37PM -0700, Geoff Levand wrote:

[..]
> > > +{
> > > + switch (flag) {
> > > + case IND_INDIRECTION:
> > > + case IND_SOURCE:
> > > + __flush_dcache_area(addr, PAGE_SIZE);
> > > + break;
> >
> > So what does __flush_dcache_area() do? Flush data caches. IIUC, addr
> > is virtual address at this point of time. While copying pages and
> > walking through the list, I am assuming you have switched off page
> > tables and you are in some kind of 1:1 physical mode. So how did
> > flushing data caches related to a virtual address help. I guess we
> > are not even accessing that virtual address now.
>
> __flush_dcache_area(), and the underling aarch64 civac instruction
> operate on virtual addresses. Here we are still running with the
> MMU on and the identity mapping has not yet been enabled. This is
> the sequence:
>
> flush dcache -> turn off MMU, dcache -> access memory (PoC) directly

Sorry, I don't understand that why do we need to flush dcache for source
and indirection page addresses. Some information here will help.

Thanks
Vivek