Linux kernel 缓存禁用后的mcr指令

Linux kernel 缓存禁用后的mcr指令,linux-kernel,arm,linux-device-driver,cpu-cache,Linux Kernel,Arm,Linux Device Driver,Cpu Cache,以arm为平台,Linux为操作系统 考虑通过在内核配置中启用CONFIG\u CPU\u DCACHE\u DISABLE来禁用缓存。 此选项基本上禁用一级缓存。 禁用一级缓存显然会禁用二级缓存 在此之后,任何mcr指令都不会对缓存产生任何影响。 这意味着任何dma_cache_maint()操作都等效于NULL 链接:http://lxr.linux.no/#linux+v2.6.35/arch/arm/kernel/head.S#L166查看特定内核的TRMs(技术参考手册)(确保获得版本

以arm为平台,Linux为操作系统

考虑通过在内核配置中启用CONFIG\u CPU\u DCACHE\u DISABLE来禁用缓存。 此选项基本上禁用一级缓存。 禁用一级缓存显然会禁用二级缓存

在此之后,任何mcr指令都不会对缓存产生任何影响。 这意味着任何dma_cache_maint()操作都等效于NULL


链接:http://lxr.linux.no/#linux+v2.6.35/arch/arm/kernel/head.S#L166

查看特定内核的TRMs(技术参考手册)(确保获得版本号r2p0等,即使它说它已经过时)和二级缓存。如果一个读被标记为可缓存进入L1,那么它会进入L2作为可缓存还是否?我认为它不是,测试和发现它是非常琐碎的。mcr仍应执行该功能,具体取决于该功能,刷新禁用或空缓存不应该做很多事情,是吗?不过,根据mcr的不同,无效化仍将发挥作用。您需要提供更多这些细节linux中的SARM支持完全是一团糟,试图假设一些共性,实际上,无论谁签入它,使用的核心都是受支持的,尤其是缓存例程非常糟糕,并且不断变化(不是为了更好)。与核心版本匹配的TRM是权威,让您的驱动程序/内核与该TRM匹配。对不起,也许我必须重写这个问题-好的,问题是Linux内核提供了一个选项,通过CONFIG\u CPU\u DCACHE\u disable禁用数据缓存,在跟踪这个宏时,我看到了使用“mcr”指令禁用缓存。我观察到在驱动程序/内核中使用dma_缓存_维护例程。这些例程最终使用mcr指令进行刷新/失效。因此,一旦启用配置CPU DCACHE DISABLE,这些执行刷新/失效的例程将变为NO-OP?需要跟踪代码,然后查看配置CPU DCACHE DISABLE的更改mcr/mrc指令周围的执行流。我更了解底层的东西,而不是更高层次的linux驱动程序等。为了回答上述问题:我在问题中给出的链接是在我的体系结构中调用CONFIG_CPU_DCACHE_DISABLE的唯一地方……因此,简言之,它只需执行具有特定值的mcr指令。请看TRMs(技术参考手册)对于特定的核心(确保您获得版本号r2p0等,即使它说它已过时)和二级缓存。如果一个读被标记为可缓存进入L1,那么它会进入L2作为可缓存还是否?我认为它不是,测试和发现它是非常琐碎的。mcr仍应执行该功能,具体取决于该功能,刷新禁用或空缓存不应该做很多事情,是吗?不过,根据mcr的不同,无效化仍将发挥作用。您需要提供更多这些细节linux中的SARM支持完全是一团糟,试图假设一些共性,实际上,无论谁签入它,使用的核心都是受支持的,尤其是缓存例程非常糟糕,并且不断变化(不是为了更好)。与核心版本匹配的TRM是权威,让您的驱动程序/内核与该TRM匹配。对不起,也许我必须重写这个问题-好的,问题是Linux内核提供了一个选项,通过CONFIG\u CPU\u DCACHE\u disable禁用数据缓存,在跟踪这个宏时,我看到了使用“mcr”指令禁用缓存。我观察到在驱动程序/内核中使用dma_缓存_维护例程。这些例程最终使用mcr指令进行刷新/失效。因此,一旦启用配置CPU DCACHE DISABLE,这些执行刷新/失效的例程将变为NO-OP?需要跟踪代码,然后查看配置CPU DCACHE DISABLE的更改mcr/mrc指令周围的执行流。我更了解底层的东西,而不是更高层次的linux驱动程序,等等。为了回答上述问题:我在问题中给出的链接是在我的体系结构中唯一调用CONFIG_CPU_DCACHE_DISABLE的地方……因此,简言之,它只执行具有特定值的mcr指令。