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

[tyndur-devel] [PATCH 01/22] cdi/pci: Ausrichtung von BARs an Pageframes



! BARs müssen nicht immer an 4k (oder was auch immer die Pageframegröße
  ist) ausgerichtet sein. Wenn sie das nicht sind, sollte die
  CDI-Bibliothek entsprechend handeln.

Signed-off-by: Max Reitz <max@xxxxxxxxxx>
---
 src/modules/cdi/lib/pci.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/modules/cdi/lib/pci.c b/src/modules/cdi/lib/pci.c
index 1df92dd..0dd07f8 100644
--- a/src/modules/cdi/lib/pci.c
+++ b/src/modules/cdi/lib/pci.c
@@ -16,6 +16,7 @@
 #include <services.h>
 
 #include <init.h>
+#include <page.h>
 #include <rpc.h>
 #include <pci.h>
 #include <dir.h>
@@ -191,7 +192,10 @@ void cdi_pci_alloc_memory(struct cdi_pci_device* device)
 
     for (i = 0; (res = cdi_list_get(device->resources, i)); i++) {
         if (res->type == CDI_PCI_MEMORY) {
-            res->address = mem_allocate_physical(res->length, res->start, 0);
+            uintptr_t offset = res->start % PAGE_SIZE;
+            void* mapping = mem_allocate_physical(res->length + offset,
+                                                  res->start - offset, 0);
+            res->address = (void*) ((uintptr_t)mapping + offset);
         }
     }
 }
-- 
2.6.3