Skip to content

Commit

Permalink
convert xen platform to use the bmk_pgalloc() interface
Browse files Browse the repository at this point in the history
  • Loading branch information
anttikantee committed Jun 19, 2015
1 parent 43ac194 commit 26c05b0
Show file tree
Hide file tree
Showing 10 changed files with 39 additions and 34 deletions.
17 changes: 9 additions & 8 deletions platform/xen/xen/arch/x86/mm.c
Expand Up @@ -41,6 +41,7 @@
#include <mini-os/lib.h>
#include <xen/memory.h>

#include <bmk-core/pgalloc.h>
#include <bmk-core/string.h>

#ifdef MM_DEBUG
Expand Down Expand Up @@ -460,7 +461,7 @@ pgentry_t *need_pgt(unsigned long va)
offset = l4_table_offset(va);
if ( !(tab[offset] & _PAGE_PRESENT) )
{
pt_pfn = virt_to_pfn(minios_alloc_page());
pt_pfn = virt_to_pfn(bmk_pgalloc_one());
new_pt_frame(&pt_pfn, pt_mfn, offset, L3_FRAME);
}
ASSERT(tab[offset] & _PAGE_PRESENT);
Expand All @@ -470,7 +471,7 @@ pgentry_t *need_pgt(unsigned long va)
offset = l3_table_offset(va);
if ( !(tab[offset] & _PAGE_PRESENT) )
{
pt_pfn = virt_to_pfn(minios_alloc_page());
pt_pfn = virt_to_pfn(bmk_pgalloc_one());
new_pt_frame(&pt_pfn, pt_mfn, offset, L2_FRAME);
}
ASSERT(tab[offset] & _PAGE_PRESENT);
Expand All @@ -479,7 +480,7 @@ pgentry_t *need_pgt(unsigned long va)
offset = l2_table_offset(va);
if ( !(tab[offset] & _PAGE_PRESENT) )
{
pt_pfn = virt_to_pfn(minios_alloc_page());
pt_pfn = virt_to_pfn(bmk_pgalloc_one());
new_pt_frame(&pt_pfn, pt_mfn, offset, L1_FRAME);
}
ASSERT(tab[offset] & _PAGE_PRESENT);
Expand Down Expand Up @@ -734,7 +735,7 @@ unsigned long minios_alloc_contig_pages(int order, unsigned int addr_bits)
}

