[PATCH 0/2] acpi, nfit: support for new NVDIMM_FAMILY_INTEL commands
by Dan Williams
The latest version of the NVDIMM_FAMILY_INTEL command set adds support
for firmware updates and setting SMART health alarms / thresholds among
other things. Given that these are command payloads that will only ever
be issued by userspace we only wire up the command numbers and revision
ids for use through the ND_CMD_CALL interface.
---
Dan Williams (2):
acpi, nfit: hide unknown commands from nmemX/commands
acpi, nfit: add support for NVDIMM_FAMILY_INTEL v1.6 DSMs
drivers/acpi/nfit/core.c | 63 +++++++++++++++++++++++++++++++++++++++++-----
drivers/acpi/nfit/nfit.h | 19 +++++++++++++-
2 files changed, 74 insertions(+), 8 deletions(-)
4 years, 6 months
[bug report] libnvdimm: add support for clear poison list and badblocks for device dax
by Dan Carpenter
Hello Dave Jiang,
The patch 006358b35c73: "libnvdimm: add support for clear poison list
and badblocks for device dax" from Apr 7, 2017, leads to the
following static checker warning:
drivers/nvdimm/bus.c:852 nd_pmem_forget_poison_check()
warn: we tested 'nd_dax' before and it was 'false'
drivers/nvdimm/bus.c
835 static int nd_pmem_forget_poison_check(struct device *dev, void *data)
836 {
837 struct nd_cmd_clear_error *clear_err =
838 (struct nd_cmd_clear_error *)data;
839 struct nd_btt *nd_btt = is_nd_btt(dev) ? to_nd_btt(dev) : NULL;
840 struct nd_pfn *nd_pfn = is_nd_pfn(dev) ? to_nd_pfn(dev) : NULL;
841 struct nd_dax *nd_dax = is_nd_dax(dev) ? to_nd_dax(dev) : NULL;
^^^^^^
nd_dax is set here.
842 struct nd_namespace_common *ndns = NULL;
843 struct nd_namespace_io *nsio;
844 resource_size_t offset = 0, end_trunc = 0, start, end, pstart, pend;
845
846 if (nd_dax || !dev->driver)
^^^^^^
We return if it's non-NULL
847 return 0;
848
849 start = clear_err->address;
850 end = clear_err->address + clear_err->cleared - 1;
851
852 if (nd_btt || nd_pfn || nd_dax) {
853 if (nd_btt)
854 ndns = nd_btt->ndns;
855 else if (nd_pfn)
856 ndns = nd_pfn->ndns;
857 else if (nd_dax)
^^^^^^
but the rest of the function assumes it can be true. Perhaps we plan
to enable it in the future? It's not clear to me.
858 ndns = nd_dax->nd_pfn.ndns;
859
860 if (!ndns)
861 return 0;
862 } else
863 ndns = to_ndns(dev);
864
865 nsio = to_nd_namespace_io(&ndns->dev);
866 pstart = nsio->res.start + offset;
867 pend = nsio->res.end - end_trunc;
868
869 if ((pstart >= start) && (pend <= end))
870 return -EBUSY;
871
872 return 0;
873
874 }
regards,
dan carpenter
4 years, 6 months
业务员为什么有激情,没有业绩?
by 都滨
linux-nvdimm
为什么业务员经常申请政策,但就是没有业绩?
为什么报销费用越来越高,但业绩总是不理想?
两天时间为您解决所有问题
18:24:51
4 years, 6 months
[PATCH] libnvdimm: add smart payload fields added in DSM 1.6
by Dave Jiang
NVDIMM DSM interface v1.6 added additional smart health fields. Updating the
smart payload data structure accordingly.
Signed-off-by: Dave Jiang <dave.jiang(a)intel.com>
---
include/uapi/linux/ndctl.h | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/include/uapi/linux/ndctl.h b/include/uapi/linux/ndctl.h
index 3f03567..5ca8628 100644
--- a/include/uapi/linux/ndctl.h
+++ b/include/uapi/linux/ndctl.h
@@ -25,6 +25,7 @@ struct nd_cmd_smart {
#define ND_SMART_USED_VALID (1 << 2)
#define ND_SMART_TEMP_VALID (1 << 3)
#define ND_SMART_CTEMP_VALID (1 << 4)
+#define ND_SMART_SHUTDOWN_COUNT_VALID (1 << 5)
#define ND_SMART_ALARM_VALID (1 << 9)
#define ND_SMART_SHUTDOWN_VALID (1 << 10)
#define ND_SMART_VENDOR_VALID (1 << 11)
@@ -44,7 +45,10 @@ struct nd_smart_payload {
__u8 alarm_flags;
__u16 temperature;
__u16 ctrl_temperature;
- __u8 reserved1[15];
+ __u32 shutdown_count;
+ __u8 ait_status;
+ __u16 pmic_temperature;
+ __u8 reserved1[8];
__u8 shutdown_state;
__u32 vendor_size;
__u8 vendor_data[92];
4 years, 6 months
转发:开发客户没方向,维护客户没方法,怎么办?
by 邓徨
linux-nvdimm销售精英2天强化训练
Judge(评价)一个人,一个公司是不是优秀,不要看他是不是Harvard(哈佛大学),是不是Stanford(斯坦福大学).不要judge(评价)里面有多少名牌大学毕业生,而要judge(评价)这帮人干活是不是发疯一样干,看他每天下班是不是笑眯眯回家! ―― 阿里巴巴公司马云
培训背景
1.为什么业务员总是找各种理由不出去拜访客户?
2.为什么业务员一听到客户提出拒绝,就轻易放弃?
3.为什么相同的产品,业务员的业绩相差几十倍?
4.为什么业务员总是报怨,不是价格贵,就是强调质量差?
5.为什么业务员总是以打工者的心态,不愿意更多的投入?
6.为什么业务员经常申请政策,但就是没有业绩?
7.为什么报销费用越来越高,但业绩总是不理想?
8.为什么业务员轻易给客户亮出自己的“底牌”?
9.为什么业务员总是卖老产品、低价品,新产品却从不主动推?
10.为什么见到客户却找不到话说?
11.为什么有些员工很有激情,但就是没有业绩?
12.为什么有些老员工总是守着几个大客户,整天无所事事,没有上进心?
13.为什么有些业务员稍有点成绩就骄傲,不把同事放在眼里?
14.为什么有些业务员遇到挫折就逃避,经不起一点打击?
15.开发客户没方向,维护客户没方法,怎么办?
你需要参加王越老师主讲的销售精英2天强化训练!
培训特点
1、2天内完成32个讨论题,15个案例分析题;
2、分组讨论,案例教学,互动式研讨,现场考试;
3、既有抢答,又有辩论,还有现场演练,热烈的课堂氛围;
4、大量课后作业题,将销售管理融入培训现场:
4.1 不仅关注个人学习表现,而且重视团队合作;
4.2 不仅关注2天以内的学习,而且营造2天以后的培训学习氛围;
4.3 不仅考核学员的学习成绩,而且考核学员的参与度,现场PK;
课程大纲
第一章 客户分析与关系处理
思考:
1、面对客户找不到话说,怎么办?二次沟通应该聊些什么?
2、为什么我把所有资料都给客户了,他还说要考虑一下?
3、相同的事,客户不同的人告诉我不一样的要求,听谁的?
4、相同的事,客户同一个人告诉我两次的答案不一样,听哪次的?
5、推荐哪一种产品给客户好?最好的?稍好的?还是够用的?
6、为什么我按客户要求去做,他还是没有选择我们?
第一节、客户以往的经历-判断客户实力
l 客户6种价值分类;
l 根据客户实力做行动计划;
l 如何判断客户的信誉?
第二节 不同群体的影响-找到正确的人
2.1 不同角色分析
n 大客户群体中的5种角色:决策者、采购者、使用者…
n 5种角色关注点焦点是一样的吗?
n 为什么找到总经理,但他却让我找某某人?
n 为什么某人明明说这事他说了算,但关键的时刻却起不到作用?
n 为什么会出现第三方陌生人?他们想得到什么?
2.2谁才是正确的人?
n 满足“关键人”的10个条件;
n 不同销售阶段,“说了算”的人是一样的吗?
n 有些“小角色”是否应该单独跟进?
2.3客户内部关系与态度分析
n 竞争对手与客户不同角色的“关系”分析;
n 客户不同角色内部关系的影响;
n 客户不同角色立场分析;
n 客户跟我方观点一致,为什么却不支持我?
n 客户明明支持我,为什么却倒戈转向竞争对手?
n 都处成朋友了,为什么不买的我反而买别人的?
2.4个人与组织的利益
n 明明对组织非常有好处,很多人为什么会反对?
n 对个人的利益体现在哪些方面?
n 为什么采购专员阻挡我见决策人?
第三节 不同阶段的影响-找到正确时间
第四节、自身需求的影响-说对正确的话
4.1 对客户需求要进行确认
n 客户想要的产品,不一定就是实际所需要的;
n 说得与做的不一致;
n 客户的需求是变化的,而不是不变的;
n 不同的人要求不一致;
n 客户理解与销售理解不一致
n 相信证据、发展内线、多次确认、交叉确认、给答案,要答案
4.2 了解客户需求
n 太多的选择会让每家卖点变得模糊化;
n 不要幻想客户会把我们产品与他需求做匹配,以为客户会削足适履;
n 不要超越客户的希望,否则你会很痛苦,不把绝招一次用完;
n 客户需求的5个适当,追求一次到位、稍好、够用还是替代方案?
4.3 了解需求的提问方式
n 无事不登三宝殿,有目的地做好拜访计划;
n 引导客户,首先要控制谈话的方向、节奏、内容;
n 不要把猜测当成事实,“谈”的是什么?“判”是由谁判?
n 哪6大类问题不可以问?
n 提问时的3不谈,4不讲;
第五节、不同竞品的影响-了解竞争对手
5.1 为什么要了解情况对手?
n 两个客户之间最大的区别在哪里?
n 客户有哪些购买压力?
n 销售人员第一思维是战争思维,知己知彼,情报最重要;
n 没有比较,就没有价值高低之分;
n 不要过渡关注竞争,而忽视客户的需求;
5.2 竞品对我方采用的3种策略;
5.3 四种竞争情形分析;
六、发展“线人”
n 没有线人帮助,相当于盲人摸象;
n 满足线人的4个条件;
n 线人为什么会帮我?
n 需要线人提供哪些帮助?
第二章 如何正确推荐产品
思考:
1、为什么我满足客户所提出的要求,客户却还需要考虑一下?
2、为什么客户不相信我质量与服务的承诺?
3、面对客户提出高要求,我满足不了怎么办?
4、如何推荐产品才能让客户感觉到我们跟别人不一样?
第一节 为什么需要我们正确地推荐产品?
1、客户往往对自己深层次的问题并不清楚;
2、客户的提出的要求可能是模糊或抽象,有的仅仅提出方向,不要局限于客户明显的问题;
3、满足客户提出的要求,是引导客户在不同公司之间做比较,而不在我公司做出决策;
第二节 如何帮助客户建立“排他性”的采购标准?
案例:客户关心的是你如何保证你的质量和服务水平
1、产品的功能与客户需要解决的问题要相对应;客户喜欢提供解决方案的人,而不仅提供工具的人;
2、如何给竞争对手业务员设置商务与技术障碍?
3、打仗就是打后勤,推荐产品中常用的32项内容;
第三节 见什么人,说什么话;
不同情况下如何讲?时间、能力、精力、兴趣、文化水平、不同的职位等;
1. 什么情况下偏重于理性说服,打动别人的脑?
2. 什么情况下偏重于情感说服,打动别人的心?
3. 何种情况下只讲优势不讲劣势?
4. 何种情况下即讲优势又讲劣势?
第三章 销售谈判技巧
思考
1、遇到小气、固执、粗鲁、啰嗦、刻薄、吹毛求疵、优柔寡断的客户应对?
2、客户直接挂电话,怎么办?
3、第二次见面,客户对我大发脾气,怎么办?
4、有一个行业,销售人员每天都会遇到大量的拒绝,为什么却没有任何人会沮丧?
5、客户就没有压力吗?知已知彼,客户采购时会有哪些压力?
6、为什么客户在上班时与下班后会表现不同的性格特征?
第一节 客户常用谈判策略分析
1. 虚虚实实真真假假,不会提要求的谈判者绝不是一个合格的谈判者;
2. 对事不对人,你怎么看对对方,对方就会怎么看待你;
3. 不要把客户的拒绝“私有化”;
4. 客户常用的8种操纵技巧;
5. 攻心战、拖延战、车轮战、最后通牒、沉默……
第二节 报价
1. 为什么报了价就没有下文了?
2. 初期是否应该给客户报价?
3. 报价时需要注意的6个事项
第三节 还价
1. 客户还价时的依据有哪些?
2. 客户对还价时的3种反应;
3. 7种还价模式分析;
4. 是否降价的依据有哪些?
5. 什么时候给客户降价比较合适?
第四节 冲突处理
1. 谈了3小时没有结果,出现僵局应该怎么办?
2. 了解客户采购时的压力;
3. 客户冲突处理的5个区分;
4. 把人和事分开,朋友是朋友,敌人是敌人,喜欢你与不喜欢你与合作无关;
案例:客户提出合理条件,是否我就应该降价?
案例:如何分清客户异议的真实性?
案例:为什么我答应客户提出的所有的条件,反而失去了订单?
案例:客户一再地提出不同的条件,怎么处理?
案例:客户要求我降价时,怎么办?请分8个步骤处理
案例:如何应对一味压价的客户?
案例:当客户上司出现要求降价时,我应该怎么办?
第四章 如何建立良好的客情关系?
案例:销售工作需要疯狂、圆滑、奉承、见人说人话,见鬼说鬼话吗?
案例:生意不成仁义在,咱俩交个朋友,这句话应该由谁说?
案例:邀请客户吃饭,你应该怎么说?
案例:当客户表扬了你,你会怎么回答?
案例:我代表公司的形象,是否我应该表现自己很强势?
案例:为了获得客户的信任,我是否应该花重金包装自己?让自己很完美?
案例:是否需要处处表现自己很有礼貌?
第一节 真实和真诚
礼仪的目的是尊重别人,而不是伪装自己,礼仪中常见的错误;
1、演别人,再好的演技也会搞砸,想做别人的时候,你就会离自己很远;
2、不同的人,需求不同,越改越累,越改越气,只会把自己折磨得心浮气躁,不得人心;
3、以朋友的心态与客户交往,过多的商业化语言、行为、过多的礼仪只会让客户感觉到生硬、距离、排斥、公事公办,没有感情;
4、适当的暴露自己的缺点,越完美的人越不可信;
5、守时,守信,守约,及时传递进程与信息,让客户感觉到可控性;
6、销售不是向客户笑,而是要让客户对自己笑;
第二节 感谢伤害我的人,是因为我自己错了;
1、 一味顺从、推卸责任、理论交谈、谈论小事、无诚信;
2、 当客户说过一段时间、以后、改天、回头、月底时,如何应对?
3、 越完美的人越不可信,自我暴露的四个层次;
4、 做好防错性的服务,签完合同仅仅是合作的开始;
第三节、如何让客户认可我?
1、 销售人员形象与举止,注意自己的形象;
2、 是否具备相似的背景,门当户对;
3、 是否具备相同的认识,道不同不相为盟;
4、 是否“投其所好”,话不投机半句多;
5、 赞美,喜欢对方,我们同样对喜欢我们的人有好感;
先交流感情,增进互信,欲速则不达;
6、 是否对销售人员熟悉,销售最忌讳交浅言深;
初次见面就企图跟别人成为朋友的行为很幼稚;
初次见面就暗示好处的行为很肤浅;
刚见面就强调价格很便宜的行为很愚蠢;
7、 销售人员是否具备亲和力,别人的脸是自己的一面镜子;
成交并不取决于说理,而是取决于心情
第五章 销售目标制定与精准营销
l 如何让所有的人乐意制定销售目标?
l 为什么听到制定目标就很痛苦?
l 为什么总认为目标是虚的?假大空?
l 如何通过目标激发员工无限潜能?
l 如何让目标完成更有操作性与灵活性?
l 设定目标时为什么会出现朝令夕改?
第一节 目标设定的好处
l 盘点所有的资源(新老客户、渠道、区域等);
l 寻找新的业绩突破方法;
l 目标制定越细,成功几率越大;
l 重新梳理自己的能力;
l 总结成功的经验
第二节 销售目标分解与达成
1. 销售目标等于考核目标吗?
2. 完成销售目标的41个方法
3. 实现目标的方法越多,成功率越大;
4. 如何设定目标的优先级?
第三节 精准营销
1. 客户越精准,目标越清晰
2. 明确不同客户群体的需求与痛苦
3. 了解不同客户群的成长性、优先级与本公司竞争优势
4. 找到不同客户群体业务关键点
【时间地点】10月28-29日深圳 11月04-05日北京 11月11-12日上海
【参加对象】 总经理、销售总监、区域经理、销售经理、业务代表、销售培训专员等。
【学习费用】2800元/1人
报名咨询电话:0755-61288035 010-51661863 021-31261580
在线咨询 QQ:6983436 手机:18890700600 (微信同号) 赵军
(在线报名请回复,课程名称+公司名称+参会人全名+联系方式 至QQ信箱)
讲师介绍:王越 老师
l 销售团队管理咨询师、销售培训讲师;
l 曾任可口可乐(中国)公司业务经理;
l阿里巴巴(中国)网络技术有限公司业务经理;
l 清华大学.南京大学EMBA特邀培训讲师;
l新加坡莱佛士学院特约讲师;
l 2000年至今一直从事销售与业务员激励与训练工作,培训学员超4万人次,曾每月疯狂上门拜访100家以上的客户,半军事化的销售职业生涯,高强度的工作压力,全面系统的受训经历,积累了丰富的客户收集、销售谈判、客户服务、自我激励的经验,在公司曾获“悍将杯”榜眼。
【曾经培训过的部份客户】
华为公司/立邦漆业/太平保险/欧普照明/可口可乐/扬子石化/飞利浦/百度/中国移动/北京东信北邮/中国联通/成都通发集团/携程网络/广州方圆房产/深圳南海酒店/桂林三金药业/三一重工/深圳宝德集团/义乌邮政局/广西水电工程局/重庆煤科院/深圳特发股份/北京曲美家私/九阳电器/珠港机场/巢湖邮政/济南邮政/南京医药总公司/国美电器/雨润集团/中国一拖集团能源分公司/重庆科创学院/
4 years, 6 months
Wingate Dunross: Leaders of Executive Search
by Nicholas Meyler
Dear Entrepreneurs/VCs, Hiring Principals, Fellow Scientists/Engineers and HR People:
Are you, or your Company, currently trying to fill a particularly challenging yet vital position?
Nothing is more valuable to a Corporation than 'Human Capital', and a top Recruiter can save you and your company both time and money by filling a key position quickly, without the expenditure of countless man-hours wasted on a futile effort. Enlisting a wise consultative/collaborative Recruiter with an Engineering degree to your side can be a huge advantage, achieving rapid connections with a superior echelon of candidates; so is having a Recruiter whose research skills were formed and honed at one of the top-ranked academic departments in the World.
I offer both qualities, and even provide 'no-risk' guarantees of satisfaction on ALL retained searches. Whether your search needs are for junior positions or top-level senior scientists with hundreds of patents, I can demonstrate a track-record of prior success. Please contact me if you have a hiring need that requires special insight, dedication and intelligence to resolve.
Best Regards and Thank You,
Nicholas Meyler
GM/President, Technology
Wingate Dunross Associates, Inc.
ph (818)597-3200 ext. 211
nickm(a)wdsearch.com
Partial List of Successfully-Completed Engineering Searches:
3D Printing Mechanical Engineer at IrOs LLC
Analytical Chemist at NanoH2O
Board of Scientific Advisors Member at QSI Nanotech
Business Development Manager at Koch-Knight
CEO at RSET Technologies
CEO/COO at Eutricity
CEO/VP Sales and Marketing at Opta
Chief Chemical Engineer at CoolPlanet Biofuels
Chief Product Officer at Nexa3D
CTO at Unidym
Director of Nonvolatile Memory Business Development at Nanosys
Director of Quantum Computational Chemistry at Nanostellar
Director of Technical Marketing at Analogix
Director of Technical Sales at Bitboys
Director of Western Region Sales at S3
Director of WW Sales at NanoInk
DRAM Marketing Manager at Mitsubishi
Electrical Equipment Engineer at Diamond Foundry
Executive VP at Chroma Energy
Field Applications Engineer (Optical Ethernet) at TE Connectivity
Field Applications Engineer at ATI
Field Applications Engineer at Cyrix
Field Applications Engineer at Genesis Microchip
Field Applications Engineer at MediaQ
Field Applications Engineer at NanoH2O
Field Applications Engineer at Weitek
Machine-Vision Scientist at TE Connectivity
Materials Scientist/Rheologist at IrOs LLC
Microfluidics Scientist at Bio-Rad Laboratories
Principle Systems Architect
QLEDs Device Physicist at NanoPhotonica
Senior CMOS Process Integration Engineer at Nantero
Senior Scientist High-Temp Materials at Morgan AM&T
Technical Marketing Manager at ATI
Technical Marketing Manager at Auravision
Technical Marketing Manager at C-Cube Microsystems
VP Business Development at MicroOptical Corp
VP Business Development at Ubiquitous Energy
VP of Chemical Engineering at Nantero
VP Intellectual Property and Licensing at Nantero
VP of Government Business Development at Nantero/Lockheed
VP of WW PR/Marcomm at 3Dfx
VP of WW Sales and Marketing at 3Dfx
VP Products at Unidym
VP Sales and Marketing at Memsic
VP Sales and Marketing at Millennial.net
Selected Accomplishments:
10 retained software placements at Rasna (3rd fastest-growing startup in the Nation, later sold to PTC for $500 million). My first retained search (1989) identified a candidate from a graduate program at RPI with studies in Differential Geometry in under two weeks, who accepted the job and spent 12 years with the company rising to VP status. No other search firms in the World had been able to produce any candidates at all for several months prior to my work.
21 placements at Nantero (featured on the cover of Scientific American as revolutionary nanotechnology, half of company acquired by Lockheed Martin). I am a proud shareholder, as well. Yes, we do accept stock options as fees, if desired...
4 placements at NanoH2O (sold to LG Chem for $200 million)
10 retained placements at MicroDisplay, Inc. (miniature high-res LCD chips)
12 placements at TE Connectivity (world’s leading connectivity company)
Placed prolific Inventor with 391 granted patents and 356 patent applications still in process (extracted from Micron) with a $1million sign-on bonus. He led company to $billion+ revenues by solving key production issues.
Placed prolific Inventor with 170 patents in conductive ink chemistry, etc. (extracted from Xerox)
http://app.streamsend.com/private/u4Kt/nKR/rPOzpjo/unsubscribe/29848761
4 years, 6 months
[bug report] libnvdimm: clear the internal poison_list when clearing badblocks
by Dan Carpenter
Hello Vishal Verma,
The patch e046114af5fc: "libnvdimm: clear the internal poison_list
when clearing badblocks" from Sep 30, 2016, leads to the following
static checker warning:
drivers/nvdimm/core.c:601 nvdimm_forget_poison()
warn: potential integer overflow from user 'start + len'
drivers/nvdimm/core.c
597 void nvdimm_forget_poison(struct nvdimm_bus *nvdimm_bus, phys_addr_t start,
598 unsigned int len)
599 {
600 struct list_head *poison_list = &nvdimm_bus->poison_list;
601 u64 clr_end = start + len - 1;
^^^^^^^^^^^
Thes come from the __nd_ioctl() and it looks like they haven't been
checked before we call this function. It's hard for me to read this
function well enough that I can say for sure the overflow is harmless.
Please review?
602 struct nd_poison *pl, *next;
603
604 spin_lock(&nvdimm_bus->poison_lock);
605 WARN_ON_ONCE(list_empty(poison_list));
606
607 /*
608 * [start, clr_end] is the poison interval being cleared.
609 * [pl->start, pl_end] is the poison_list entry we're comparing
610 * the above interval against. The poison list entry may need
611 * to be modified (update either start or length), deleted, or
612 * split into two based on the overlap characteristics
613 */
614
615 list_for_each_entry_safe(pl, next, poison_list, list) {
616 u64 pl_end = pl->start + pl->length - 1;
617
618 /* Skip intervals with no intersection */
619 if (pl_end < start)
620 continue;
621 if (pl->start > clr_end)
622 continue;
623 /* Delete completely overlapped poison entries */
624 if ((pl->start >= start) && (pl_end <= clr_end)) {
625 list_del(&pl->list);
regards,
dan carpenter
4 years, 6 months
Enabling peer to peer device transactions for PCIe devices
by Deucher, Alexander
This is certainly not the first time this has been brought up, but I'd like to try and get some consensus on the best way to move this forward. Allowing devices to talk directly improves performance and reduces latency by avoiding the use of staging buffers in system memory. Also in cases where both devices are behind a switch, it avoids the CPU entirely. Most current APIs (DirectGMA, PeerDirect, CUDA, HSA) that deal with this are pointer based. Ideally we'd be able to take a CPU virtual address and be able to get to a physical address taking into account IOMMUs, etc. Having struct pages for the memory would allow it to work more generally and wouldn't require as much explicit support in drivers that wanted to use it.
Some use cases:
1. Storage devices streaming directly to GPU device memory
2. GPU device memory to GPU device memory streaming
3. DVB/V4L/SDI devices streaming directly to GPU device memory
4. DVB/V4L/SDI devices streaming directly to storage devices
Here is a relatively simple example of how this could work for testing. This is obviously not a complete solution.
- Device memory will be registered with Linux memory sub-system by created corresponding struct page structures for device memory
- get_user_pages_fast() will return corresponding struct pages when CPU address points to the device memory
- put_page() will deal with struct pages for device memory
Previously proposed solutions and related proposals:
1.P2P DMA
DMA-API/PCI map_peer_resource support for peer-to-peer (http://www.spinics.net/lists/linux-pci/msg44560.html)
Pros: Low impact, already largely reviewed.
Cons: requires explicit support in all drivers that want to support it, doesn't handle S/G in device memory.
2. ZONE_DEVICE IO
Direct I/O and DMA for persistent memory (https://lwn.net/Articles/672457/)
Add support for ZONE_DEVICE IO memory with struct pages. (https://patchwork.kernel.org/patch/8583221/)
Pro: Doesn't waste system memory for ZONE metadata
Cons: CPU access to ZONE metadata slow, may be lost, corrupted on device reset.
3. DMA-BUF
RDMA subsystem DMA-BUF support (http://www.spinics.net/lists/linux-rdma/msg38748.html)
Pros: uses existing dma-buf interface
Cons: dma-buf is handle based, requires explicit dma-buf support in drivers.
4. iopmem
iopmem : A block device for PCIe memory (https://lwn.net/Articles/703895/)
5. HMM
Heterogeneous Memory Management (http://lkml.iu.edu/hypermail/linux/kernel/1611.2/02473.html)
6. Some new mmap-like interface that takes a userptr and a length and returns a dma-buf and offset?
Alex
4 years, 6 months