Flush caches on DMA memory.

* grub-core/kern/mips/cache.S (grub_arch_sync_dma_caches): New function.
	* grub-core/bus/pci.c (grub_memalign_dma32): Flush caches.
	(grub_dma_free): Likewise.
	* include/grub/cache.h (grub_arch_sync_dma_caches): New declaration.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2011-05-13 20:56:50 +02:00
parent 91bbcc0cb6
commit 19e1c41bbf
4 changed files with 64 additions and 1 deletions

View file

@ -20,6 +20,8 @@
#include <grub/dl.h>
#include <grub/pci.h>
#include <grub/mm.h>
#include <grub/mm_private.h>
#include <grub/cache.h>
GRUB_MOD_LICENSE ("GPLv3+");
@ -28,12 +30,19 @@ GRUB_MOD_LICENSE ("GPLv3+");
struct grub_pci_dma_chunk *
grub_memalign_dma32 (grub_size_t align, grub_size_t size)
{
return grub_memalign (align, size);
void *ret = grub_memalign (align, size);
if (!ret)
return 0;
grub_arch_sync_dma_caches (ret, size);
return ret;
}
/* FIXME: evil. */
void
grub_dma_free (struct grub_pci_dma_chunk *ch)
{
grub_size_t size = (((struct grub_mm_header *) ch) - 1)->size * GRUB_MM_ALIGN;
grub_arch_sync_dma_caches (ch, size);
grub_free (ch);
}
/* #endif */