免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: unbutun
打印 上一主题 下一主题

[CPU及多核] arm上这个pv_stub有什么用? [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
11 [报告]
发表于 2014-12-22 17:45 |只看该作者
本帖最后由 arm-linux-gcc 于 2014-12-22 17:55 编辑

回复 9# wth0722


    pa = va - 0xc0000000 + phy_base

phy_base是run时确定的

修改指令时,__virt_to_phys中填到参数域中的就是phy_base - 0xc0000000的计算结果



论坛徽章:
0
12 [报告]
发表于 2014-12-24 14:23 |只看该作者
先感謝你的解說

小弟這邊有一點想不透的是

當Run time時,假設有一個dirver去呼叫 virt_to_phys(x)

從下面來看
  1. #define __PV_BITS_31_24 0x81000000

  2. extern unsigned long __pv_phys_offset;
  3. #define PHYS_OFFSET __pv_phys_offset

  4. #define __pv_stub(from,to,instr,type)           \
  5.     __asm__("@ __pv_stub\n"             \
  6.     "1: " instr "   %0, %1, %2\n"       \
  7.     "   .pushsection .pv_table,\"a\"\n"     \
  8.     "   .long   1b\n"               \
  9.     "   .popsection\n"              \
  10.     : "=r" (to)                 \
  11.     : "r" (from), "I" (type))

  12. static inline unsigned long __virt_to_phys(unsigned long x)
  13. {
  14.     unsigned long t;
  15.     __pv_stub(x, t, "add", __PV_BITS_31_24);
  16.     return t;
  17. }
复制代码
等於是去做
    1 : add t,x,0x81000000
    "   .pushsection .pv_table,\"a\"\n"     \
    "   .long   1b\n"               \
    "   .popsection\n"   

我比較不解的是做完上面指令之後, t為何可以是該pa

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
13 [报告]
发表于 2014-12-24 18:52 |只看该作者
回复 12# wth0722


    我不是已经说了内核启动时会去将这个0x81000000改掉吗,我前面全都在说这事

论坛徽章:
0
14 [报告]
发表于 2014-12-26 19:00 |只看该作者
回复 13# arm-linux-gcc

我聊解你的意思了,感謝你的回復


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP