zoukankan      html  css  js  c++  java
  • 异或的精彩应用 FIX_BTMAP_END

    源文件是arch/x86/include/asm/fixmap.h
    enum fixed_addresses {
    #ifdef CONFIG_X86_32
            FIX_HOLE,
    ...
        __end_of_permanent_fixed_addresses,

        /*
         * 256 temporary boot-time mappings, used by early_ioremap(),
         * before ioremap() is functional.
         *
         * If necessary we round it up to the next 256 pages boundary so
         * that we can have a single pgd entry and a single pte table:
         */
    #define NR_FIX_BTMAPS        64
    #define FIX_BTMAPS_SLOTS    4
    #define TOTAL_FIX_BTMAPS    (NR_FIX_BTMAPS * FIX_BTMAPS_SLOTS)
        FIX_BTMAP_END =
         (__end_of_permanent_fixed_addresses ^
          (__end_of_permanent_fixed_addresses + TOTAL_FIX_BTMAPS - 1)) &
         -PTRS_PER_PTE
         ? __end_of_permanent_fixed_addresses + TOTAL_FIX_BTMAPS -
           (__end_of_permanent_fixed_addresses & (TOTAL_FIX_BTMAPS - 1))
         : __end_of_permanent_fixed_addresses,
        FIX_BTMAP_BEGIN = FIX_BTMAP_END + TOTAL_FIX_BTMAPS - 1,

    ---
    enum fixed_addresses 中每个项代表一个页。通过__fix_to_virt获得地址
    #define __fix_to_virt(x)        (FIXADDR_TOP - ((x) << PAGE_SHIFT))
    比如__fix_to_virt(FIX_BTMAP_BEGIN),FIXADDR_TOP通常是0xFFFFF000
    比如__fix_to_virt(FIX_HOLE)是0xFFFFF000

    FIX_BTMAP_END通过
    (__end_of_permanent_fixed_addresses ^
      (__end_of_permanent_fixed_addresses + TOTAL_FIX_BTMAPS - 1))
        & -PTRS_PER_PTE
    实现是否沿-PTRS_PER_PTE(0xFFFFFC00)对齐的检测

    另一个异或的精彩应用是Buddy算法

    http://blog.linuxeden.com/index.php/196616/viewspace-8149.html

  • 相关阅读:
    #Laravel 笔记# 多语言化 App::setLocale() 持久化。
    thinkphp 3.2 发送邮件(Phpmailer)
    深度学习的注意力机制
    图像检索引擎vearch安装与测试使用
    word2vector
    GPU环境搭建
    ImportError: libSM.so.6: cannot open shared object file: No such file or dir
    shell中&&和||的用法
    Linux 远程连接sftp与ftp
    mysql-connector-java各版本及与mysql、JDK版本的对应
  • 原文地址:https://www.cnblogs.com/mull/p/4477803.html
Copyright © 2011-2022 走看看