2、当客户说过一段时间、以后、改天、回头、月底时,如何应对?

2016-09-19 Thread 2、当客户说过一段时间、以后、改天、回头、月底时,如何应对?先生
销售精英2天强化训练

【时间地点】 2016年  09月24-25日上海10月15-16日深圳11月05-06日上海 
 11月19-20日北京11月26-27日深圳12月17-18日上海 


Judge(评价)一个人,一个公司是不是优秀,不要看他是不是Harvard(哈佛大学),是不是Stanford(斯坦福大学).不要judge(评价)里面有多少名牌大学毕业生,而要judge(评价)这帮人干活是不是发疯一样干,看他每天下班是不是笑眯眯回家!
——阿里巴巴公司马云


——课程简介

第一章客户需求分析
思考:
1、面对客户找不到话说,怎么办?二次沟通应该聊些什么?
2、为什么我把所有资料都给客户了,他还说要考虑一下?
3、同一件事,客户不同的人告诉我不一样的要求,听谁的?
4、同一件事,客户同一个人告诉我两次的答案不一样,听哪次的?
5、推荐哪一种产品给客户好?最好的?稍好的?还是够用的?
4、为什么我按客户要求去做,他还是没有选择我们?
5、不同的客户,我应该如何应对?
6、忠诚的客户应该如何培养?

第一节、为什么要对客户需求进行分析?
1、客户初次告诉我们的信息往往是有所保留的;
2、客户想要的产品,不一定就是实际所需要的;
3、客户不缺少产品信息,困惑的是自己如何选择; 
4、客户购买决定是比较出来的,没有比较,产品就没有价值;
5、销售人员第一思想是战争思想,情报最重要;
6、未来的送货员,联络员,报价员将被淘汰;

第二节、如何做好客户需求分析?
一、基本要求:
1.无事不登三宝殿,有目的地做好拜访计划;
2.引导客户,首先要控制谈话的方向、节奏、内容;
3.从讲产品的“卖点”转变到讲客户的“买点”
4.好的,不一定是最适合的,最合适的才是最好的;
5.不要把猜测当成事实,“谈”的是什么?“判”是由谁判?
6.讨论:客户说价格太贵,代表哪15种不同的意思?

二、需求分析要点:
1.了解客户的4种期望目标;
2.了解客户采购的5个适当;
3.判断谁是关键人的8个依据;
4.哪6大类问题不可以问? 要表达别人听得懂的话;
5.提问注意的“3不谈”,“4不讲”;
6.客户需求分析手册制定的6个步骤;
?找对方向,事半功倍,为什么找这个客户?
?时间没对,努力白费,为什么这个时候找?
?找对人,说对话,为什么找这个人? 
?为什么推荐这个产品?给客户需要的,而不是自己想给的; 
?为什么给这样的服务? 客户看重不是产品,而是使用价值;
?为什么报这个价? 在客户的预算与同行之间找到平衡;
7.为什么还这个价?关注竞争对手,调整自己的策略;

第二章  如何正确推荐产品
思考:
1、为什么我满足客户所提出的要求,客户却还需要考虑一下?
2、为什么客户不相信我质量与服务的承诺?
3、面对客户提出高端产品的要求,而我只有低端产品,怎么办?
4、如何推荐产品才能让客户感觉到我们跟别人不一样;

第一节 为什么需要我们正确地推荐产品?
1、客户往往对自己深层次的问题并不清楚;
2、客户的提出的要求可能是模糊或抽象,有的仅仅提出方向,不要局限于客户明显的问题,头痛医头,脚痛医脚;
3、客户往往会以我们竞品给他的条件要求我们;
4、满足客户提出的要求,是引导客户在不同公司之间做比较,而不在我公司做出决策;

第二节 如何帮助客户建立“排他性”的采购标准?
案例:客户关心的是你如何保证你的质量和服务水平
1、打仗就是打后勤,推荐产品中常用的34项内容;
2、产品的功能与客户需要解决的问题要相对应;客户喜欢提供解决方案的人,而不仅提供工具的人;
3、如何给竞争对手业务员设置障碍?

第三节  见什么人,说什么话;
不同情况下如何讲?时间、能力、精力、兴趣、文化水平、不同的职位等;
1. 什么情况下偏重于理性说服,打动别人的脑?
2. 什么情况下偏重于情感说服,打动别人的心?
3. 何种情况下只讲优势不讲劣势?
4. 何种情况下即讲优势又讲劣势?

第三章如何有效处理异议
思考
1、遇到小气、固执、粗鲁、啰嗦、刻薄、吹毛求疵、优柔寡断的客户应对?
2、客户直接挂电话,怎么办?
3、第二次见面,客户对我大发脾气,怎么办?
4、有一个行业,销售人员每天都会遇到大量的拒绝,为什么却没有任何人会沮丧? 
5、客户就没有压力吗?知已知彼,客户采购时会有哪些压力?
6、为什么客户在上班时与下班后会表现不同的性格特征?

第一节:买卖双方的心情分析
1、如果一方比另一方更主动、更积极追求合作,则后者称为潜在客户 
2、卖方知道某价一定不能卖,但买方不知道什么价不能买;
3、当卖方表现自己很想卖,买方会表现自己不想买;
4、买方还的价,并不一定是他认为商品就应该值这个价;
5、付钱之前,买方占优势,之后,卖方占优势;

第二节、理解客户购买时的心态;
1、客户谈判时常用7种试探技巧分析;
2、客户态度非常好,就是不下订单,为什么?
3、为什么有些客户让我们感觉高高在上,花钱是大爷?难道他们素质真的差?
4、客户自身会有哪6个压力?
案例:客户提出合理条件,是否我就应该降价?
案例:如何分清客户异议的真实性?
案例:当谈判出现僵局时怎么办?
案例:为什么我答应客户提出的所有的条件,反而失去了订单?
案例:客户一再地提出不同的条件,怎么处理?
案例:客户要求我降价时,怎么办?请分8个步骤处理

第三节 客户异议处理的5个区分
1、要区分“第一” 还是“唯一”
2、对客户要求的真伪进行鉴别;
3、要区分“情绪”还是“行为”
4、区分“假想”还是“事实”
5、区别问题的轻重,缓急;

第四章  如何建立良好的客情关系?
案例:销售工作需要疯狂、圆滑、奉承、见人说人话,见鬼说鬼话吗?
案例:生意不成仁义在,咱俩交个朋友,这句话应该由谁说?
案例:邀请客户吃饭,你应该怎么说?
案例:当客户表扬了你,你会怎么回答?
案例:我代表公司的形象,是否我应该表现自己很强势?
案例:为了获得客户的信任,我是否应该花重金包装自己?让自己很完美?
案例:是否需要处处表现自己很有礼貌?
案例:如何与企业高层、政府高层打交道?

第一节 做回真实和真诚的自己,表里如一
礼仪的目的是尊重别人,而不是伪装自己,礼仪中常见的错误;
1、演别人,再好的演技也会搞砸,想做别人的时候,你就会离自己很远;
2、不同的人,需求不同,越改越累,越改越气,只会把自己折磨得心浮气躁,不得人心;
3、以朋友的心态与客户交往,过多的商业化语言、行为、过多的礼仪只会让客户感觉到生硬、距离、排斥、公事公办,没有感情;
4、适当的暴露自己的缺点,越完美的人越不可信;
5、守时,守信,守约,及时传递进程与信息,让客户感觉到可控性;
6、销售不是向客户笑,而是要让客户对自己笑;