/* Allocate some potentially discontiguous pages */
in_va = minios_alloc_pages(order);
in_va = bmk_pgalloc(order);
if ( !in_va )
{
minios_printk("alloc_contig_pages: could not get enough pages (order=0x%x\n",
Expand Down Expand Up @@ -822,7 +823,7 @@ unsigned long minios_alloc_contig_pages(int order, unsigned int addr_bits)
if ( !exch_success )
{
/* since the exchanged failed we just free the pages as well */
minios_free_pages((void *) in_va, order);
bmk_pgfree((void *) in_va, order);
return 0;
}

Expand Down Expand Up @@ -877,12 +878,12 @@ void arch_init_p2m(unsigned long max_pfn)
unsigned long *l1_list = NULL, *l2_list = NULL, *l3_list;
unsigned long pfn;

l3_list = (unsigned long *)minios_alloc_page();
l3_list = (unsigned long *)bmk_pgalloc_one();
for ( pfn=0; pfn<max_pfn; pfn++ )
{
if ( !(pfn % (L1_P2M_ENTRIES * L2_P2M_ENTRIES)) )
{
l2_list = (unsigned long*)minios_alloc_page();
l2_list = (unsigned long*)bmk_pgalloc_one();
if ( (pfn >> L3_P2M_SHIFT) > 0 )
{
minios_printk("Error: Too many pfns.\n");
Expand All @@ -892,7 +893,7 @@ void arch_init_p2m(unsigned long max_pfn)
}
if ( !(pfn % (L1_P2M_ENTRIES)) )
{
l1_list = (unsigned long*)minios_alloc_page();
l1_list = (unsigned long*)bmk_pgalloc_one();
l2_list[(pfn >> L1_P2M_SHIFT) & L2_P2M_MASK] =
virt_to_mfn(l1_list);
}
Expand Down
3 changes: 2 additions & 1 deletion platform/xen/xen/arch/x86/traps.c
Expand Up @@ -6,6 +6,7 @@

#include <mini-os/machine/traps.h>

#include <bmk-core/pgalloc.h>
#include <bmk-core/string.h>

/*
Expand Down Expand Up @@ -146,7 +147,7 @@ static int handle_cow(unsigned long addr) {
if (PHYS_PFN(page) != _minios_mfn_zero)
return 0;

new_page = minios_alloc_pages(0);
new_page = bmk_pgalloc_one();
bmk_memset((void*) new_page, 0, PAGE_SIZE);

rc = HYPERVISOR_update_va_mapping(addr & PAGE_MASK, __pte(virt_to_mach(new_page) | L1_PROT), UVMF_INVLPG);
Expand Down
5 changes: 3 additions & 2 deletions platform/xen/xen/blkfront.c
Expand Up @@ -14,6 +14,7 @@

#include <bmk-core/errno.h>
#include <bmk-core/memalloc.h>
#include <bmk-core/pgalloc.h>
#include <bmk-core/printf.h>
#include <bmk-core/string.h>

Expand Down Expand Up @@ -63,7 +64,7 @@ static void free_blkfront(struct blkfront_dev *dev)
bmk_memfree(dev->backend, BMK_MEMWHO_WIREDBMK);

gnttab_end_access(dev->ring_ref);
minios_free_page(dev->ring.sring);
bmk_pgfree_one(dev->ring.sring);

minios_unbind_evtchn(dev->evtchn);

Expand Down Expand Up @@ -93,7 +94,7 @@ struct blkfront_dev *blkfront_init(char *_nodename, struct blkfront_info *info)
dev->dom = xenbus_read_integer(path);
minios_evtchn_alloc_unbound(dev->dom, blkfront_handler, dev, &dev->evtchn);

s = (struct blkif_sring*) minios_alloc_page();
s = (struct blkif_sring*) bmk_pgalloc_one();
bmk_memset(s,0,PAGE_SIZE);


Expand Down
5 changes: 3 additions & 2 deletions platform/xen/xen/console/xenbus.c
Expand Up @@ -14,6 +14,7 @@
#include "console.h"

#include <bmk-core/memalloc.h>
#include <bmk-core/pgalloc.h>
#include <bmk-core/printf.h>
#include <bmk-core/string.h>

Expand Down Expand Up @@ -54,7 +55,7 @@ void free_consfront(struct consfront_dev *dev)

gnttab_end_access(dev->ring_ref);

minios_free_page(dev->ring);
bmk_pgfree_one(dev->ring);
bmk_memfree(dev, BMK_MEMWHO_WIREDBMK);
}

Expand Down Expand Up @@ -88,7 +89,7 @@ struct consfront_dev *init_consfront(char *_nodename)
dev->dom = res;
minios_evtchn_alloc_unbound(dev->dom, console_handle_input, dev, &dev->evtchn);

dev->ring = (struct xencons_interface *) minios_alloc_page();
dev->ring = (struct xencons_interface *) bmk_pgalloc_one();
bmk_memset(dev->ring, 0, PAGE_SIZE);
dev->ring_ref = gnttab_grant_access(dev->dom, virt_to_mfn(dev->ring), 0);

Expand Down
3 changes: 2 additions & 1 deletion platform/xen/xen/gnttab.c
Expand Up @@ -20,6 +20,7 @@
#include <mini-os/gnttab.h>
#include <mini-os/semaphore.h>

#include <bmk-core/pgalloc.h>
#include <bmk-core/string.h>

#define NR_RESERVED_ENTRIES 8
Expand Down Expand Up @@ -153,7 +154,7 @@ gnttab_alloc_and_grant(void **map)
unsigned long mfn;
grant_ref_t gref;

*map = (void *)minios_alloc_page();
*map = (void *)bmk_pgalloc_one();
mfn = virt_to_mfn(*map);
gref = gnttab_grant_access(0, mfn, 0);
return gref;
Expand Down
4 changes: 0 additions & 4 deletions platform/xen/xen/include/mini-os/mm.h
Expand Up @@ -43,10 +43,6 @@


void init_mm(void);
unsigned long minios_alloc_pages(int order);
#define minios_alloc_page() minios_alloc_pages(0)
void minios_free_pages(void *pointer, int order);
#define minios_free_page(p) minios_free_pages(p, 0)

static __inline__ int get_order(unsigned long size)
{
Expand Down
5 changes: 3 additions & 2 deletions platform/xen/xen/kernel.c
Expand Up @@ -44,6 +44,7 @@
#include <xen/version.h>

#include <bmk-core/core.h>
#include <bmk-core/pgalloc.h>
#include <bmk-core/printf.h>

uint8_t _minios_xen_features[XENFEAT_NR_SUBMAPS * 32];
Expand Down Expand Up @@ -90,14 +91,14 @@ void *
bmk_platform_allocpg2(int shift)
{

return (void *)minios_alloc_pages(shift);
return (void *)bmk_pgalloc(shift);
}

void
bmk_platform_freepg2(void *p, int shift)
{

minios_free_pages(p, shift);
bmk_pgfree(p, shift);
}

void
Expand Down
9 changes: 5 additions & 4 deletions platform/xen/xen/mm.c
Expand Up @@ -42,6 +42,7 @@
#include <mini-os/lib.h>

#include <bmk-core/platform.h>
#include <bmk-core/pgalloc.h>
#include <bmk-core/string.h>

#ifdef MM_DEBUG
Expand Down Expand Up @@ -199,7 +200,7 @@ USED static void print_chunks(void *start, int nr_pages)
* Initialise allocator, placing addresses [@min,@max] in free pool.
* @min and @max are PHYSICAL addresses.
*/
static void init_page_allocator(unsigned long min, unsigned long max)
void bmk_pgalloc_loadmem(unsigned long min, unsigned long max)
{
int i;
unsigned long range, bitmap_size;
Expand Down Expand Up @@ -257,7 +258,7 @@ static void init_page_allocator(unsigned long min, unsigned long max)


/* Allocate 2^@order contiguous pages. Returns a VIRTUAL address. */
unsigned long minios_alloc_pages(int order)
unsigned long bmk_pgalloc(int order)
{
int i;
chunk_head_t *alloc_ch, *spare_ch;
Expand Down Expand Up @@ -307,7 +308,7 @@ unsigned long minios_alloc_pages(int order)
return 0;
}

void minios_free_pages(void *pointer, int order)
void bmk_pgfree(void *pointer, int order)
{
chunk_head_t *freed_ch, *to_merge_ch;
chunk_tail_t *freed_ct;
Expand Down Expand Up @@ -394,7 +395,7 @@ void init_mm(void)
minios_printk("MM: Initialise page allocator for %lx(%lx)-%lx(%lx)\n",
(u_long)to_virt(PFN_PHYS(start_pfn)), PFN_PHYS(start_pfn),
(u_long)to_virt(PFN_PHYS(max_pfn)), PFN_PHYS(max_pfn));
init_page_allocator(PFN_PHYS(start_pfn), PFN_PHYS(max_pfn));
bmk_pgalloc_loadmem(PFN_PHYS(start_pfn), PFN_PHYS(max_pfn));
minios_printk("MM: done\n");
memsize = PFN_PHYS(max_pfn) - PFN_PHYS(start_pfn);

Expand Down
17 changes: 9 additions & 8 deletions platform/xen/xen/netfront.c
Expand Up @@ -16,6 +16,7 @@
#include <mini-os/semaphore.h>

#include <bmk-core/memalloc.h>
#include <bmk-core/pgalloc.h>
#include <bmk-core/printf.h>
#include <bmk-core/string.h>

Expand Down Expand Up @@ -221,19 +222,19 @@ static void free_netfront(struct netfront_dev *dev)
gnttab_end_access(dev->rx_ring_ref);
gnttab_end_access(dev->tx_ring_ref);

minios_free_page(dev->rx.sring);
minios_free_page(dev->tx.sring);
bmk_pgfree_one(dev->rx.sring);
bmk_pgfree_one(dev->tx.sring);

minios_unbind_evtchn(dev->evtchn);

for(i=0;i<NET_RX_RING_SIZE;i++) {
gnttab_end_access(dev->rx_buffers[i].gref);
minios_free_page(dev->rx_buffers[i].page);
bmk_pgfree_one(dev->rx_buffers[i].page);
}

for(i=0;i<NET_TX_RING_SIZE;i++)
if (dev->tx_buffers[i].page)
minios_free_page(dev->tx_buffers[i].page);
bmk_pgfree_one(dev->tx_buffers[i].page);

bmk_memfree(dev, BMK_MEMWHO_WIREDBMK);
}
Expand Down Expand Up @@ -274,15 +275,15 @@ struct netfront_dev *netfront_init(char *_nodename, void (*thenetif_rx)(struct n
for(i=0;i<NET_RX_RING_SIZE;i++)
{
/* TODO: that's a lot of memory */
dev->rx_buffers[i].page = (char*)minios_alloc_page();
dev->rx_buffers[i].page = (char*)bmk_pgalloc_one();
}

bmk_snprintf(path, sizeof(path), "%s/backend-id", dev->nodename);
dev->dom = xenbus_read_integer(path);
minios_evtchn_alloc_unbound(dev->dom, netfront_handler, dev, &dev->evtchn);

txs = (struct netif_tx_sring *) minios_alloc_page();
rxs = (struct netif_rx_sring *) minios_alloc_page();
txs = (struct netif_tx_sring *) bmk_pgalloc_one();
rxs = (struct netif_rx_sring *) bmk_pgalloc_one();
bmk_memset(txs,0,PAGE_SIZE);
bmk_memset(rxs,0,PAGE_SIZE);

Expand Down Expand Up @@ -541,7 +542,7 @@ void netfront_xmit(struct netfront_dev *dev, unsigned char* data,int len)
buf = &dev->tx_buffers[id];
page = buf->page;
if (!page)
page = buf->page = (char*) minios_alloc_page();
page = buf->page = (char*) bmk_pgalloc_one();

i = dev->tx.req_prod_pvt;
tx = RING_GET_REQUEST(&dev->tx, i);
Expand Down
5 changes: 3 additions & 2 deletions platform/xen/xen/pcifront.c
Expand Up @@ -12,6 +12,7 @@

#include <bmk-core/errno.h>
#include <bmk-core/memalloc.h>
#include <bmk-core/pgalloc.h>
#include <bmk-core/printf.h>
#include <bmk-core/string.h>

Expand Down Expand Up @@ -46,7 +47,7 @@ static void free_pcifront(struct pcifront_dev *dev)
minios_mask_evtchn(dev->evtchn);

gnttab_end_access(dev->info_ref);
minios_free_page(dev->info);
bmk_pgfree_one(dev->info);

minios_unbind_evtchn(dev->evtchn);

Expand Down Expand Up @@ -167,7 +168,7 @@ struct pcifront_dev *init_pcifront(char *_nodename)

minios_evtchn_alloc_unbound(dev->dom, pcifront_handler, dev, &dev->evtchn);

dev->info = (struct xen_pci_sharedinfo*) minios_alloc_page();
dev->info = (struct xen_pci_sharedinfo*) bmk_pgalloc_one();
bmk_memset(dev->info,0,PAGE_SIZE);

dev->info_ref = gnttab_grant_access(dev->dom,virt_to_mfn(dev->info),0);
Expand Down

0 comments on commit 26c05b0

Please sign in to comment.