Subversion Repositories HelenOS

Rev

Rev 3127 | Rev 3425 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3127 Rev 3424
Line 322... Line 322...
322
    a->sh_info = NULL;
322
    a->sh_info = NULL;
323
    a->backend = backend;
323
    a->backend = backend;
324
    if (backend_data)
324
    if (backend_data)
325
        a->backend_data = *backend_data;
325
        a->backend_data = *backend_data;
326
    else
326
    else
327
        memsetb((uintptr_t) &a->backend_data, sizeof(a->backend_data),
327
        memsetb(&a->backend_data, sizeof(a->backend_data), 0);
328
            0);
-
 
329
 
328
 
330
    btree_create(&a->used_space);
329
    btree_create(&a->used_space);
331
   
330
   
332
    btree_insert(&as->as_area_btree, base, (void *) a, NULL);
331
    btree_insert(&as->as_area_btree, base, (void *) a, NULL);
333
 
332
 
Line 451... Line 450...
451
                     * address space area.
450
                     * address space area.
452
                     */
451
                     */
453
       
452
       
454
                    cond = false;   /* we are almost done */
453
                    cond = false;   /* we are almost done */
455
                    i = (start_free - b) >> PAGE_WIDTH;
454
                    i = (start_free - b) >> PAGE_WIDTH;
456
                    if (!used_space_remove(area, start_free,
455
                    if (!used_space_remove(area, start_free, c - i))
457
                        c - i))
-
 
458
                        panic("Could not remove used "
456
                        panic("Could not remove used space.\n");
459
                            "space.\n");
-
 
460
                } else {
457
                } else {
461
                    /*
458
                    /*
462
                     * The interval of used space can be
459
                     * The interval of used space can be
463
                     * completely removed.
460
                     * completely removed.
464
                     */
461
                     */
465
                    if (!used_space_remove(area, b, c))
462
                    if (!used_space_remove(area, b, c))
466
                        panic("Could not remove used "
463
                        panic("Could not remove used space.\n");
467
                            "space.\n");
-
 
468
                }
464
                }
469
           
465
           
470
                for (; i < c; i++) {
466
                for (; i < c; i++) {
471
                    pte_t *pte;
467
                    pte_t *pte;
472
           
468
           
Line 1726... Line 1722...
1726
                return 1;
1722
                return 1;
1727
            }
1723
            }
1728
        }
1724
        }
1729
    }
1725
    }
1730
 
1726
 
1731
    panic("Inconsistency detected while adding %d pages of used space at "
1727
    panic("Inconsistency detected while adding %" PRIc " pages of used space at "
1732
        "%p.\n", count, page);
1728
        "%p.\n", count, page);
1733
}
1729
}
1734
 
1730
 
1735
/** Mark portion of address space area as unused.
1731
/** Mark portion of address space area as unused.
1736
 *
1732
 *
Line 1905... Line 1901...
1905
            return 0;
1901
            return 0;
1906
        }
1902
        }
1907
    }
1903
    }
1908
 
1904
 
1909
error:
1905
error:
1910
    panic("Inconsistency detected while removing %d pages of used space "
1906
    panic("Inconsistency detected while removing %" PRIc " pages of used space "
1911
        "from %p.\n", count, page);
1907
        "from %p.\n", count, page);
1912
}
1908
}
1913
 
1909
 
1914
/** Remove reference to address space area share info.
1910
/** Remove reference to address space area share info.
1915
 *
1911
 *
Line 1998... Line 1994...
1998
        unsigned int i;
1994
        unsigned int i;
1999
        for (i = 0; i < node->keys; i++) {
1995
        for (i = 0; i < node->keys; i++) {
2000
            as_area_t *area = node->value[i];
1996
            as_area_t *area = node->value[i];
2001
       
1997
       
2002
            mutex_lock(&area->lock);
1998
            mutex_lock(&area->lock);
2003
            printf("as_area: %p, base=%p, pages=%d (%p - %p)\n",
1999
            printf("as_area: %p, base=%p, pages=%" PRIc " (%p - %p)\n",
2004
                area, area->base, area->pages, area->base,
2000
                area, area->base, area->pages, area->base,
2005
                area->base + area->pages*PAGE_SIZE);
2001
                area->base + FRAMES2SIZE(area->pages));
2006
            mutex_unlock(&area->lock);
2002
            mutex_unlock(&area->lock);
2007
        }
2003
        }
2008
    }
2004
    }
2009
   
2005
   
2010
    mutex_unlock(&as->lock);
2006
    mutex_unlock(&as->lock);