第二节 感谢伤害我的人,是因为我自己错了;
1、一味顺从、推卸责任、理论交谈、谈论小事、无诚信;
2、当客户说过一段时间、以后、改天、回头、月底时,如何应对?
3、越完美的人越不可信,自我暴露的四个层次;
4、做好防错性的服务,签完合同仅仅是合作的开始;
?指导客户如何使用; 
?跟踪产品使用的情况; 
?为客户在使用过程中提供指导建议; 
?积极解答客户在使用中提出的问题; 


第四章团队配合
思考:
1.团队配合的前提是什么?是否任意两个人在一起都会有团队精神?
2.团队配合中为什么会出现扯皮的现象?
3.为什么公司花那么高成本让大家加深感情,但有些人之间还是有隔阂?
4.业绩好的人影响业绩差的人容易还是业绩差的影响业绩好的容易?
5.统一底薪好?还是差别化底薪好?如何让大家都觉得公平?
6.为什么有能力的不听话,听话的却没能力?
7.为什么有些人总是不按我要求的方法去做?
8.面对业绩总是很差的员工,到底是留还是开?

第一节团队配合的重要性
1.优秀的业务员业绩往往是普通的几十甚至上百倍;
2.提高成交的效率,不要杀敌一千,而自损八百;
3.优秀业务员缺时间,业绩普通的业务员缺能力,扬长避短,人尽其才;
4.把人力资源效益利用最大化;
5.打造完美的团队,让成员的缺点相互抵消;

第二节,如何开展团队配合
第一、能力互补
1.关注员工的能力,不要把未来寄托在员工未知的潜能上;
2.不要把员工塑造成同一类型的人,不把专才当全才用;
3.团队以能为本,销售岗位常见的14项技能;
4.售前、售中、售后人员要求与如何搭配?
5.案例:新员工有激情,但能力不足,老员工有能力,但激情不足,怎么办?

第二、利益关联
1.为什么成员会相互冷漠、互不关心、彼此封锁信息和资源?
2.为什么团队成员把团队的事不当回事?
3.如何才能让团队成员真心的为优秀的成员而高兴?
4.开除业绩差的员工,其他成员缺乏安全感怎么办?
5.如何才能让团队自动自发的努力工作?

第三节、不同客户喜欢不同风格的销售人员
1、 销售人员形象与举止,注意自己的形象;
2、 是否具备相似的背景,门当户对;
3、 是否具备相同的认识,道不同不相为盟;
4、 是否“投其所好”,话不投机半句多;
5、 赞美,喜欢对方,我们同样对喜欢我们的人有好感;
先交流感情,增进互信,欲速则不达;
6、 是否对销售人员熟悉,销售最忌讳交浅言深;
初次见面就企图跟别人成为朋友的行为很幼稚;
初次见面就暗示好处的行为很肤浅;
刚见面就强调价格很便宜的行为很愚蠢;
7、 销售人员是否具备亲和力,别人的脸是自己的一面镜子;
成交并不取决于说理,而是取决于心情
8、 销售人员是否值得信赖。

第六章  新客户开发
案例:为什么客户一开始很有兴趣,但迟迟不下单?
案例:前天明明说不买的客户居然今天却买了,客户的话能相信吗?
案例:客户答应买我司的产品,却突然变卦买别人的了,为什么?
案例:为什么我们会买自己没有兴趣的而且并不需要的产品?
一、客户是根据自己所投入的精力、金钱来确定自己的态度;
二、如何才能引导客户作自我说服?
1.不要轻易给客户下结论,谁会买,谁不会买
2.态度上的变化叫说服,行为上的变化叫接受;
3.我们都喜欢为我们自己的行为找理由,却不善于做我们已找到理由的事;
4.客户是发现了自己的需求,“发现”的依据是自己的行为; 
5.案例:合同签订后,应该问哪4句话,提升客户忠诚度?

第七章 自我激励
1.做销售工作赚钱最快,且最容易得到老板的重视、同事的尊重;
2.不要把第一次见面看成最后一次,工作要积极但不要着急;
3.不是成功太慢,而是放弃太快,钱是给内行的人赚的;
4.不要报着试试看的心态,企图一夜暴富的投机心态让客户反感;
5.不是有希望才坚持,而是坚持了才有希望; 
6.付出才会拥有,而不是拥有才付出;做了才会,而不是会了才做;
7.好工作是做出来的,不是找出来的,不要把自己托付给公司,而要独立成长;
8.尝试不同的工作方法,而不是多年重复使用一种方式,具备试错的精神;
9.工作可以出错,但不可以不做,世界上最危险的莫过于原地不动;
10.不要把未来寄托在自己一无所知的行业上,做好目前的工作;

【培训特点】
1.分组讨论,训练为主,互动式教学;2次现场考试;
2.真实案例分析,大量课后作业题,既有抢答,又有辩论,还有现场演练,热烈的课堂氛围;
3.将销售管理融入培训现场:
   3.1  不仅关注个人学习表现,而且重视团队合作;
   3.2  不仅关注2天以内的学习,而且营造2天以后的培训学习氛围;
   3.3  不仅考核个人得分,而且考核团队得分;不仅考核学员的学习成绩,而且考核学员学习的参与度;


【讲师介绍】 王老师
 销售团队管理咨询师、销售培训讲师;
 曾任可口可乐(中国)公司业务经理;阿里巴巴(中国)网络技术有限公司业务经理;
 清华大学.南京大学EMBA特邀培训讲师;新加坡莱佛士学院特约讲师;
 

Re: [ndctl PATCH] ndctl: bash completion for {enable,disable}-dimm commands

2016-09-19 Thread Vishal Verma
On 09/19, Vishal Verma wrote:
> Add bash completion for the two new commands. Don't add a "-i" by
> default in __ndctl_get_dimms, instead specift "-i" manually where needed

s/specifit/specify/

> (everywhere except the completion for disable-dimm)
> 
> Signed-off-by: Vishal Verma 
> ---
>  contrib/ndctl | 13 +
>  1 file changed, 9 insertions(+), 4 deletions(-)
> 
___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


[ndctl PATCH] ndctl: bash completion for {enable, disable}-dimm commands

2016-09-19 Thread Vishal Verma
Add bash completion for the two new commands. Don't add a "-i" by
default in __ndctl_get_dimms, instead specift "-i" manually where needed
(everywhere except the completion for disable-dimm)

Signed-off-by: Vishal Verma 
---
 contrib/ndctl | 13 +
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/contrib/ndctl b/contrib/ndctl
index 160a9dc..2c04504 100755
--- a/contrib/ndctl
+++ b/contrib/ndctl
@@ -127,8 +127,7 @@ __ndctl_get_ns()
 
 __ndctl_get_dimms()
 {
-   # when listing dimms, always list idle ones too
-   opts="--dimms -i $*"
+   opts="--dimms $*"
[ -n "$bus_filter" ] && opts="$opts --bus=$bus_filter"
echo "$(ndctl list $opts | grep -E "^\s*\"dev\":" | cut -d\" -f4)"
 }
@@ -148,7 +147,7 @@ __ndctl_comp_options()
opts=$(__ndctl_get_regions)
;;
--dimm)
-   opts=$(__ndctl_get_dimms)
+   opts=$(__ndctl_get_dimms -i)
;;
--namespace)
opts=$(__ndctl_get_ns)
@@ -201,10 +200,16 @@ __ndctl_comp_non_option_args()
disable-region)
opts="$(__ndctl_get_regions) all"
;;
+   enable-dimm)
+   opts="$(__ndctl_get_dimms -i) all"
+   ;;
+   disable-dimm)
+   opts="$(__ndctl_get_dimms) all"
+   ;;
read-labels)
;&
zero-labels)
-   opts="$(__ndctl_get_dimms) all"
+   opts="$(__ndctl_get_dimms -i) all"
;;
*)
return
-- 
2.7.4

