首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >参数(KM_USER1)的kmap_atomic()

参数(KM_USER1)的kmap_atomic()
EN

Stack Overflow用户
提问于 2016-05-02 15:05:43
回答 1查看 76关注 0票数 1

代码如下:

代码语言:javascript
运行
复制
asmlinkage  s32 vir_to_kaddr(unsigned long v,struct p_header_s *head,u32){
    struct mm_struct *mm = head->task->mm;
    pgd_t *pgd;
    pmd_t *pmd;
    #ifdef PTRS_PER_PUD
        pud_t *pud;
    #endif
    pte_t *pte;
    struct page *pg;
    s32 ret = 0;
    u32 addr = (u32)v;
    s8 *k_addr ;
    spin_lock(&mm->page_table_lock);
    pgd = pgd_offset(mm,addr);
    if (pgd_none(*pgd))
    {
        ret = -1;
        goto out;
    }
    #ifdef PTRS_PER_PUD
    pud = pud_offset(mm,addr);
    if (pud_none(*pud))
    {
        ret = -2;
        goto out;
    }
    pmd = pud_offset(pud,addr);
    #else
    pmd = pmd_offset(pgd,addr);
    #endif
    if (pmd_none(*pmd))
    {
        ret = -3;
        goto out;
    }
    pte = pte_offset_map(pmd,addr);
    if (pte_present(*pte))
    {
        pg = pte_page(*pte);
        if (IS_ERR(pg))
        {
            ret = -4;
            goto out;
        }
        pte_unmap(pte);
    }
    else if (pte_none(*pte))
    {
        pte_unmap(pte);
        ret = -5;
        goto out;
    }
    k_addr = kmap_atomic(pg,KM_USER1)+(addr&(PAGE_SIZE-1));
    ret = memcpy(k_addr,head->v_buf);
    kunmap_atomic(k_)addr,KM_USER1);
    if (ret )
    {
        ret = -6;
    }
    out:
        spin_unlock(&mm->page_table_lock);
        return ret;
}

在密码里,

  • 参数v是从进程的线性地址。
  • head->task->mm:从进程的内存描述符
  • 基于head->v_buff:head->v_buflinear address(v1)copy_from_user(head->v_buf,v1,page_size[0])主流程

所谓的主从进程是继fork()+execv().They之后的另一个进程.

问题是:k_addr = kmap_atomic(pg,KM_USER1)+(addr&(PAGE_SIZE-1));的含义是什么?为什么?

EN

回答 1

Stack Overflow用户

发布于 2016-05-05 05:16:06

pg = pte_page(*pte);将得到一个页面描述.So原子(pg,KM_USER1),它将获得页面.then的高度+ k_addr =(addr&( page _SIZE-1)将得到内核的var地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36985657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档