Re: Kexec, DMA, and SMP

Eric W. Biederman
2003-02-12T14:42:22Z

Corey Minyard <cminyard@mvista.com> writes:

> Eric W. Biederman wrote:
>
> |Corey Minyard <cminyard@mvista.com> writes:
> |
> |>
> |>You don't understand. You don't *want* to set aside a block of memory that's
> |>reserved for DMA. You want to be able to DMA directly into any user address.
> |>Consider demand paging. The performance would suck if you DMA into some
> |>fixed region then copied to the user address. Plus you then have another
> |>resource you have to manage in the kernel. And you still have to change all
> |>the drivers, buffer management, etc. to add a flag that says "I'm going to use
>
> |>this for DMA" to allocations. You might as well add the quiesce function,
> it's
>
> |>probably easier to do. And it doesn't help if you DMA to static memory
> |>addresses.
> |>
> |>I, too, would like a simpler solution. I just don't think this is it.
> |
> |
> |You have it backwards. It is not about reserving a block of memory
> |for DMA. It is about reserving a block of memory to not do DMA in.
> |Something like 4MB or so. |
> |The idea is not to let the original kernel touch the reserved block at all.
> |We just put the kernel that kexec will start in that block of memory.
> |
> |Eric
> |
> Ah, it makes much more sense now. Thank you. I still don't think it's as easy
> as you think, though.
> Because there's no designation on most memory allocations to give you this
> information. There's
> GFP_DMA, but according to the docs that's just for x86 ISA DMA devices. You
> would
> have to hunt down all the memory allocations, figure out of they are DMA targets
>
> or not, and add a
> flag for that. I still say it's easier to just add the function to the drivers.

It is trivial if you don't let alloc_pages give the memory to anyone for
any purpose.

Eric