Exemple #1
0
// this has its parallell in exe$alonpagvar
int exe$allocate_pool(int requestsize, int pooltype, int alignment, unsigned int * allocatedsize, void ** returnblock)
{
    int reqsize=requestsize;
    unsigned int * alosize_p=allocatedsize;
    void ** pool_p=returnblock;
    int sts=SS$_NORMAL;

    // extra from alononpaged
    if (reqsize&63)
        reqsize=((reqsize>>6)+1)<<6; // mm book said something about align 64

    *alosize_p=reqsize;

    struct _npool_data * pooldata = exe$gs_bap_npool;
    struct _lsthds * lsthd = pooldata->npool$ar_lsthds;
    struct _myhead * array = &lsthd->lsthds$q_listheads;

    if (reqsize<=8192)
    {
        *pool_p = exe$lal_remove_first(&array[reqsize>>6]);
        if (*pool_p)
        {
            check_packet(*pool_p,reqsize,0);
#if 0
            poison_packet(*pool_p,reqsize,0);
#endif
        }
    }
Exemple #2
0
int exe_std$alononpaged (int reqsize, int *alosize_p, void **pool_p)
{
    int sts=SS$_NORMAL;
#if 0
    if (reqsize<=srpsize)
    {
        if (rqempty(&ioc$gq_srpiq))
            goto var;
        int addr=remqti(&ioc$gq_srpiq,addr);
        *alosize_p=reqsize;
        *pool_p=addr;
        return sts;
    }
    if (reqsize<=irpsize)
    {
        if (rqempty(&ioc$gq_irpiq))
            goto var;
        int addr=remqti(&ioc$gq_irpiq,addr);
        *alosize_p=reqsize;
        *pool_p=addr;
        return sts;
    }
    if (reqsize >= lrpmin && reqsize<=srpsize)
    {
        if (rqempty(&ioc$gq_lrpiq))
            goto var;
        int addr=remqti(&ioc$gq_srpiq,addr);
        *alosize_p=reqsize;
        *pool_p=addr;
        return sts;
    }
#endif
    if (reqsize&63)
        reqsize=((reqsize>>6)+1)<<6; // mm book said something about align 64

    *alosize_p=reqsize;

    struct _npool_data * pooldata = exe$gs_npp_npool;
    struct _lsthds * lsthd = pooldata->npool$ar_lsthds;
    struct _myhead * array = &lsthd->lsthds$q_listheads;

    if (reqsize<=8192)
    {
        *pool_p = exe$lal_remove_first(&array[reqsize>>6]);
        if (*pool_p)
        {
            check_packet(*pool_p,reqsize,0);
#if 0
            poison_packet(*pool_p,reqsize,0);
#endif
        }
    }
Exemple #3
0
void __init init_nonpaged_pool(void * pgdat, int size, struct _npool_data * pool, void ** start , void ** free)
{
    struct mymap * mytmp;

    *start=alloc_bootmem_node(pgdat,size);
    *start= (struct page *)(PAGE_OFFSET +
                            MAP_ALIGN((unsigned long)(*start) - PAGE_OFFSET));
    *free= *start;
    struct _lsthds * l = pool->npool$ar_lsthds;
    l->lsthds$l_variablelist_unused=*free;
    mytmp=*start;
    mytmp->flink=0; /* ? */
    mytmp->size=size;
    poison_packet(mytmp,size,1);
}