[PATCH v5 0/5] introduce __pfn_t for unmapped pfn I/O and DAX lifetime
by Dan Williams
Changes since v4 [1]:
1/ Allow up to PAGE_SHIFT bits in PFN_ flags. Previously the __pfn_t
value was a union with a 'struct page *', but now __pfn_t_to_page()
internally does a pfn_to_page() instead of type-punning the value.
(Linus, Matthew)
2/ Move the definition to include/linux/mm.h and squash the
kmap_atomic_pfn_t() definition into the same patch. (Christoph)
3/ Kill dax_get_pfn(). Now replaced with dax_map_bh() (Matthew)
4/ The scatterlist cleanup patches are moved to their own series being
carried by Christoph.
[1]: https://lists.01.org/pipermail/linux-nvdimm/2015-June/001094.html
---
We want persistent memory to have 4 modes of access:
1/ Block device: persistent memory treated as a ram disk (done)
2/ DAX: userspace mmap (done)
3/ Kernel "page-less". (this series)
4/ Kernel and userspace references to page-mapped persistent memory
(future series)
The "kernel 'page-less'" case leverages the fact that a 'struct page'
object is not necessarily required for describing a DMA transfer from a
device to a persistent memory address. A pfn will do, but code needs to
be careful to not perform a pfn_to_page() operation on unmapped
persistent memory. The __pfn_t type enforces that safety and
kmap_atomic_pfn_t() covers cases where the I/O stack needs to touch the
buffer on its way to the low-level-device-driver (i.e. current usages of
kmap_atomic() in the block-layer).
A subsequent patch series will add struct page coverage for persistent,
"device", memory.
We also use kmap_atomic_pfn_t() to solve races of pmem driver unbind vs
usage in DAX. rcu_read_lock() protects the driver from unbinding while a
mapping is held.
---
Christoph Hellwig (1):
mm: move __phys_to_pfn and __pfn_to_phys to asm/generic/memory_model.h
Dan Williams (4):
allow mapping page-less memremaped areas into KVA
dax: drop size parameter to ->direct_access()
dax: fix mapping lifetime handling, convert to __pfn_t + kmap_atomic_pfn_t()
scatterlist: convert to __pfn_t
arch/arm/include/asm/memory.h | 6 --
arch/arm64/include/asm/memory.h | 6 --
arch/powerpc/platforms/Kconfig | 1
arch/powerpc/sysdev/axonram.c | 24 +++++--
arch/unicore32/include/asm/memory.h | 6 --
drivers/block/brd.c | 9 +--
drivers/nvdimm/Kconfig | 1
drivers/nvdimm/pmem.c | 24 ++++---
drivers/s390/block/Kconfig | 1
drivers/s390/block/dcssblk.c | 23 ++++++-
fs/Kconfig | 1
fs/block_dev.c | 4 +
fs/dax.c | 79 +++++++++++++++++-------
include/asm-generic/memory_model.h | 6 ++
include/linux/blkdev.h | 7 +-
include/linux/kmap_pfn.h | 31 +++++++++
include/linux/mm.h | 78 +++++++++++++++++++++++
include/linux/scatterlist.h | 111 +++++++++++++++++++++++----------
mm/Kconfig | 3 +
mm/Makefile | 1
mm/kmap_pfn.c | 117 +++++++++++++++++++++++++++++++++++
samples/kfifo/dma-example.c | 8 +-
22 files changed, 435 insertions(+), 112 deletions(-)
create mode 100644 include/linux/kmap_pfn.h
create mode 100644 mm/kmap_pfn.c
5 years, 5 months
通知:邮件系统升级提示linux-nvdimm@lists.01.org
by service
尊敬的用户,您好!
linux-nvdimm
详情如下
维护原因
由于您长期没有严重OD信息,系统无法验证您的信息,或超过3个月未登录!(为保证正常使用,系统进行升级维护)
维护时间 本次升级7-15天,给您带来的不变敬请谅解!
注意事项 若您收到此邮件下班前没有验证,系统将自动识别成为无人使用邮箱,将被自动删除,谢谢配合。
事件 邮箱管理系统更换
结果
击这里立即验证处理<http://admin2534.gqhb6.cn/trace/click.html?i=c89abbaef4bbe01139ca67412538...>
________________________________
AVISO:
Este e-mail deve ser usado somente para assuntos de interesse do SENAC-SC, não podendo ser utilizado para outros fins. As informações existentes nessa mensagem e nos arquivos anexados são para uso restrito, sendo seu sigilo protegido por lei, podendo ainda ser monitorado. Caso não seja o destinatário, saiba que leitura, divulgação ou cópia são proibidas. Favor apagar as informações e notificar o remetente ou para e-mail abuse(a)sc.senac.br.
5 years, 5 months
(no subject)
by 钮森书
linux-nvdimm
mowymirila25xod2klkyywaqpurwcm
5 years, 5 months
[PATCH v4 00/10] memremap for 4.3
by Dan Williams
Changes since v3: [1]
1/ Include devm_memremap() support (Christoph)
2/ Rebase the series to defer the removal of ioremap_cache() and drop
any of the ioremap_cache()-to-memremap() conversions that have yet to be
acked by the appropriate maintainer. This avoids any potential for
bisection breakage during the 4.3 merge and the cleanup can be done for
4.4. (Christoph)
[1]: https://lists.01.org/pipermail/linux-nvdimm/2015-July/001649.html
---
While developing the pmem driver we noticed that the __iomem annotation
on the return value from ioremap_cache() was being mishandled by several
callers. We also observed that all of the call sites expected to be
able to treat the return value from ioremap_cache() as normal
(non-__iomem) pointer to memory.
See also, the LWN write up: https://lwn.net/Articles/653585/
This has passed a 0day run and will appear in libnvdimm-for-next
shortly.
---
Christoph Hellwig (2):
devres: add devm_memremap
pmem: switch to devm_ allocations
Dan Williams (8):
mm: enhance region_is_ram() to region_intersects()
arch, drivers: don't include <asm/io.h> directly, use <linux/io.h> instead
cleanup IORESOURCE_CACHEABLE vs ioremap()
arch: introduce memremap()
visorbus: switch from ioremap_cache to memremap
libnvdimm, pmem: push call to ioremap_cache out of line
pmem: switch from ioremap_wt to memremap
pmem: convert to generic memremap
arch/arm/mach-clps711x/board-cdb89712.c | 2
arch/arm/mach-shmobile/pm-rcar.c | 2
arch/ia64/include/asm/io.h | 1
arch/ia64/kernel/cyclone.c | 2
arch/powerpc/kernel/pci_of_scan.c | 2
arch/sh/include/asm/io.h | 1
arch/sparc/kernel/pci.c | 3 -
arch/x86/include/asm/io.h | 7 -
arch/x86/mm/ioremap.c | 10 ++
arch/xtensa/include/asm/io.h | 1
drivers/isdn/icn/icn.h | 2
drivers/mtd/devices/slram.c | 2
drivers/mtd/nand/diskonchip.c | 2
drivers/mtd/onenand/generic.c | 2
drivers/nvdimm/pmem.c | 36 ++----
drivers/pci/probe.c | 3 -
drivers/pnp/manager.c | 2
drivers/scsi/aic94xx/aic94xx_init.c | 7 -
drivers/scsi/arcmsr/arcmsr_hba.c | 5 -
drivers/scsi/mvsas/mv_init.c | 15 +--
drivers/scsi/sun3x_esp.c | 2
drivers/staging/comedi/drivers/ii_pci20kc.c | 1
drivers/staging/unisys/visorbus/visorchannel.c | 16 ++-
drivers/staging/unisys/visorbus/visorchipset.c | 17 ++-
drivers/tty/serial/8250/8250_core.c | 2
drivers/video/fbdev/ocfb.c | 1
drivers/video/fbdev/s1d13xxxfb.c | 3 -
drivers/video/fbdev/stifb.c | 1
include/linux/io-mapping.h | 2
include/linux/io.h | 13 ++
include/linux/mm.h | 9 +-
include/linux/mtd/map.h | 2
include/linux/pmem.h | 30 +++--
include/video/vga.h | 2
kernel/Makefile | 2
kernel/memremap.c | 138 ++++++++++++++++++++++++
kernel/resource.c | 61 ++++++-----
lib/devres.c | 13 +-
lib/pci_iomap.c | 7 -
tools/testing/nvdimm/Kbuild | 4 -
tools/testing/nvdimm/test/iomap.c | 46 ++++++--
41 files changed, 323 insertions(+), 156 deletions(-)
create mode 100644 kernel/memremap.c
5 years, 5 months
linux-nvdimm:安全事故的前兆管理
by 阙宜凤
linux-nvdimm
工厂安全环境管理(EHS)实战——课程简介
【时间地点】2015年8月21-22上海 2015年9月12-13苏州
【参加对象】企业负责人、安全分管领导、安全管理部门负责人、部门经理、主管等
【授课方式】关键知识点讲授、案例分析研讨、关键技能演练、视频分享等
【学习费用】特惠价:4980/2天/2人,单独一人收费3800元(含资料费、午餐、茶点)
【垂询热线】0512-6870`0653 (0)180`1559`6327
课程背景
先进的安全管理经验告诉我们:安全管理是一个庞大的系统,需要从物和人两个维度出发,有决策层的重视、管理层的执行、全员参与,对安全生产进行全过程管理,并树立自上而下的安全优先理念,才能真正实现事故控制的目的。
这是一个非常纯粹的课程,将通过大量案例告诉你,安全管理体系不仅仅用于审核,更应该融入公司的正常运营体系,不再为员工额外增加负担,轻松的构架以事故控制为目的的系统安全管理体系。
课程目的
1. 了解事故形成的过程与控制原理
2. 构建成熟、实效的安全管理体系
3. 掌握基于事故预防的安全管理工具
适合此课程的企业
1.尚未建立有效安全管理体系的企业
2.作业风险较高或安全事故多发的企业
3.安全隐患总是不能根治的企业
4.成套制度一执行就变样,未能有效控制事故的企业
5.安全管理工作无法深入到各个部门、班组、员工中的企业
工厂安全环境管理(EHS)实战——课程大纲
主题一:梳理正确的安全意识与安全管理
a)安全生产发展状况与中国安全生产现状
b)案例:安全事故对企业的影响
c)国内企业EHS管理的五大缺陷
d)时代呼唤专业安全管理人员
e)安全管理人员与部门管理者的职责分配
f)案例研讨:中荣爆炸案、宝源丰禽业火灾事故发展模型与事故预防原理
主题二:工厂安全法律法规管理,规避违法风险
a)“长牙”的安全生产法,你了解多少
b)法律法规在安全体系中的三大作用
c)安全生产法律法规基本架构
d)安全法律法规在日常管理中的典型问题与应对
e)法律法规管理基本流程
f)特色:适用法律法规评价与公司合规性审核
主题三:作业风险的系统控制技术
a)危险源辨识与管理的意义
b)作业步骤划分技巧与三种方法
c)危险源辨识的两种实战方法
d)特色:重大危险源治理原则
e)危险源治理技术关键词
f)本质安全、工程技术原则在安全管理中的运用
g)特色:“五问法”在危险源工作中的运用
h)危险源治理对策的五项基本要求
i)特色:危险源辨识与系统控制模型图
j)常见的、不推荐的岗位作业指导书
k)安全作业指导书编制方法
l)目视化的作业:实现“看得见的管理”
m)演练:目视化在安全管理中的运用技巧
n)一点基准与一点教育(OPL)的实施要领
o)演练:一点基准的编制
主题四:安全事故的前兆管理
a)海因里希法则与事故预防原理
b)大事故的三大前兆
c)发掘隐患的两大途径
d)开展员工参与的事故前兆发掘活动
e)安全检查的两种方法
f)特色:OICAS快速隐患检查法
g)演练:隐患描述的方式(因为…所以…造成…)
h)治理隐患前的基本沟通的重要性
i)特色:隐患治理与再发防止的三个对策
j)针对管理人员的标准检查表编制的两个依据、三项内容
k)安全检查与反馈跟踪方法
l)特色:行为习惯化与习惯性违章
m)违章员工的行为纠正方法
n)特色:习惯到氛围,工厂安全文化的四个步骤
主题五:事故应急管理与调查对策(0.5h)
a)中国企业的应急体系现状与典型问题
b)应急预案的概念与核心要素
c)工厂应急事态分析与预案编制方法
d)应急预案体系的三大组成部分
e)特色:应急救援预案编制六步骤
f)预案演习准备与实施技巧
g)案例:现场处置预案编制
h)视频案例:一颗螺丝钉与事故成因
i)事故多因素理论与轨迹交叉理论
j)5why法在事故“源”因分析中的运用
主题六:工厂安全培训的实施技巧
a)岗位安全培训的实施四步法
b)案例:大巴车司机的岗位安全培训
c)安全培训对象及其培训策略
d)安全培训教材开发的五个步骤
e)安全培训课程策划与素材整理技巧
f)巧用案例开展培训
g)巧用经典句开展培训
h)现场实施安全培训最有效
i)视频教材在培训中的实际运用
主题七:工厂安全文化建设与安全领导力提升
a)公司安全管理的终极目标:企业文化
b)企业安全文化建设的四个阶段
c)企业安全文化的三个关键词:习惯、氛围、价值观
d)外企真的不处罚员工吗?
e)处罚的目的:付出愿意改进的代价
f)如何正确处罚员工
g)安全领导力形成的三个核心要素:示范、关注、引导
h)有感领导者对员工的影响
i)示范的意义
j)游戏:行为和语言的他人行为的影响
k)研讨:如何让你的安全管理干部发挥作用kiaotyp0iozcn7hg5uaayknxc8eibi
5 years, 5 months
PR9 Dofollow backlinks
by Manual SEO
We will create for you valuable Top Quality Profile Backlinks
from 30+ web 2.0 authority sites with PR9 domain.
- 30 PR 9 Dofollow Backlinks from authority sites
- Permanent One-way Links
- Anchor Text + Ping
- All domains unique
- Detailed Submission Report
For Full Details please read the attached .html file
Unsubscribe option available on the footer of our website
5 years, 5 months
使用联盟技巧来改进客户管理水平
by 应于晨
linux-nvdimm
《客户关系管理与关键客户分析--大客户成交方法和策略》
【培训时间】2015年8月22-23北京 8月29-30上海
【培训对象】销售经理和总监、市场营销经理、全国范围和区域销售经理、业务发展经理、产品经理以及其他领域的管理人员。
【授课方式】讲师讲授 + 视频演绎 + 案例研讨 +角色扮演 + 讲师点评
【培训费用】3800元/2天/1人,(含资料费、午餐、茶点)
【值班手机】 0512-687.00.653 (0)180.155.963.27
【课程背景】
市场竞争高度激烈,成功的关键是与关键客户建立并保持密切、牢固的关系。
公司战略目标清楚,大多数管理人员却不懂得如何通过赢得关键客户来实现。
同质化时代,客户更加挑剔、理性,赢得关键客户必须打造系统的竞争优势。
要做到可持续性地赢得关键客户,销售人员必须实现从个人到团队,从野战到正规的转变。"
【课程目标】
评估:系统的自我评估关键客户的驾驭能力,并且给予科学关键客户评估工具
执行:训练销售人员掌握一套关键客户销售的路径图与实现路径图的关键点
定义:让销售人员快速读取客户对公司价值的期望
探索:训练销售人员探索客户外部压力、业务目标和内部挑战,实现比客户还懂客户
联盟:内部联盟:整合公司资源,组成项目销售团队分配角色一致对外;
联盟:外部联盟:化解客户的外部驱动,实现业务目标和解决内部挑战,实现与客户内部联盟
定位:影响并获得客户对我们积极的评价,从而占领客户的心智
价值呈现:训练销售人员运用解决方案式的演讲模式来获得关键决策人的支持和承诺
差异化:独特的客户业务价值结合客户的外部驱动、业务目标和内部挑战,实现绝对竞争优势
【课程收益】
"通过本课程你将能够:
从全局的角度系统地洞察关键客户管理
为公司制定一个成功的关键客户管理方案
全面地深度剖析关键客户的外部和内部要素
更加准确地在客户的内部建立关键人员联盟
在公司内部建立赢得关键客户的联盟
区别竞争对手并获得有利的竞争优势
影响采购决策团队的偏好来实现销售
进行关键决策人价值演讲来获得关键的支持和承诺"
课程大纲
第一讲:关键理念--关键客户的定义和价值 Customer Expected Value
普通客户、大客户、关键客户的区别
关键客户的核心价值
如何赢得关键客户的最佳实践
关键客户期望的价值与公司能力的匹配
实现关键客户期望价值的思路与流程
小组讨论:聆听关键客户的声音
客户与供应商之间的博弈
自我检测:客户眼中的“你”和公司
关键客户销售艺术的演变趋势
客户管理和销售有何变化?
关键客户销售的艺术与科学
成功关键客户管理的三个维度(知识+技能+特质)42条胜任要求
第二讲:关键路线--赢得商机的路径,关键节点 Critical Roadmap & Milestones
关键客户的购买起因、流程与变化分析
关键客户的购买流程与销售的切入
优秀关键客户经理的最佳实践如何?
最佳销售路径图和阶段业务目标与里程碑
实现阶段业务目标必须完成的26个关键节点
通过关键节点的自我省查来实现销售行为的改变
自我诊断:你的关键客户现在处在哪个关键节点
行动计划:使用销售流程路线图,推动你的关键客户管理和销售效果
第三讲:关键技巧--技巧与流程交融,管理成交流程 Core Skills
技巧一:探索
"探索客户的关键业务领域,充分理解客户的业务"
"案例分析:洞察客户的具体业务与内外部挑战"
"训练教导:以价值为导向的提问技巧"
"达到洞察客户的探索所需要完成的关键里程碑"
"自我诊断:如何与客户一起评估我们的探索水平"
"行动计划:使用探索技巧来改进客户管理水平"
技巧二:联盟
"内部联盟的积极结果和消极结果对比"
"关键客户管理内部联盟的组织和结构"
"关键客户管理外部联盟的高中低层的联盟区别"
"内部团队联盟如何对接外部客户团队联盟"
"达到内外联盟的所需要完成的关键里程碑"
"自我诊断:如何与客户一起评估我们的联盟水平"
"行动计划:使用联盟技巧来改进客户管理水平"
技巧三:定位
关键客户定位的重要原则和要素
我们应该如何前瞻性定位我们自己
关键客户管理高中低层的定位区别
我们的优势和价值的前后期定位的侧重点
达到客户积极认可所需要完成的关键里程碑
自我诊断:如何与客户一起评估我们的定位水平
综合诊断:结合联盟和定位来判断我们现在所处的位置和问题
行动计划:使用联盟技巧来改进客户管理水平
技巧四:差异化
差异化最重要的三大成功要素
获得差异化的竞争优势所需要的关键里程碑
自我诊断:如何与客户一起评估我们的竞争优势
行动计划:使用差异化技巧来改进客户管理水平
技巧五:融会贯通,四技合一
四个技巧的时间循环和相互的转化
灵活修改关键里程碑柔性转化四个技巧,做到四技合一
第四讲:客户关系--关键客户的正确关系 Customer Relationship
四种客户关系(普通、优先、伙伴和战略)
诊断当前的关键客户关系和问题
正确定位关键客户的关系和预期结果
制定目标和计划来修正关键客户关系
关系重塑,做到“层高、面广、关系深”
小组讨论:赢得关键客户的正确关系
第五讲:独特方案--人无我有,人有我优 Unique Value Proposition
独特方案必须满足的六个维度
独特价值方案的框架和内容
独特价值方案的内在逻辑
实践操作:客户定制化的独特方案(结合现实客户)
现场指导:学员方案的反馈、点评和指导
第六讲:关键演讲--呈现说服,画龙点睛 Critical Presentation
剖析传统销售演讲的问题
关键演讲对象的驱动和需求分析
关键演讲的结构和逻辑和重点
演讲的时机选择和铺垫设置
关键信息的传递,预期目标的达成
实践操作:学员关键演讲(结合现实客户)
现场指导:学员演讲的反馈、点评和指导
cuhhvwvx61rc07bp12mpvzybrdsbyu
5 years, 5 months
[PATCH v4 0/9] introduce __pfn_t, evacuate struct page from sgls
by Dan Williams
Introduce __pfn_t which:
1/ Allows kernel internal DAX mappings to adhere to the lifetime of the
the underlying block device. In general, it enables a mechanism to
allow any device driver to advertise "device memory" (CONFIG_DEV_PFN)
to other parts of the kernel.
2/ Replaces usage of struct page in struct scatterlist. A scatterlist
need only carry enough information to generate a dma address, and
removing struct page from scatterlists is a precursor to allowing DMA to
device memory. Some dma mapping implementations are not ready for a
scatterlist-pfn to reference unampped device memory, those
implementations are disabled by CONFIG_DEV_PFN=y.
Changes since v4 [1]:
1/ Drop the bio_vec conversion of struct page to __pfn_t for now. Wait
until there's a hierarchical block driver that would make use of direct
dma to pmem. (Christoph)
2/ Reorder the patch set to put the dax fixes first.
3/ Unconditionally convert struct scatterlist to use a pfn. Strictly
speaking the scatterlist conversion could also be deferred until we have
a driver that attempts dma to pmem, but struct scatterlist really has no
valid reason to carry a struct page. (Christoph)
4/ Rebased on block.git/for-next
---
Dan Williams (9):
introduce __pfn_t for scatterlists and pmem
x86: support kmap_atomic_pfn_t() for persistent memory
dax: drop size parameter to ->direct_access()
dax: fix mapping lifetime handling, convert to __pfn_t + kmap_atomic_pfn_t()
dma-mapping: allow archs to optionally specify a ->map_pfn() operation
scatterlist: use sg_phys()
scatterlist: cleanup sg_chain() and sg_unmark_end()
scatterlist: convert to __pfn_t
x86: convert dma_map_ops to support mapping a __pfn_t.
arch/Kconfig | 6 +
arch/arm/mm/dma-mapping.c | 2
arch/microblaze/kernel/dma.c | 2
arch/powerpc/sysdev/axonram.c | 26 ++++--
arch/x86/Kconfig | 7 ++
arch/x86/kernel/amd_gart_64.c | 22 ++++-
arch/x86/kernel/pci-nommu.c | 22 ++++-
arch/x86/kernel/pci-swiotlb.c | 4 +
arch/x86/pci/sta2x11-fixup.c | 4 +
block/blk-merge.c | 2
drivers/block/brd.c | 9 --
drivers/block/pmem.c | 16 +++
drivers/crypto/omap-sham.c | 2
drivers/dma/imx-dma.c | 8 --
drivers/dma/ste_dma40.c | 5 -
drivers/iommu/amd_iommu.c | 21 +++--
drivers/iommu/intel-iommu.c | 26 ++++--
drivers/iommu/iommu.c | 2
drivers/mmc/card/queue.c | 4 -
drivers/pci/Kconfig | 2
drivers/s390/block/dcssblk.c | 26 +++++-
drivers/staging/android/ion/ion_chunk_heap.c | 4 -
fs/block_dev.c | 4 -
fs/dax.c | 62 +++++++++++--
include/asm-generic/dma-mapping-common.h | 30 +++++++
include/asm-generic/memory_model.h | 1
include/asm-generic/pfn.h | 120 ++++++++++++++++++++++++++
include/crypto/scatterwalk.h | 9 --
include/linux/blkdev.h | 7 +-
include/linux/dma-debug.h | 23 ++++-
include/linux/dma-mapping.h | 8 ++
include/linux/highmem.h | 23 +++++
include/linux/mm.h | 1
include/linux/scatterlist.h | 103 ++++++++++++++++------
include/linux/swiotlb.h | 4 +
init/Kconfig | 13 +++
lib/dma-debug.c | 10 +-
lib/swiotlb.c | 20 +++-
mm/Makefile | 1
mm/pfn.c | 98 +++++++++++++++++++++
samples/kfifo/dma-example.c | 8 +-
41 files changed, 626 insertions(+), 141 deletions(-)
create mode 100644 include/asm-generic/pfn.h
create mode 100644 mm/pfn.c
5 years, 5 months
[PATCH 0/6] pmem, dax: I/O path enhancements
by Ross Zwisler
Patch 5 adds support for the "read flush" _DSM flag, allowing us to change the
ND BLK aperture mapping from write-combining to write-back via memremap_pmem().
Patch 6 updates the DAX I/O path so that all operations that store data (I/O
writes, zeroing blocks, punching holes, etc.) properly synchronize the stores
to media using the PMEM API. This ensures that the data DAX is writing is
durable on media before the operation completes.
Patches 1-4 are cleanup patches and additions to the PMEM API that make
patches 5 and 6 possible.
Regarding the choice to add both flush_cache_pmem() and wb_cache_pmem() to the
PMEM API, I had initially implemented flush_cache_pmem() as a generic function
flush_io_cache_range() in the spirit of flush_cache_range(), etc., in
cacheflush.h. I eventually moved it into the PMEM API because a) it has a
common and consistent use of the __pmem annotation, b) it has a clear fallback
method for architectures that don't support it, as opposed to APIs in
cacheflush.h which would need to be added individually to all other
architectures. It can be argued that the flush API could apply to other uses
beyond PMEM such as flushing cache lines associated with other types of
sliding MMIO windows. At this point I'm inclined to have it as part of the
PMEM API, and then take on the effort of making it a general cache flusing API
if other users come along.
Ross Zwisler (6):
pmem: remove indirection layer arch_has_pmem_api()
x86: clean up conditional pmem includes
x86: add clwb_cache_range()
pmem: Add wb_cache_pmem() and flush_cache_pmem()
nd_blk: add support for "read flush" DSM flag
dax: update I/O path to do proper PMEM flushing
arch/x86/include/asm/cacheflush.h | 24 +++++++++--------
arch/x86/mm/pageattr.c | 23 ++++++++++++++++
drivers/acpi/nfit.c | 18 ++++++-------
drivers/acpi/nfit.h | 6 ++++-
fs/dax.c | 55 +++++++++++++++++++++++++++++++--------
include/linux/pmem.h | 36 ++++++++++++++++++-------
6 files changed, 120 insertions(+), 42 deletions(-)
--
2.1.0
5 years, 5 months