___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


[ndctl PATCH] ndctl: fix disable-dimm error message

2016-09-19 Thread Dan Williams
cmd_disable_dimm() expects a negative number for an error, otherwise we
end up reporting:

# ndctl disable-dimm nmem1
nmem1 is active, skipping...
disabled 16 dimms

...instead of:

# ndctl disable-dimm nmem1
nmem1 is active, skipping...
error disabling dimms: Device or resource busy

Reported-by: Vishal Verma 
Signed-off-by: Dan Williams 
---
 ndctl/builtin-xable-dimm.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ndctl/builtin-xable-dimm.c b/ndctl/builtin-xable-dimm.c
index 4bdbc7f8eea3..f0d298837aeb 100644
--- a/ndctl/builtin-xable-dimm.c
+++ b/ndctl/builtin-xable-dimm.c
@@ -67,7 +67,7 @@ static int do_xable_dimm(const char *dimm_arg,
 
rc = success;
if (!success && skip)
-   rc = EBUSY;
+   rc = -EBUSY;
  out:
dimm_bus = NULL;
return rc;

___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


[ndctl PATCH] build: fix recommended build procedure

2016-09-19 Thread Dan Williams
Hideaki Kimura reports that the default build instructions do not result
in a usable build.

$ ndctl --version
ndctl: error while loading shared libraries: libndctl.so.6: cannot
open shared object file: No such file or directory

Use the default recommended configure options from autogen.sh.

Reported-by: Hideaki Kimura 
Signed-off-by: Dan Williams 
---
 README.md |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 7256c2f15e20..e9dec67a0ea2 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ sub-system in the Linux kernel
 Build
 =
 `./autogen.sh`  
-`./configure --enable-local`  
+`./configure CFLAGS='-g -O0' --prefix=/usr --sysconfdir=/etc 
--libdir=/usr/lib64`  
 `make`  
 `make check`  
 `sudo make install`  

___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


Re: [ndctl PATCH v3 0/4] ndctl: add support for HPE type N SMART health data

2016-09-19 Thread Dan Williams
On Fri, Sep 16, 2016 at 1:10 PM, Brian Boylston  wrote:
> This set of patches adds support for the HPE SMART DSM functions and enables
> ndctl to report DIMM health data for HPE type N NVDIMMs.  The relevant
> firmware interfaces are described in [1].
>
> The first patch virtualizes the ndctl_cmd_smart*() family of libndctl
> interfaces into a set of ndctl_smart_ops, allowing runtime implementation
> differentiation depending on the firmware support provided by a DIMM.
>
> The second and third patches add miscellaneous pieces needed for the
> final patch:
>
> The fourth patch adds a set of ndctl_smart_ops for the HPE1 DSM family,
> based on the firmware interfaces defined in [1].  These ndctl_smart_ops
> translate the HPE1 DSM output to match the interface of the existing
> Intel DSM-inspired smart_ops.  This delivers health reporting parity for
> HPE type N NVDIMMs, however:
>
> When evaluating this ndctl_smart_ops approach, please consider our goal of
> adding JSON exports for some of the additional health data defined in [1].
> I expect this would entail adding additional accessor functions to
> ndctl_smart_ops, but it's not clear whether or how to extend the existing
> get_flags()/check flags/get_data() model used by util_dimm_health_to_json().
>
> If you'd like to test these changes, note the following:
>
> . Some of the DSM functions for HPE type N NVDIMMs, including the ones used
>   by this patch, require the acpi_ipmi kernel module to be loaded, and you
>   may need to manually modprobe it.
>
> . Without [2], you'll need to include '--idle' in your ndctl invocation as
>   ndctl will consider type Ns to be disabled and will otherwise omit them.
>
> . Without [3], "alarm_temperature" and "alarm_spares" will be inaccurate.
>
> [1] 
> https://github.com/HewlettPackard/hpe-nvm/raw/master/Documentation/NFIT_DSM_DDR4_NVDIMM-N_v84s.pdf
> [2] https://lists.01.org/pipermail/linux-nvdimm/2016-August/006619.html
> [3] https://lists.01.org/pipermail/linux-nvdimm/2016-September/006810.html
>
> Changes in v3:
>   - Dropped the smart_dimm_op() macro and open coded
> ndctl_dimm_cmd_new_smart() and ndctl_dimm_cmd_new_smart_threshold().
> (suggested by Dan)
>   - Do not fail add_dimm() if the read of nfit/commands fails, just set
> dimm->dsm_family to -1 instead (suggested by Dan).  As part of this,
> I also moved the read to after the has_nfit() check.
>   - Added missing bibliography to the commit message for the last patch.
>   - I realized that v2 wouldn't compile if HAS_SMART was not 1, so I
> changed intel_smart_ops and hpe1_smart_ops into pointers and set them
> to NULL if HAS_SMART != 1.  They are const because that seems to
> avoid compiler warnings about unused variables in cases where
> libndctl-private.h is included by something other than libndctl.c.
>
> Changes in v2:
>   New approach: taught libndctl how to translate between the HPE1 DSM
>   family and the existing ndctl_cmd_smart*() libndctl interfaces
>   (as suggested by Dan).
>
> Brian Boylston (4):
>   libndctl: introduce ndctl_smart_ops
>   libndctl: record dsm family in add_dimm()
>   libndctl: enable ND_CMD_CALL
>   libndctl: add support for the HPE1 family of DSM SMART functions

Thanks, applied and pushed out to the 'pending' branch for ndctl-55.
___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


[ndctl PATCH 6/6] ndctl: fix potential null deref in util_namespace_to_json()

2016-09-19 Thread Dan Williams
Similar to commit 59a9803454ee "util_namespace_to_json: fix potential
null pointer dereference" check that we actually get a btt instance when
the namespace is detected to be in "safe" mode.

Signed-off-by: Dan Williams 
---
 ndctl/util/json.c |2 ++
 1 file changed, 2 insertions(+)

diff --git a/ndctl/util/json.c b/ndctl/util/json.c
index 6b74c240a3f5..82e677c2c7a7 100644
--- a/ndctl/util/json.c
+++ b/ndctl/util/json.c
@@ -179,6 +179,8 @@ struct json_object *util_namespace_to_json(struct 
ndctl_namespace *ndns,
jobj = json_object_new_string("dax");
break;
case NDCTL_NS_MODE_SAFE:
+   if (!btt)
+   goto err;
jobj = json_object_new_string("sector");
size = ndctl_btt_get_size(btt);
break;

___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


[ndctl PATCH 4/6] test, libndctl: fix uninitialized variable usage in check_btt_size()

2016-09-19 Thread Dan Williams
If the namespace size is not one we expect, fail the test.

Signed-off-by: Dan Williams 
---
 test/libndctl.c |2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/libndctl.c b/test/libndctl.c
index e36fe8a4fe6f..a0bf74a9c333 100644
--- a/test/libndctl.c
+++ b/test/libndctl.c
@@ -984,7 +984,7 @@ static int check_btt_size(struct ndctl_btt *btt)
fprintf(stderr, "%s: %s unexpected namespace size: %llx\n",
__func__, ndctl_namespace_get_devname(ndns),
ns_size);
-   break;
+   return -ENXIO;
}
 
expect = expect_table[size_select][sect_select];

___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


[ndctl PATCH 2/6] test, dsm-fail: test get_config_size DSM failures

2016-09-19 Thread Dan Williams
We expect that if the dimm driver fails to enable then any
label-data-dependent regions/namespaces will also fail to enable.

Signed-off-by: Dan Williams 
---
 ndctl/Makefile.am|3 +
 ndctl/builtin-test.c |5 +
 test.h   |1 
 test/Makefile.am |   10 ++
 test/dsm-fail.c  |  220 ++
 5 files changed, 239 insertions(+)
 create mode 100644 test/dsm-fail.c

diff --git a/ndctl/Makefile.am b/ndctl/Makefile.am
index f6cd3f1c235b..63f387b58de9 100644
--- a/ndctl/Makefile.am
+++ b/ndctl/Makefile.am
@@ -34,6 +34,9 @@ ndctl_LDADD =\
 
 if ENABLE_TEST
 ndctl_SOURCES += ../test/libndctl.c \
+../test/dsm-fail.c \
+../util/log.c \
+../util/sysfs.c \
 ../test/dpa-alloc.c \
 ../test/parent-uuid.c \
 ../test/core.c
diff --git a/ndctl/builtin-test.c b/ndctl/builtin-test.c
index d9c5b0f28d6e..d8539a133d10 100644
--- a/ndctl/builtin-test.c
+++ b/ndctl/builtin-test.c
@@ -49,6 +49,11 @@ int cmd_test(int argc, const char **argv, struct ndctl_ctx 
*ctx)
if (rc && rc != 77)
return rc;
 
+   rc = test_dsm_fail(loglevel, test, ctx);
+   fprintf(stderr, "test-dsm-fail: %s\n", result(rc));
+   if (rc && rc != 77)
+   return rc;
+
rc = test_dpa_alloc(loglevel, test, ctx);
fprintf(stderr, "test-dpa-alloc: %s\n", result(rc));
if (rc && rc != 77)
diff --git a/test.h b/test.h
index 2940ac0f7396..bf708f38bfbf 100644
--- a/test.h
+++ b/test.h
@@ -18,6 +18,7 @@ struct ndctl_ctx;
 int test_parent_uuid(int loglevel, struct ndctl_test *test, struct ndctl_ctx 
*ctx);
 int test_dax_directio(int dax_fd, void *dax_addr, off_t offset);
 int test_dpa_alloc(int loglevel, struct ndctl_test *test, struct ndctl_ctx 
*ctx);
+int test_dsm_fail(int loglevel, struct ndctl_test *test, struct ndctl_ctx 
*ctx);
 int test_libndctl(int loglevel, struct ndctl_test *test, struct ndctl_ctx 
*ctx);
 int test_blk_namespaces(int loglevel, struct ndctl_test *test, struct 
ndctl_ctx *ctx);
 int test_pmem_namespaces(int loglevel, struct ndctl_test *test, struct 
ndctl_ctx *ctx);
diff --git a/test/Makefile.am b/test/Makefile.am
index f0240fe5883a..5513f429869f 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -2,6 +2,7 @@ include $(top_srcdir)/Makefile.am.in
 
 TESTS =\
libndctl \
+   dsm-fail \
dpa-alloc \
parent-uuid \
create.sh \
@@ -10,6 +11,7 @@ TESTS =\
 
 check_PROGRAMS =\
libndctl \
+   dsm-fail \
dpa-alloc \
parent-uuid \
dax-errors
@@ -39,6 +41,14 @@ LIBNDCTL_LIB =\
 libndctl_SOURCES = libndctl.c core.c
 libndctl_LDADD = $(LIBNDCTL_LIB) $(UUID_LIBS) $(KMOD_LIBS)
 
+dsm_fail_SOURCES =\
+   dsm-fail.c \
+   core.c \
+   ../util/log.c \
+   ../util/sysfs.c
+
+dsm_fail_LDADD = $(LIBNDCTL_LIB) $(KMOD_LIBS)
+
 blk_ns_SOURCES = blk_namespaces.c core.c
 blk_ns_LDADD = $(LIBNDCTL_LIB) $(KMOD_LIBS)
 
diff --git a/test/dsm-fail.c b/test/dsm-fail.c
new file mode 100644
index ..ca80cef79092
--- /dev/null
+++ b/test/dsm-fail.c
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2014-2016, Intel Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU Lesser General Public License,
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
+ * more details.
+ */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#ifdef HAVE_NDCTL_H
+#include 
+#else
+#include 
+#endif
+#include 
+
+#define DIMM_PATH "/sys/devices/platform/nfit_test.0/nfit_test_dimm/test_dimm0"
+
+static void reset_bus(struct ndctl_bus *bus)
+{
+   struct ndctl_region *region;
+   struct ndctl_dimm *dimm;
+
+   /* disable all regions so that set_config_data commands are permitted */
+   ndctl_region_foreach(bus, region)
+   ndctl_region_disable_invalidate(region);
+
+   ndctl_dimm_foreach(bus, dimm)
+   ndctl_dimm_zero_labels(dimm);
+
+   /* set regions back to their default state */
+   ndctl_region_foreach(bus, region)
+   ndctl_region_enable(region);
+}
+
+static int do_test(struct ndctl_ctx *ctx, struct ndctl_test *test)
+{
+   struct ndctl_bus *bus = ndctl_bus_get_by_provider(ctx, "nfit_test.0");
+   struct ndctl_dimm *dimm, *victim = NULL;
+   char path[1024], buf[SYSFS_ATTR_SIZE];
+   struct ndctl_region *region;
+   struct log_ctx log_ctx;
+   unsigned int handle;
+   int rc, err = 0;
+
+   if (!ndctl_test_attempt(test, KERNEL_VERSION(4, 

[ndctl PATCH 5/6] libdaxctl: fix deref-before-null-check in daxctl_new_region

2016-09-19 Thread Dan Williams
If ->region_path is not set, do not attempt to take its length.

Signed-off-by: Dan Williams 
---
 daxctl/lib/libdaxctl.c |   11 ---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/daxctl/lib/libdaxctl.c b/daxctl/lib/libdaxctl.c
index ecdb99640115..8f1b88e06ac6 100644
--- a/daxctl/lib/libdaxctl.c
+++ b/daxctl/lib/libdaxctl.c
@@ -217,14 +217,19 @@ DAXCTL_EXPORT struct daxctl_region 
*daxctl_new_region(struct daxctl_ctx *ctx,
region->id = id;
region->refcount = 1;
uuid_copy(region->uuid, uuid);
+
region->region_path = strdup(path);
+   if (!region->region_path) {
+   free(region);
+   return NULL;
+   }
+
list_head_init(>devices);
region->buf_len = strlen(region->region_path) + REGION_BUF_SIZE;
region->region_buf = calloc(1, region->buf_len);
-
-   if (!region->region_path || !region->region_buf) {
+   if (!region->region_buf) {
daxctl_region_unref(region);
-   region = NULL;
+   return NULL;
}
 
dbg(ctx, "%s: %s\n", __func__, daxctl_region_get_devname(region));

___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


[ndctl PATCH 1/6] build: build libraries and utilities in separate directories

2016-09-19 Thread Dan Williams
When trying to add an "ndctl test" user of the util/log.c and
util/sysfs.c routines, automake complained about util/log.o being
already built for a library when trying to include it in the utility.
Move the library build into ndctl/lib/ rather than re-using ndctl/.

Signed-off-by: Dan Williams 
---
 Makefile.am|2 +-
 configure.ac   |3 ++-
 daxctl/Makefile.am |   27 ---
 daxctl/lib/Makefile.am |   28 
 ndctl/Makefile.am  |   48 
 ndctl/lib/Makefile.am  |   47 +++
 6 files changed, 78 insertions(+), 77 deletions(-)
 delete mode 100644 daxctl/Makefile.am
 create mode 100644 daxctl/lib/Makefile.am
 create mode 100644 ndctl/lib/Makefile.am

diff --git a/Makefile.am b/Makefile.am
index ce1032e3381d..9eb396639efe 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,7 +1,7 @@
 include Makefile.am.in
 
 ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
-SUBDIRS = . daxctl ndctl
+SUBDIRS = . daxctl/lib ndctl/lib ndctl
 if ENABLE_DOCS
 SUBDIRS += Documentation
 endif
diff --git a/configure.ac b/configure.ac
index 7bc97be9039d..7b4af616cf2b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -260,7 +260,8 @@ AC_SUBST([my_CFLAGS])
 AC_CONFIG_HEADERS(config.h)
 AC_CONFIG_FILES([
 Makefile
-daxctl/Makefile
+daxctl/lib/Makefile
+ndctl/lib/Makefile
 ndctl/Makefile
 test/Makefile
 Documentation/Makefile
diff --git a/daxctl/Makefile.am b/daxctl/Makefile.am
deleted file mode 100644
index 67ae5aed4a18..
--- a/daxctl/Makefile.am
+++ /dev/null
@@ -1,27 +0,0 @@
-include $(top_srcdir)/Makefile.am.in
-
-%.pc: %.pc.in Makefile
-   $(SED_PROCESS)
-
-lib_LTLIBRARIES = lib/libdaxctl.la
-
-lib_libdaxctl_la_SOURCES =\
-   libdaxctl.h \
-   lib/libdaxctl-private.h \
-   ../util/sysfs.c \
-   ../util/sysfs.h \
-   ../util/log.c \
-   ../util/log.h \
-   lib/libdaxctl.c
-
-EXTRA_DIST += lib/libdaxctl.sym
-
-lib_libdaxctl_la_LDFLAGS = $(AM_LDFLAGS) \
-   -version-info 
$(LIBDAXCTL_CURRENT):$(LIBDAXCTL_REVISION):$(LIBDAXCTL_AGE) \
-   -Wl,--version-script=$(top_srcdir)/daxctl/lib/libdaxctl.sym
-lib_libdaxctl_la_DEPENDENCIES = lib/libdaxctl.sym
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = lib/libdaxctl.pc
-EXTRA_DIST += lib/libdaxctl.pc.in
-CLEANFILES += lib/libdaxctl.pc
diff --git a/daxctl/lib/Makefile.am b/daxctl/lib/Makefile.am
new file mode 100644
index ..92783847266a
--- /dev/null
+++ b/daxctl/lib/Makefile.am
@@ -0,0 +1,28 @@
+include $(top_srcdir)/Makefile.am.in
+
+%.pc: %.pc.in Makefile
+   $(SED_PROCESS)
+
+pkginclude_HEADERS = ../libdaxctl.h
+lib_LTLIBRARIES = libdaxctl.la
+
+libdaxctl_la_SOURCES =\
+   ../libdaxctl.h \
+   libdaxctl-private.h \
+   ../../util/sysfs.c \
+   ../../util/sysfs.h \
+   ../../util/log.c \
+   ../../util/log.h \
+   libdaxctl.c
+
+EXTRA_DIST += libdaxctl.sym
+
+libdaxctl_la_LDFLAGS = $(AM_LDFLAGS) \
+   -version-info 
$(LIBDAXCTL_CURRENT):$(LIBDAXCTL_REVISION):$(LIBDAXCTL_AGE) \
+   -Wl,--version-script=$(top_srcdir)/daxctl/lib/libdaxctl.sym
+libdaxctl_la_DEPENDENCIES = libdaxctl.sym
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libdaxctl.pc
+EXTRA_DIST += libdaxctl.pc.in
+CLEANFILES += libdaxctl.pc
diff --git a/ndctl/Makefile.am b/ndctl/Makefile.am
index a84595b0f5e1..f6cd3f1c235b 100644
--- a/ndctl/Makefile.am
+++ b/ndctl/Makefile.am
@@ -1,39 +1,5 @@
 include $(top_srcdir)/Makefile.am.in
 
-BUILT_SOURCES = libndctl.h
-lib/libndctl.h: libndctl.h.in
-   touch $(top_srcdir)/version.m4
-
-%.pc: %.pc.in Makefile
-   $(SED_PROCESS)
-
-pkginclude_HEADERS = libndctl.h
-lib_LTLIBRARIES = lib/libndctl.la
-
-lib_libndctl_la_SOURCES =\
-   libndctl.h \
-   lib/libndctl-private.h \
-   ../util/log.c \
-   ../util/log.h \
-   ../util/sysfs.c \
-   ../util/sysfs.h \
-   lib/libndctl.c
-
-lib_libndctl_la_LIBADD =\
-   ../daxctl/lib/libdaxctl.la \
-   $(UDEV_LIBS) \
-   $(UUID_LIBS) \
-   $(KMOD_LIBS)
-
-if ENABLE_ARS
-lib_libndctl_la_SOURCES += lib/libndctl-ars.c
-endif
-
-if ENABLE_SMART
-lib_libndctl_la_SOURCES += lib/libndctl-smart.c
-lib_libndctl_la_SOURCES += lib/libndctl-hpe1.c
-endif
-
 bin_PROGRAMS = ndctl
 
 ndctl_SOURCES = ndctl.c \
@@ -72,17 +38,3 @@ ndctl_SOURCES += ../test/libndctl.c \
 ../test/parent-uuid.c \
 ../test/core.c
 endif
-
-
-
-EXTRA_DIST += lib/libndctl.sym
-
-lib_libndctl_la_LDFLAGS = $(AM_LDFLAGS) \
-   -version-info $(LIBNDCTL_CURRENT):$(LIBNDCTL_REVISION):$(LIBNDCTL_AGE) \
-   -Wl,--version-script=$(top_srcdir)/ndctl/lib/libndctl.sym
-lib_libndctl_la_DEPENDENCIES = lib/libndctl.sym
-
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = lib/libndctl.pc
-EXTRA_DIST += lib/libndctl.pc.in
-CLEANFILES += lib/libndctl.pc
diff --git 

Re: [PATCH] ndctl: move test/dax-errors buffer to global to avoid gcc optimization

2016-09-19 Thread Dan Williams
On Mon, Sep 19, 2016 at 9:45 AM, Dave Jiang  wrote:
> On 09/18/2016 09:42 AM, Elliott, Robert (Persistent Memory) wrote:
>>
>>
>>> -Original Message-
>>> From: Dave Jiang [mailto:dave.ji...@intel.com]
>>> Sent: Friday, September 16, 2016 12:24 PM
>> ...
>>> Subject: Re: [PATCH] ndctl: move test/dax-errors buffer to global to
>>> avoid gcc optimization
>>>
>>> On 09/15/2016 06:18 PM, Elliott, Robert (Persistent Memory) wrote:

>> 
> Some gcc toolchain are optimizing out the memcpy and this causes
> dax- errors to not trigger the SIG_BUS when doing memcpy on an
> mmap'd buffer.  By moving
> the buffer to a global variable this bypasses the optimization and
> allow the test to work as intended.
>
>> ...
> diff --git a/test/dax-errors.c b/test/dax-errors.c
> index 11d0031..9ea5c91 100644
> --- a/test/dax-errors.c
> +++ b/test/dax-errors.c
> @@ -17,6 +17,8 @@
>
>  static sigjmp_buf sj_env;
>  static int sig_count;
> +/* buf is global in order to avoid gcc memcpy optimization */
> +static void *buf;
>
>  static void sigbus_hdl(int sig, siginfo_t *siginfo, void *ptr)
>  {
> @@ -27,7 +29,7 @@ static void sigbus_hdl(int sig, siginfo_t *siginfo,
> void *ptr)
>
>  static int test_dax_read_err(int fd)
>  {
> -void *base, *buf;
> +void *base;
>  int rc = 0;
>
>  if (fd < 0) {
>

 I've run into that kind of problem before, and found that
 marking *buf as volatile (and leaving it inside the function)
 tends to be honored better by aggressive optimizing compilers
 and linkers.
>>>
>>> Doesn't appear to work. The compiler discards the volatile.
>>>
>>>
>>>   CC   dax-errors.o
>>> dax-errors.c: In function 'test_dax_read_err':
>>> dax-errors.c:66:9: warning: passing argument 1 of 'memcpy' discards
>>> 'volatile' qualifier from pointer target type [-Wdiscarded-
>>> qualifiers]
>>>   memcpy(buf, base, 4096);
>>>  ^~~
>>> In file included from dax-errors.c:8:0:
>>> /usr/include/string.h:42:14: note: expected 'void * restrict' but
>>> argument is of type 'volatile void *'
>>>  extern void *memcpy (void *__restrict __dest, const void *__restrict
>>> __src,
>>>   ^~
>>>   CCLD dax-errors
>>>
>>
>> For this, put volatile to the right of the *:
>> void * volatile buf;
>
> It made the compile warning go away, but it did not prevent the memcpy
> optimization. It still fails unlike when I move the ptr to global.
>
> gcc version 6.1.1 20160621 (Red Hat 6.1.1-3) (GCC)
>
> gcc -DHAVE_CONFIG_H -I. -I..  -include ../config.h
> -DSYSCONFDIR=\""/etc"\" -DLIBEXECDIR=\""/usr/libexec"\"
> -DPREFIX=\""/usr"\" -DNDCTL_MAN_PATH=\""/usr/share/man"\" -I../ndctl/lib
> -I../ndctl -I../   -I/usr/include/uuid -I/usr/include/json-c  -Wall
> -Wchar-subscripts -Wformat-security -Wmissing-declarations
> -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wshadow
> -Wsign-compare -Wstrict-prototypes -Wtype-limits  -fvisibility=hidden
> -ffunction-sections -fdata-sections -g -O2 -MT dax-errors.o -MD -MP -MF
> $depbase.Tpo -c -o dax-errors.o dax-errors.c

I've already applied the "make it global" version.  So we can defer
more "volatile" keyword experiments.
___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


Re: [PATCH] ndctl: move test/dax-errors buffer to global to avoid gcc optimization

2016-09-19 Thread Dave Jiang
On 09/18/2016 09:42 AM, Elliott, Robert (Persistent Memory) wrote:
> 
> 
>> -Original Message-
>> From: Dave Jiang [mailto:dave.ji...@intel.com]
>> Sent: Friday, September 16, 2016 12:24 PM
> ...
>> Subject: Re: [PATCH] ndctl: move test/dax-errors buffer to global to
>> avoid gcc optimization
>>
>> On 09/15/2016 06:18 PM, Elliott, Robert (Persistent Memory) wrote:
>>>
> 
 Some gcc toolchain are optimizing out the memcpy and this causes
 dax- errors to not trigger the SIG_BUS when doing memcpy on an
 mmap'd buffer.  By moving
 the buffer to a global variable this bypasses the optimization and
 allow the test to work as intended.

> ...
 diff --git a/test/dax-errors.c b/test/dax-errors.c
 index 11d0031..9ea5c91 100644
 --- a/test/dax-errors.c
 +++ b/test/dax-errors.c
 @@ -17,6 +17,8 @@

  static sigjmp_buf sj_env;
  static int sig_count;
 +/* buf is global in order to avoid gcc memcpy optimization */
 +static void *buf;

  static void sigbus_hdl(int sig, siginfo_t *siginfo, void *ptr)
  {
 @@ -27,7 +29,7 @@ static void sigbus_hdl(int sig, siginfo_t *siginfo,
 void *ptr)

  static int test_dax_read_err(int fd)
  {
 -void *base, *buf;
 +void *base;
  int rc = 0;

  if (fd < 0) {

>>>
>>> I've run into that kind of problem before, and found that
>>> marking *buf as volatile (and leaving it inside the function)
>>> tends to be honored better by aggressive optimizing compilers
>>> and linkers.
>>
>> Doesn't appear to work. The compiler discards the volatile.
>>
>>
>>   CC   dax-errors.o
>> dax-errors.c: In function 'test_dax_read_err':
>> dax-errors.c:66:9: warning: passing argument 1 of 'memcpy' discards
>> 'volatile' qualifier from pointer target type [-Wdiscarded-
>> qualifiers]
>>   memcpy(buf, base, 4096);
>>  ^~~
>> In file included from dax-errors.c:8:0:
>> /usr/include/string.h:42:14: note: expected 'void * restrict' but
>> argument is of type 'volatile void *'
>>  extern void *memcpy (void *__restrict __dest, const void *__restrict
>> __src,
>>   ^~
>>   CCLD dax-errors
>>
> 
> For this, put volatile to the right of the *:
> void * volatile buf;

It made the compile warning go away, but it did not prevent the memcpy
optimization. It still fails unlike when I move the ptr to global.

gcc version 6.1.1 20160621 (Red Hat 6.1.1-3) (GCC)

gcc -DHAVE_CONFIG_H -I. -I..  -include ../config.h
-DSYSCONFDIR=\""/etc"\" -DLIBEXECDIR=\""/usr/libexec"\"
-DPREFIX=\""/usr"\" -DNDCTL_MAN_PATH=\""/usr/share/man"\" -I../ndctl/lib
-I../ndctl -I../   -I/usr/include/uuid -I/usr/include/json-c  -Wall
-Wchar-subscripts -Wformat-security -Wmissing-declarations
-Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wshadow
-Wsign-compare -Wstrict-prototypes -Wtype-limits  -fvisibility=hidden
-ffunction-sections -fdata-sections -g -O2 -MT dax-errors.o -MD -MP -MF
$depbase.Tpo -c -o dax-errors.o dax-errors.c

> 
> That means buf (the pointer) is volatile, and the compiler is
> not allowed to optimize away any accesses inside this function.
> When calling another function, it just picks up the value at
> that time; that other function doesn't need to continue treating
> it as special.
> 
> On a little test program, gcc -O2 preserves the call, and -O3
> optimizes away the call unless it is marked volatile like that.
> 
> In comparison:
> volatile void *buf;
> means whatever buf points to is volatile, and all functions to
> which buf is passed must agree.  Accesses to buf itself could
> be optimized away, but any dereferences using it that remain
> must be freshly made.
> 
> memcpy does not promise to treat its buffers that way, so
> triggers compiler warnings or errors if src or dest are pointing
> to volatile data.
> 
> In a test program, I made a mycpy() with volatile * buffer
> arguments, and gcc -O3 does optimize away the call.
> 
> This combination has both properties:
> volatile void * volatile buf;
> 
> 
> ---
> Robert Elliott, HPE Persistent Memory
> 
> 
___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


团队配合的前提是什么?是否任意两个人在一起都会有团队精神?

2016-09-19 Thread 团队配合的前提是什么?是否任意两个人在一起都会有团队精神?先生
销售精英2天强化训练

【时间地点】 2016年  09月24-25日上海10月15-16日深圳11月05-06日上海 
 11月19-20日北京11月26-27日深圳12月17-18日上海 


Judge(评价)一个人,一个公司是不是优秀,不要看他是不是Harvard(哈佛大学),是不是Stanford(斯坦福大学).不要judge(评价)里面有多少名牌大学毕业生,而要judge(评价)这帮人干活是不是发疯一样干,看他每天下班是不是笑眯眯回家!
——阿里巴巴公司马云


——课程简介

第一章客户需求分析
思考:
1、面对客户找不到话说,怎么办?二次沟通应该聊些什么?
2、为什么我把所有资料都给客户了,他还说要考虑一下?
3、同一件事,客户不同的人告诉我不一样的要求,听谁的?
4、同一件事,客户同一个人告诉我两次的答案不一样,听哪次的?
5、推荐哪一种产品给客户好?最好的?稍好的?还是够用的?
4、为什么我按客户要求去做,他还是没有选择我们?
5、不同的客户,我应该如何应对?
6、忠诚的客户应该如何培养?

第一节、为什么要对客户需求进行分析?
1、客户初次告诉我们的信息往往是有所保留的;
2、客户想要的产品,不一定就是实际所需要的;
3、客户不缺少产品信息,困惑的是自己如何选择; 
4、客户购买决定是比较出来的,没有比较,产品就没有价值;
5、销售人员第一思想是战争思想,情报最重要;
6、未来的送货员,联络员,报价员将被淘汰;

第二节、如何做好客户需求分析?
一、基本要求:
1.无事不登三宝殿,有目的地做好拜访计划;
2.引导客户,首先要控制谈话的方向、节奏、内容;
3.从讲产品的“卖点”转变到讲客户的“买点”
4.好的,不一定是最适合的,最合适的才是最好的;
5.不要把猜测当成事实,“谈”的是什么?“判”是由谁判?
6.讨论:客户说价格太贵,代表哪15种不同的意思?

二、需求分析要点:
1.了解客户的4种期望目标;
2.了解客户采购的5个适当;
3.判断谁是关键人的8个依据;
4.哪6大类问题不可以问? 要表达别人听得懂的话;
5.提问注意的“3不谈”,“4不讲”;
6.客户需求分析手册制定的6个步骤;
?找对方向,事半功倍,为什么找这个客户?
?时间没对,努力白费,为什么这个时候找?
?找对人,说对话,为什么找这个人? 
?为什么推荐这个产品?给客户需要的,而不是自己想给的; 
?为什么给这样的服务? 客户看重不是产品,而是使用价值;
?为什么报这个价? 在客户的预算与同行之间找到平衡;
7.为什么还这个价?关注竞争对手,调整自己的策略;

第二章  如何正确推荐产品
思考:
1、为什么我满足客户所提出的要求,客户却还需要考虑一下?
2、为什么客户不相信我质量与服务的承诺?
3、面对客户提出高端产品的要求,而我只有低端产品,怎么办?
4、如何推荐产品才能让客户感觉到我们跟别人不一样;

第一节 为什么需要我们正确地推荐产品?
1、客户往往对自己深层次的问题并不清楚;
2、客户的提出的要求可能是模糊或抽象,有的仅仅提出方向,不要局限于客户明显的问题,头痛医头,脚痛医脚;
3、客户往往会以我们竞品给他的条件要求我们;
4、满足客户提出的要求,是引导客户在不同公司之间做比较,而不在我公司做出决策;

第二节 如何帮助客户建立“排他性”的采购标准?
案例:客户关心的是你如何保证你的质量和服务水平
1、打仗就是打后勤,推荐产品中常用的34项内容;
2、产品的功能与客户需要解决的问题要相对应;客户喜欢提供解决方案的人,而不仅提供工具的人;
3、如何给竞争对手业务员设置障碍?

第三节  见什么人,说什么话;
不同情况下如何讲?时间、能力、精力、兴趣、文化水平、不同的职位等;
1. 什么情况下偏重于理性说服,打动别人的脑?
2. 什么情况下偏重于情感说服,打动别人的心?
3. 何种情况下只讲优势不讲劣势?
4. 何种情况下即讲优势又讲劣势?

第三章如何有效处理异议
思考
1、遇到小气、固执、粗鲁、啰嗦、刻薄、吹毛求疵、优柔寡断的客户应对?
2、客户直接挂电话,怎么办?
3、第二次见面,客户对我大发脾气,怎么办?
4、有一个行业,销售人员每天都会遇到大量的拒绝,为什么却没有任何人会沮丧? 
5、客户就没有压力吗?知已知彼,客户采购时会有哪些压力?
6、为什么客户在上班时与下班后会表现不同的性格特征?

第一节:买卖双方的心情分析
1、如果一方比另一方更主动、更积极追求合作,则后者称为潜在客户 
2、卖方知道某价一定不能卖,但买方不知道什么价不能买;
3、当卖方表现自己很想卖,买方会表现自己不想买;
4、买方还的价,并不一定是他认为商品就应该值这个价;
5、付钱之前,买方占优势,之后,卖方占优势;

第二节、理解客户购买时的心态;
1、客户谈判时常用7种试探技巧分析;
2、客户态度非常好,就是不下订单,为什么?
3、为什么有些客户让我们感觉高高在上,花钱是大爷?难道他们素质真的差?
4、客户自身会有哪6个压力?
案例:客户提出合理条件,是否我就应该降价?
案例:如何分清客户异议的真实性?
案例:当谈判出现僵局时怎么办?
案例:为什么我答应客户提出的所有的条件,反而失去了订单?
案例:客户一再地提出不同的条件,怎么处理?
案例:客户要求我降价时,怎么办?请分8个步骤处理

第三节 客户异议处理的5个区分
1、要区分“第一” 还是“唯一”
2、对客户要求的真伪进行鉴别;
3、要区分“情绪”还是“行为”
4、区分“假想”还是“事实”
5、区别问题的轻重,缓急;

第四章  如何建立良好的客情关系?
案例:销售工作需要疯狂、圆滑、奉承、见人说人话,见鬼说鬼话吗?
案例:生意不成仁义在,咱俩交个朋友,这句话应该由谁说?
案例:邀请客户吃饭,你应该怎么说?
案例:当客户表扬了你,你会怎么回答?
案例:我代表公司的形象,是否我应该表现自己很强势?
案例:为了获得客户的信任,我是否应该花重金包装自己?让自己很完美?
案例:是否需要处处表现自己很有礼貌?
案例:如何与企业高层、政府高层打交道?

第一节 做回真实和真诚的自己,表里如一
礼仪的目的是尊重别人,而不是伪装自己,礼仪中常见的错误;
1、演别人,再好的演技也会搞砸,想做别人的时候,你就会离自己很远;
2、不同的人,需求不同,越改越累,越改越气,只会把自己折磨得心浮气躁,不得人心;
3、以朋友的心态与客户交往,过多的商业化语言、行为、过多的礼仪只会让客户感觉到生硬、距离、排斥、公事公办,没有感情;
4、适当的暴露自己的缺点,越完美的人越不可信;
5、守时,守信,守约,及时传递进程与信息,让客户感觉到可控性;
6、销售不是向客户笑,而是要让客户对自己笑;

第二节 感谢伤害我的人,是因为我自己错了;
1、一味顺从、推卸责任、理论交谈、谈论小事、无诚信;
2、当客户说过一段时间、以后、改天、回头、月底时,如何应对?
3、越完美的人越不可信,自我暴露的四个层次;
4、做好防错性的服务,签完合同仅仅是合作的开始;
?指导客户如何使用; 
?跟踪产品使用的情况; 
?为客户在使用过程中提供指导建议; 
?积极解答客户在使用中提出的问题; 


第四章团队配合
思考:
1.团队配合的前提是什么?是否任意两个人在一起都会有团队精神?
2.团队配合中为什么会出现扯皮的现象?
3.为什么公司花那么高成本让大家加深感情,但有些人之间还是有隔阂?
4.业绩好的人影响业绩差的人容易还是业绩差的影响业绩好的容易?
5.统一底薪好?还是差别化底薪好?如何让大家都觉得公平?
6.为什么有能力的不听话,听话的却没能力?
7.为什么有些人总是不按我要求的方法去做?
8.面对业绩总是很差的员工,到底是留还是开?

第一节团队配合的重要性
1.优秀的业务员业绩往往是普通的几十甚至上百倍;
2.提高成交的效率,不要杀敌一千,而自损八百;
3.优秀业务员缺时间,业绩普通的业务员缺能力,扬长避短,人尽其才;
4.把人力资源效益利用最大化;
5.打造完美的团队,让成员的缺点相互抵消;

第二节,如何开展团队配合
第一、能力互补
1.关注员工的能力,不要把未来寄托在员工未知的潜能上;
2.不要把员工塑造成同一类型的人,不把专才当全才用;
3.团队以能为本,销售岗位常见的14项技能;
4.售前、售中、售后人员要求与如何搭配?
5.案例:新员工有激情,但能力不足,老员工有能力,但激情不足,怎么办?

第二、利益关联
1.为什么成员会相互冷漠、互不关心、彼此封锁信息和资源?
2.为什么团队成员把团队的事不当回事?
3.如何才能让团队成员真心的为优秀的成员而高兴?
4.开除业绩差的员工,其他成员缺乏安全感怎么办?
5.如何才能让团队自动自发的努力工作?

第三节、不同客户喜欢不同风格的销售人员
1、 销售人员形象与举止,注意自己的形象;
2、 是否具备相似的背景,门当户对;
3、 是否具备相同的认识,道不同不相为盟;
4、 是否“投其所好”,话不投机半句多;
5、 赞美,喜欢对方,我们同样对喜欢我们的人有好感;
先交流感情,增进互信,欲速则不达;
6、 是否对销售人员熟悉,销售最忌讳交浅言深;
初次见面就企图跟别人成为朋友的行为很幼稚;
初次见面就暗示好处的行为很肤浅;
刚见面就强调价格很便宜的行为很愚蠢;
7、 销售人员是否具备亲和力,别人的脸是自己的一面镜子;
成交并不取决于说理,而是取决于心情
8、 销售人员是否值得信赖。

第六章  新客户开发
案例:为什么客户一开始很有兴趣,但迟迟不下单?
案例:前天明明说不买的客户居然今天却买了,客户的话能相信吗?
案例:客户答应买我司的产品,却突然变卦买别人的了,为什么?
案例:为什么我们会买自己没有兴趣的而且并不需要的产品?
一、客户是根据自己所投入的精力、金钱来确定自己的态度;
二、如何才能引导客户作自我说服?
1.不要轻易给客户下结论,谁会买,谁不会买
2.态度上的变化叫说服,行为上的变化叫接受;
3.我们都喜欢为我们自己的行为找理由,却不善于做我们已找到理由的事;
4.客户是发现了自己的需求,“发现”的依据是自己的行为; 
5.案例:合同签订后,应该问哪4句话,提升客户忠诚度?

第七章 自我激励
1.做销售工作赚钱最快,且最容易得到老板的重视、同事的尊重;
2.不要把第一次见面看成最后一次,工作要积极但不要着急;
3.不是成功太慢,而是放弃太快,钱是给内行的人赚的;
4.不要报着试试看的心态,企图一夜暴富的投机心态让客户反感;
5.不是有希望才坚持,而是坚持了才有希望; 
6.付出才会拥有,而不是拥有才付出;做了才会,而不是会了才做;
7.好工作是做出来的,不是找出来的,不要把自己托付给公司,而要独立成长;
8.尝试不同的工作方法,而不是多年重复使用一种方式,具备试错的精神;
9.工作可以出错,但不可以不做,世界上最危险的莫过于原地不动;
10.不要把未来寄托在自己一无所知的行业上,做好目前的工作;

【培训特点】
1.分组讨论,训练为主,互动式教学;2次现场考试;
2.真实案例分析,大量课后作业题,既有抢答,又有辩论,还有现场演练,热烈的课堂氛围;
3.将销售管理融入培训现场:
   3.1  不仅关注个人学习表现,而且重视团队合作;
   3.2  不仅关注2天以内的学习,而且营造2天以后的培训学习氛围;
   3.3  不仅考核个人得分,而且考核团队得分;不仅考核学员的学习成绩,而且考核学员学习的参与度;


【讲师介绍】 王老师
 销售团队管理咨询师、销售培训讲师;
 曾任可口可乐(中国)公司业务经理;阿里巴巴(中国)网络技术有限公司业务经理;
 清华大学.南京大学EMBA特邀培训讲师;新加坡莱佛士学院特约讲师;
 

[PATCH] nvdimm: fix PHYS_PFN/PFN_PHYS mixup

2016-09-19 Thread Oliver O'Halloran
nd_activate_region() iomaps any hint addresses required when activating
a region. To prevent duplicate mappings it checks the PFN of the hint to
be mapped against the PFNs of the already mapped hints. Unfortunately it
doesn't convert the PFN back into a physical address before passing it
to devm_nvdimm_ioremap(). Instead it applies PHYS_PFN a second time
which ends about as well as you would imagine.

Signed-off-by: Oliver O'Halloran 
Cc: Dan Williams 
---
 drivers/nvdimm/region_devs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
index e8d5ba7b29af..4eef88eb5144 100644
--- a/drivers/nvdimm/region_devs.c
+++ b/drivers/nvdimm/region_devs.c
@@ -57,7 +57,7 @@ static int nvdimm_map_flush(struct device *dev, struct nvdimm 
*nvdimm, int dimm,
ndrd->flush_wpq[dimm][j] & PAGE_MASK);
else
flush_page = devm_nvdimm_ioremap(dev,
-   PHYS_PFN(pfn), PAGE_SIZE);
+   PFN_PHYS(pfn), PAGE_SIZE);
if (!flush_page)
return -ENXIO;
ndrd->flush_wpq[dimm][i] = flush_page
-- 
2.5.5

___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm


Returned mail: see transcript for details

2016-09-19 Thread jimaz
Your message was not delivered due to the following reason(s):

Your message could not be delivered because the destination server was
unreachable within the allowed queue period. The amount of time
a message is queued before it is returned depends on local configura-
tion parameters.

Most likely there is a network problem that prevented delivery, but
it is also possible that the computer is turned off, or does not
have a mail system running right now.

Your message was not delivered within 8 days:
Host 5.35.172.81 is not responding.

The following recipients did not receive this message:


Please reply to postmas...@jimaz.cz
if you feel this message to be in error.

___
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm