[PATCH] libnvdimm, pfn: fix ARCH=alpha allmodconfig build failure
by Dan Williams
I had relied on the kbuild robot for cross build coverage, however it
only builds alpha_defconfig. Switch from HPAGE_SIZE to PMD_SIZE, which
is more widely defined.
Fixes: 658922e57b84 ("libnvdimm, pfn: fix memmap reservation sizing")
Cc: <stable(a)vger.kernel.org>
Reported-by: Guenter Roeck <guenter(a)roeck-us.net>
Signed-off-by: Dan Williams <dan.j.williams(a)intel.com>
---
drivers/nvdimm/pmem.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index 5101f3ab4f29..e5a8bf032ec9 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -404,7 +404,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
* vmemmap_populate_hugepages() allocates the memmap array in
* HPAGE_SIZE chunks.
*/
- memmap_size = ALIGN(64 * npfns, HPAGE_SIZE);
+ memmap_size = ALIGN(64 * npfns, PMD_SIZE);
offset = ALIGN(start + SZ_8K + memmap_size, nd_pfn->align)
- start;
} else if (nd_pfn->mode == PFN_MODE_RAM)
4 years, 8 months
[PATCH v3] test: Add a unit test for dax error handling
by Vishal Verma
When we have a namespace with media errors, DAX should fail when trying
to map the bad blocks for direct access, but a regular write() to the
same sector should go through the driver and clear the error.
This test checks for all of the above happening - failure for a read()
on a file with a bad block, failure on an mmap-read for the same, and
finally a successful write that clears the bad block.
It also tests that a hole punch to a badblock (if the hole-punch is
sector aligned and sized) clears the error.
Signed-off-by: Vishal Verma <vishal.l.verma(a)intel.com>
---
v3: Disable the parts that test error clearing with writes through DAX
v2: Also test that punching a hole clears poison.
Makefile.am | 5 +-
test/dax-errors.c | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++
test/dax-errors.sh | 134 ++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 283 insertions(+), 2 deletions(-)
create mode 100644 test/dax-errors.c
create mode 100755 test/dax-errors.sh
diff --git a/Makefile.am b/Makefile.am
index 3f7dca3..27b06a6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -145,8 +145,8 @@ EXTRA_DIST += lib/libndctl.pc.in
CLEANFILES += lib/libndctl.pc
TESTS = test/libndctl test/dpa-alloc test/parent-uuid test/create.sh \
- test/clear.sh
-check_PROGRAMS = test/libndctl test/dpa-alloc test/parent-uuid
+ test/clear.sh test/dax-errors.sh
+check_PROGRAMS = test/libndctl test/dpa-alloc test/parent-uuid test/dax-errors
if ENABLE_DESTRUCTIVE
TESTS += test/blk-ns test/pmem-ns test/pcommit
@@ -179,3 +179,4 @@ test_dax_dev_LDADD = lib/libndctl.la
test_dax_pmd_SOURCES = test/dax-pmd.c
test_mmap_SOURCES = test/mmap.c
+test_dax_err_SOURCES = test/dax-errors.c
diff --git a/test/dax-errors.c b/test/dax-errors.c
new file mode 100644
index 0000000..11d0031
--- /dev/null
+++ b/test/dax-errors.c
@@ -0,0 +1,146 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/ioctl.h>
+#include <stdlib.h>
+#include <linux/fs.h>
+#include <linux/fiemap.h>
+#include <setjmp.h>
+
+#define fail() fprintf(stderr, "%s: failed at: %d\n", __func__, __LINE__)
+
+static sigjmp_buf sj_env;
+static int sig_count;
+
+static void sigbus_hdl(int sig, siginfo_t *siginfo, void *ptr)
+{
+ fprintf(stderr, "** Received a SIGBUS **\n");
+ sig_count++;
+ siglongjmp(sj_env, 1);
+}
+
+static int test_dax_read_err(int fd)
+{
+ void *base, *buf;
+ int rc = 0;
+
+ if (fd < 0) {
+ fail();
+ return -ENXIO;
+ }
+
+ if (posix_memalign(&buf, 4096, 4096) != 0)
+ return -ENOMEM;
+
+ base = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+ if (base == MAP_FAILED) {
+ perror("mmap");
+ rc = -ENXIO;
+ goto err_mmap;
+ }
+
+ if (sigsetjmp(sj_env, 1)) {
+ if (sig_count == 1) {
+ fprintf(stderr, "Failed to read from mapped file\n");
+ free(buf);
+ if (base) {
+ if (munmap(base, 4096) < 0) {
+ fail();
+ return 1;
+ }
+ }
+ return 1;
+ }
+ return sig_count;
+ }
+
+ /* read a page through DAX (should fail due to a bad block) */
+ memcpy(buf, base, 4096);
+
+ err_mmap:
+ free(buf);
+ return rc;
+}
+
+/* TODO: disabled till we get clear-on-write in the kernel */
+#if 0
+static int test_dax_write_clear(int fd)
+{
+ void *buf;
+ int rc = 0;
+
+ if (fd < 0) {
+ fail();
+ return -ENXIO;
+ }
+
+ if (posix_memalign(&buf, 4096, 4096) != 0)
+ return -ENOMEM;
+ memset(buf, 0, 4096);
+
+ /*
+ * Attempt to write zeroes to the first page of the file using write()
+ * This should clear the pmem errors/bad blocks
+ */
+ printf("Attempting to write\n");
+ if (write(fd, buf, 4096) < 0)
+ rc = errno;
+
+ free(buf);
+ return rc;
+}
+#endif
+
+int main(int argc, char *argv[])
+{
+ int fd, rc;
+ struct sigaction act;
+
+ if (argc < 1)
+ return -EINVAL;
+
+ memset(&act, 0, sizeof(act));
+ act.sa_sigaction = sigbus_hdl;
+ act.sa_flags = SA_SIGINFO;
+
+ if (sigaction(SIGBUS, &act, 0)) {
+ fail();
+ return 1;
+ }
+
+ fd = open(argv[1], O_RDWR | O_DIRECT);
+
+ /* Start the test. First, we do an mmap-read, and expect it to fail */
+ rc = test_dax_read_err(fd);
+ if (rc == 0) {
+ fprintf(stderr, "Expected read to fail, but it succeeded\n");
+ rc = -ENXIO;
+ goto out;
+ }
+ if (rc > 1) {
+ fprintf(stderr, "Received a second SIGBUS, exiting.\n");
+ rc = -ENXIO;
+ goto out;
+ }
+ printf(" mmap-read failed as expected\n");
+ rc = 0;
+
+ /* Next, do a regular (O_DIRECT) write() */
+ /* TODO: Disable this till we have clear-on-write in the kernel
+ * rc = test_dax_write_clear(fd);
+ *
+ * if (rc)
+ * perror("write");
+ */
+
+ out:
+ if (fd >= 0)
+ close(fd);
+ return rc;
+}
diff --git a/test/dax-errors.sh b/test/dax-errors.sh
new file mode 100755
index 0000000..cf9dd3a
--- /dev/null
+++ b/test/dax-errors.sh
@@ -0,0 +1,134 @@
+#!/bin/bash -x
+
+DEV=""
+NDCTL="./ndctl"
+BUS="-b nfit_test.0"
+BUS1="-b nfit_test.1"
+MNT=test_dax_mnt
+FILE=image
+json2var="s/[{}\",]//g; s/:/=/g"
+rc=77
+
+err() {
+ rc=1
+ echo "test/dax-errors: failed at line $1"
+ rm -f $FILE
+ rm -f $MNT/$FILE
+ if [ -n "$blockdev" ]; then
+ umount /dev/$blockdev
+ else
+ rc=77
+ fi
+ rmdir $MNT
+ exit $rc
+}
+
+set -e
+mkdir -p $MNT
+trap 'err $LINENO' ERR
+
+# setup (reset nfit_test dimms)
+modprobe nfit_test
+$NDCTL disable-region $BUS all
+$NDCTL zero-labels $BUS all
+$NDCTL enable-region $BUS all
+
+rc=1
+
+# create pmem
+dev="x"
+json=$($NDCTL create-namespace $BUS -t pmem -m raw)
+eval $(echo $json | sed -e "$json2var")
+[ $dev = "x" ] && echo "fail: $LINENO" && exit 1
+[ $mode != "raw" ] && echo "fail: $LINENO" && exit 1
+
+# check for expected errors in the middle of the namespace
+read sector len < /sys/block/$blockdev/badblocks
+[ $((sector * 2)) -ne $((size /512)) ] && echo "fail: $LINENO" && exit 1
+if dd if=/dev/$blockdev of=/dev/null iflag=direct bs=512 skip=$sector count=$len; then
+ echo "fail: $LINENO" && exit 1
+fi
+
+# check that writing clears the errors
+if ! dd of=/dev/$blockdev if=/dev/zero oflag=direct bs=512 seek=$sector count=$len; then
+ echo "fail: $LINENO" && exit 1
+fi
+
+if read sector len < /sys/block/$blockdev/badblocks; then
+ # fail if reading badblocks returns data
+ echo "fail: $LINENO" && exit 1
+fi
+
+#mkfs.xfs /dev/$blockdev -b size=4096 -f
+mkfs.ext4 /dev/$blockdev -b 4096
+mount /dev/$blockdev $MNT -o dax
+
+# prepare an image file with random data
+dd if=/dev/urandom of=$FILE bs=4096 count=4
+test -s $FILE
+
+# copy it to the dax file system
+cp $FILE $MNT/$FILE
+
+# Get the start sector for the file
+start_sect=$(filefrag -v -b512 $MNT/$FILE | grep -E "^[ ]+[0-9]+.*" | head -1 | awk '{ print $4 }' | cut -d. -f1)
+test -n "$start_sect"
+echo "start sector of the file is $start_sect"
+
+# inject badblocks for one page at the start of the file
+echo $start_sect 8 > /sys/block/$blockdev/badblocks
+
+# make sure reading the first block of the file fails as expected
+: The following 'dd' is expected to hit an I/O Error
+dd if=$MNT/$FILE of=/dev/null iflag=direct bs=4096 count=1 && err $LINENO || true
+
+# run the dax-errors test
+test -x test/dax-errors
+test/dax-errors $MNT/$FILE
+
+# TODO: disable this check till we have clear-on-write in the kernel
+#if read sector len < /sys/block/$blockdev/badblocks; then
+# # fail if reading badblocks returns data
+# echo "fail: $LINENO" && exit 1
+#fi
+
+# TODO Due to the above, we have to clear the existing badblock manually
+read sector len < /sys/block/$blockdev/badblocks
+if ! dd of=/dev/$blockdev if=/dev/zero oflag=direct bs=512 seek=$sector count=$len; then
+ echo "fail: $LINENO" && exit 1
+fi
+
+
+# test that a hole punch to a dax file also clears errors
+dd if=/dev/urandom of=$MNT/$FILE oflag=direct bs=4096 count=4
+start_sect=$(filefrag -v -b512 $MNT/$FILE | grep -E "^[ ]+[0-9]+.*" | head -1 | awk '{ print $4 }' | cut -d. -f1)
+test -n "$start_sect"
+echo "holepunch test: start sector: $start_sect"
+
+# inject a badblock at the second sector of the first page
+echo $((start_sect + 1)) 1 > /sys/block/$blockdev/badblocks
+
+# verify badblock by reading
+: The following 'dd' is expected to hit an I/O Error
+dd if=$MNT/$FILE of=/dev/null iflag=direct bs=4096 count=1 && err $LINENO || true
+
+# hole punch the second sector, and verify it clears the
+# badblock (and doesn't fail)
+if ! fallocate -p -o 0 -l 1024 $MNT/$FILE; then
+ echo "fail: $LINENO" && exit 1
+fi
+[ -n "$(cat /sys/block/$blockdev/badblocks)" ] && echo "error: $LINENO" && exit 1
+
+# cleanup
+rm -f $FILE
+rm -f $MNT/$FILE
+if [ -n "$blockdev" ]; then
+ umount /dev/$blockdev
+fi
+rmdir $MNT
+
+$NDCTL disable-region $BUS all
+$NDCTL disable-region $BUS1 all
+modprobe -r nfit_test
+
+exit 0
--
2.5.5
4 years, 8 months
新年幸福
by 巴铮胜
zagvtw8wtrvwwrrinx9nfypvuvh9eq57qa9irlkxargx8atckqzdpb
中高层管理者的职业化修炼
课程背景
团队管理的本质就是打造一支“招之即来,来之能战,战之能胜的团队”。 “招之即来”是下属忠诚度与上司领导力层面的问题,而“战之能胜”则是能力层面的问题。本课程也是针对如何修炼自我、如何打造团队与如何提高领导力而设置的。
通过《职业心态》的讲述引导学员如何树立正确的职业观念,如何提升主动性、积极性、责任感以及为什么要爱上自己的工作?
通过《企业经营哲学》的讲述,引导学员站在经营者的角度去看待企业管理,站在企业的高度去明确自己的角色和定位。
通过《自我修炼》、《管理修炼》、《领导力提升》、《标准化实施技巧》和《绩效管理与提升技巧》等章节的讲述指引学员如何修炼成为一个德才兼备的职场高手。
本课程的讲师一直在思考解决的一个问题就是如何解决学员“上课听听很激动,课后想想很感动,但随后还是一动不动”的问题,这也是将《思维碰撞》放在第一章节的原因。本章节将引导学员改变观念,保持空杯的心态,并自愿、自发、积极的学习与工作,这个章节的目的是为后面章节的学习效果做铺垫,也是整个课程成功以及课后培训效果转化成功的关键一环。
本课程视角独特,逻辑清晰,案例经典,工具实用,将指引学员进入一个全新的思维世界。
课程简介
培训对象:中高层管理人员、技术、生产、质量管理工程师
授课形式:讲师讲授 + 视频演绎 + 案例研讨 +角色扮演 + 讲师点评 + 落地工具。
课程时间:2天 ( 2016年05月13-14日上海、08月28-29日上海 )
课程费用:3800元/人/2天
咨询方式:0512-68700652 (0)18015596353
课程收益&特点
课程收益1.打开学员心门,引发学员自我反省和深入思考
2.触发学员思维方式的转变
3.激发学员工作和学习的激情、责任感和主动性
4.掌握提升团队配合度、凝聚力、执行力和领导力的技巧
5.掌握标准化和绩效管理提升的设计及实施的技巧
课程特点1.课堂所讲授的工具,大部分来自于世界500强公司使用最广泛、最高效的方法
2.把本期学员最关注问题,作为课堂的实例练习,能够使学员更好的“学以致用”
课程大纲
第一部分:思维碰撞之意识改变
A: 管理者的挑战
1.管理者最大的挑战是什么?
2.如何改变人做事的结果?
B: 成功和失败的哲学
1.案例分析(失败虽然是成功之母,但过去成功的经验,往往也容易造成今天的失败)
2.你拥有的知识和经验是成就你走到今天的原因,也是让你只走到今天的理由
C:学以致用
1.学会放下与空杯心态
2.学习的四个境界
3.为什么“培训会没有用”?
4.如何做,才能更好的“学以致用”?
D:职业意识转变
1.为什么世界上80%的财富,掌握在20%的人手中?
2.什么是弱者思维?
3.为什么拥有“弱者思维”的人会成为真正的强者?
4.习惯养成之魔法定律:7/21法则
5.新事物接受的三种境界
6.思维修炼的三种境界
7.如何做一个“先知先觉”的人?
(很多公司举办过多次培训,但培训效果并不是很理想,“学员往往培训时很激动、课后也很感动,但过段时间还是一动不动”,管理者也会因此质疑培训是不是有用?
如何真正的解决这个困惑,从根本上改变学员的意识与观念,提升培训的长久效果,从而达到最终提升绩效的目的,正是本章节要解决的问题。
本章节讲述的内容将与学员固化的观念发生激烈的碰撞,并引发学员深入的思考。这部分学习的效果,将影响整个培训过程及培训后实施的效果,也必将奠定学员职业化观念的基础)
第二部分:自我修炼
A:三项修炼
1.能力提升的三项修炼
2.三项修炼的精彩诠释
3.案例解析(技能是如何修炼而成的)
B:改变命运唯一的机会——学习
1.世界上唯一不变的就是“变”,但比“变”更可怕的是“一成不变”
2.富不学,富不长;穷不学,穷不尽
3.读万卷书,不如名师指路
4.学习最快的方法是什么?
5.学习最高的境界是什么?
C:职业化修炼
1.忠诚与能力孰重孰轻的思考?
2.德才兼备
3.案例分享(道德常常能够弥补智慧的不足,但智慧永远无法填补道德的空白)
4.相随心生(修炼从心开始)
5.职业选手必备的五大能力
6.职业化修炼的六大秘诀
7.修炼的基本逻辑(透过现象看本质,复杂问题简单化,以“道”“驭”“术”)
D:人生反思
1.人活着的目的是什么?
2.让人生变得更有意义的四件事是什么?
3.人生的价值用什么标准去衡量?
4.工作中,怎么做才能让他人和自己都开心?
(本章节通过《三项修炼》的诠释指引了职业化修炼的方向,通过《修炼的六大秘诀》揭示了修炼的技巧,通过《忠诚与能力》的辩证,揭示了“德才兼备”的深度含义。
本章节也探寻了一个非常大众而又深奥的问题,即“人为什么活着,如何活的更有意义?”。课程中的精彩的诠释,将令您豁然开朗,并引导您进入全新的思维世界)
第三部分:企业的经营哲学
A:做事的哲学
1.案例分析(努力一定要在方向正确的情况下,才有机会成功)
2.选择正确的时空,做正确的事情,同时还要正确的做事
3.方向,方法和时空哪一个更重要?
4.管理者的角色认知
B:企业永恒的目标
1.案例分析(战略决定未来)
2.企业追求的永恒目标
3.企业最终的发展会“止于人”
4.案例解析(敬畏和谦卑是智慧的开端)
C:企业管理六要素
1.企业管理六要素
2.案例分析(某上市公司的四五规划解析)
3.案例分析(某上市公司的经营策略解析)
4.华为企业文化之“狼性与做实文化”解析
(如何选择正确的时空,做正确的事情,同时还能把事情做正确是本章节探讨的一个关键点。
学员将通过本章节的讲解洞悉管理的哲学、企业管理的六要素、如何站在经营者的角度看待公司管理以及如何站在企业的高度去明确自己的角色与定位)
第四部分:管理修炼
A:做事最重要的前提
1.做事不由东,累死也无功
2.别人需求和自己需求间的平衡
3.何为素质?
4.若你是老板,你会雇佣现在的你吗?
5.做一个自己满意的人
B:管理修炼
1.管理的经典诠释
2.管理的手段与目的
3.PDCA的经典诠释
(本章节将引导学员掌握管理修炼的方向和核心技巧)
领导力提升
A:团队解析
1.团队VS“团伙”
2.为什么一个人是“龙”,一群人就变成 “虫”?
3.如何避免“三个和尚没水吃”的困境?
B:沟通技巧
1.案例解析(你对别人的态度,决定了别人对你的回应)
2.沟通的本质
3.高效沟通的技巧
4.跨部门沟通的技巧
C:领导力提升
1.何为领导?
2.领导力提升的核心技巧
3.三大纪律解析
4.执行力提升之黄金定律:新三大纪律
5.违纪的处理之“征心”原则
6.管理的四境界
7.团队的打造目标
D:主动性提升
1.世界上最遥远的距离是从“头”到“脚”的距离,也就是从“想”到“做”的距离
2.知而未行的原因
3.三省吾身
4.主动性提升的核心技巧
(何为团队?如何看到沟通的本质?如何进行更好的团队合作?如何管理团队?如何激发团队的凝聚力和执行力?本章节将带着这些问题,指引学员看到管理的本质,并掌握领导力提升的核心技巧。
培训不仅是要解决“知”的问题,还要解决“行”的问题,如何解决“知易行难”,本章节将给到您满意的答案)
第五部分:职业心态
A:职业观念
1.“正心、修身、齐家、治国、平天下”给我们带来的启示
2.职业观念
3.保持创新的8条秘诀
B:职场成功的秘诀
1.“变态”和“五心”
2.“赢”的解析
3.如何成为职场赢家?
4.案例分享(因为专注,所以专业)
C:改变从心开始
1.关于改变,值得深思的三句话
2.人生哲学
3.案例解析(One of my days in SH)
4.成功是从爱上你的工作开始(Love what U do)
5.什么样的心态就有什么样的人生
6.如何实现个人、家庭、同事和企业的多赢?
(本章节将引导学员如何树立正确的职业观念和职业心态,并揭示了职场成功的秘诀是从“爱上自己的工作”开始。
当一个人成长为职业选手时,也就变成了“招之即来,来之能战,战之能胜”的个人,团队的战斗力也会随之大大增加)
第六部分:标准化实施技巧
A:标准化的解析
1.“让习惯符合标准,让标准变成习惯”的思考
2.何为标准化?
B:管理之路
1.管理标准化
2.标准表单化
3.表单信息化
4.信息绩效化
C:标准化实施的技巧
1.制定标准的目的
2.目的、目标解析
3.目标设定之SMARTER原则
4.制定标准的原则
5.标准化策划之葵花宝典:MECE
6.MECE的使用技巧
7.MECE的判定标准
8.懒人思维在标准化策划中的应用
9.案例解析(懒人思维的具体应用)
D:标准化的软件工具
1.Mindmanager在流程化、标准化中的应用技巧
2.Visio绘制流程图的技巧
3.Adobe Acrobat在文件整合中的应用技巧
E:流程优化技巧
1.流程优化之SIPOC解析
2.企业运营流程全景图制作实例
3.流程制作实例与技巧
4.表单设计技术
(标准化是企业基业长青的根本,也是管理者职业化修炼需要掌握的一门技术。本章节将揭示“如何通过制定标准,让不同的人做同样的事,有同样的结果”的方法与技巧。
“工欲善其事,必先利其器”,本章节将通过MECE、懒人法则、Mindmanager、Visio与Adobe Acrobat等工具的综合应用,使流程优化与标准化的实施过程变成一种享受)
第七部分:绩效管理与提升技巧
A:管理的核心
1.人之初,“性本善”还是“性本恶”的探索
2.人性解读
3.管理的核心之人性管理
B:绩效考核
1.“做事的哲学源于战争,管理的哲学源于太极”的解析
2.绩效管理四原则
3.为什么大部分的企业绩效考核都以失败告终?
4.企业中绩效考核的终极目标是什么?
5.绩效考核实施的案例分析
6.绩效考核实施中的核心技巧及原则
C:绩效系统构建绩效
1.绩效监控系统构建实例解析
2.绩效数据分析技巧
3.绩效提升的技巧
(“人管人,累死人”,通过什么方式能让员工更主动、积极、自发、持续的努力工作?
站在当下,我们应该告别过去“洗脑式培训”,取而代之的是科学的绩效管理体系。它将通过“绩效管理”这双无形的手推动我们的员工以绩效提升为目的持续的改进,改进,再改进。
如何构建绩效体系,如何进行绩效考核、如何进行绩效提升以及如何规避绩效考核的误区也将是中高层管理者的必修课)
4 years, 8 months
[PATCH v11 0/5] libnvidmm, nfit: dimm command marshaling
by Dan Williams
Jerry and I have been working towards a way to support the ACPI DSM
command set needed by HPE DIMMs. The HPE command sets differ
from the original Intel-defined command set already upstream.
Ideally the kernel would only implement a single standard command
format, however the standard is not yet available and devices
implementing an alternate command set are already shipping.
This rework of Jerry's initial patches [1] aims to support shipping
devices while encouraging future / follow-on command definitions to wait
for the standardization process to complete by:
1/ Requiring public documentation of commands
2/ Providing a mechanism to disable vendor-specific functionality
See patch 2 for more details. This patch passes the existing nvdimm
unit tests, but I have yet to extend the tests to target this new
mechanism.
Changes since v10: [1]
1/ Rewrote the commit message for the patch that introduces ND_CMD_CALL
2/ Replace 'nfit_cmd_family_tbl' with nfit_mem->family to clean up some
lookup code.
3/ Squash and reorganize the 7 patches into a smaller set. Commit
8467ba4fc94a from my for-4.7/dsm branch [2] was also squashed.
4/ Add sysfs attributes for the dimm family and DSM function-supported
mask.
5/ Add a module parameter to disable vendor specific commands
[1]: https://lists.01.org/pipermail/linux-nvdimm/2016-April/005484.html
[2]: https://git.kernel.org/cgit/linux/kernel/git/djbw/nvdimm.git/commit/?h=fo...
---
Dan Williams (5):
nfit, libnvdimm: clarify "commands" vs "_DSMs"
nfit, libnvdimm: limited/whitelisted dimm command marshaling mechanism
nfit: disable vendor specific commands
tools/testing/nvdimm: ND_CMD_CALL support
nfit: add sysfs dimm 'family' and 'dsm_mask' attributes
drivers/acpi/nfit.c | 145 +++++++++++++++++++++++++++++++++-----
drivers/acpi/nfit.h | 18 ++++-
drivers/nvdimm/bus.c | 47 +++++++++++-
drivers/nvdimm/core.c | 2 -
drivers/nvdimm/dimm_devs.c | 18 +++--
drivers/nvdimm/nd-core.h | 2 -
include/linux/libnvdimm.h | 5 +
include/uapi/linux/ndctl.h | 42 +++++++++++
tools/testing/nvdimm/test/nfit.c | 46 ++++++++----
9 files changed, 275 insertions(+), 50 deletions(-)
4 years, 8 months
Reach Millions of FB Group Members
by RONALD
Hello,
Do you want to advertise on facebook? We're here to help.
We wil manually post your product/logo/link on Facebook Groups and will
give you a full report with links of each live post where your advertisement
was posted.
http://www.buysocial.cn/detail.php?id=12
Regards
RONALD
�
Unsubscribe option is available on the footer of our website
4 years, 8 months
[GIT PULL] libnvdimm fixes for 4.6-rc7
by Williams, Dan J
Hi Linus, please pull from:
git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm libnvdimm-fixes
...to receive:
1/ A fix for the persistent memory 'struct page' driver. The
implementation overlooked the fact that pages are allocated in 2MB
units leading to -ENOMEM when establishing some configurations. It's
tagged for -stable as the problem was introduced with the initial
implementation in 4.5.
2/ The new "error status translation" routine, introduced with the 4.6
updates to the nfit driver, missed a necessary path in acpi_nfit_ctl().
End result is that we are falsely assuming commands complete
successfully when the embedded status says otherwise.
Full changelog and diff below, these have received a positive build
notification from the kbuild robot over 107 configs.
---
The following changes since commit 02da2d72174c61988eb4456b53f405e3ebdebce4:
Linux 4.6-rc5 (2016-04-24 16:17:05 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm libnvdimm-fixes
for you to fetch changes up to 2eea65829dc6c20dccbe79726fd0f3fe7f8aa43b:
nfit: fix translation of command status results (2016-05-02 09:11:53 -0700)
----------------------------------------------------------------
Dan Williams (2):
libnvdimm, pfn: fix memmap reservation sizing
nfit: fix translation of command status results
drivers/acpi/nfit.c | 5 ++++-
drivers/nvdimm/pmem.c | 13 ++++++++++---
2 files changed, 14 insertions(+), 4 deletions(-)
commit 658922e57b847bb7112aa67f6441b6bbc6554412
Author: Dan Williams <dan.j.williams(a)intel.com>
Date: Sat Apr 30 13:07:06 2016 -0700
libnvdimm, pfn: fix memmap reservation sizing
When configuring a pfn-device instance to allocate the memmap array it
needs to account for the fact that vmemmap_populate_hugepages()
allocates struct page blocks in HPAGE_SIZE chunks. We need to align the
reserved area size to 2MB otherwise arch_add_memory() runs out of memory
while establishing the memmap:
WARNING: CPU: 0 PID: 496 at arch/x86/mm/init_64.c:704 arch_add_memory+0xe7/0xf0
[..]
Call Trace:
[<ffffffff8148bdb3>] dump_stack+0x85/0xc2
[<ffffffff810a749b>] __warn+0xcb/0xf0
[<ffffffff810a75cd>] warn_slowpath_null+0x1d/0x20
[<ffffffff8106a497>] arch_add_memory+0xe7/0xf0
[<ffffffff811d2097>] devm_memremap_pages+0x287/0x450
[<ffffffff811d1ffa>] ? devm_memremap_pages+0x1ea/0x450
[<ffffffffa0000298>] __wrap_devm_memremap_pages+0x58/0x70 [nfit_test_iomap]
[<ffffffffa0047a58>] pmem_attach_disk+0x318/0x420 [nd_pmem]
[<ffffffffa0047bcf>] nd_pmem_probe+0x6f/0x90 [nd_pmem]
[<ffffffffa0009469>] nvdimm_bus_probe+0x69/0x110 [libnvdimm]
[..]
ndbus0: nd_pmem.probe(pfn3.0) = -12
nd_pmem: probe of pfn3.0 failed with error -12
libndctl: ndctl_pfn_enable: pfn3.0: failed to enable
Reported-by: Namratha Kothapalli <namratha.n.kothapalli(a)intel.com>
Cc: <stable(a)vger.kernel.org>
Signed-off-by: Dan Williams <dan.j.williams(a)intel.com>
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index f798899338ed..5101f3ab4f29 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -397,10 +397,17 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
*/
start += start_pad;
npfns = (pmem->size - start_pad - end_trunc - SZ_8K) / SZ_4K;
- if (nd_pfn->mode == PFN_MODE_PMEM)
- offset = ALIGN(start + SZ_8K + 64 * npfns, nd_pfn->align)
+ if (nd_pfn->mode == PFN_MODE_PMEM) {
+ unsigned long memmap_size;
+
+ /*
+ * vmemmap_populate_hugepages() allocates the memmap array in
+ * HPAGE_SIZE chunks.
+ */
+ memmap_size = ALIGN(64 * npfns, HPAGE_SIZE);
+ offset = ALIGN(start + SZ_8K + memmap_size, nd_pfn->align)
- start;
- else if (nd_pfn->mode == PFN_MODE_RAM)
+ } else if (nd_pfn->mode == PFN_MODE_RAM)
offset = ALIGN(start + SZ_8K, nd_pfn->align) - start;
else
goto err;
commit 2eea65829dc6c20dccbe79726fd0f3fe7f8aa43b
Author: Dan Williams <dan.j.williams(a)intel.com>
Date: Mon May 2 09:11:53 2016 -0700
nfit: fix translation of command status results
When transportation of the command completes successfully, it indicates
that the 'status' result is valid. Fix the missed checking and
translation of the status field at the end of acpi_nfit_ctl().
Otherwise, we fail to handle reported errors and assume commands
complete successfully.
Reported-by: Linda Knippers <linda.knippers(a)hpe.com>
Reviewed-by: Johannes Thumshirn <jthumshirn(a)suse.de>
Signed-off-by: Dan Williams <dan.j.williams(a)intel.com>
diff --git a/drivers/acpi/nfit.c b/drivers/acpi/nfit.c
index d0f35e63640b..63cc9dbe4f3b 100644
--- a/drivers/acpi/nfit.c
+++ b/drivers/acpi/nfit.c
@@ -287,8 +287,11 @@ static int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc,
offset);
rc = -ENXIO;
}
- } else
+ } else {
rc = 0;
+ if (cmd_rc)
+ *cmd_rc = xlat_status(buf, cmd);
+ }
out:
ACPI_FREE(out_obj);
4 years, 8 months
[PATCH v2-UPDATE 3/3] xfs: Add alignment check for DAX mount
by Toshi Kani
When a partition is not aligned by 4KB, mount -o dax succeeds,
but any read/write access to the filesystem fails, except for
metadata update.
Call bdev_direct_access to check the alignment when -o dax is
specified.
Signed-off-by: Toshi Kani <toshi.kani(a)hpe.com>
Reviewed-by: Boaz Harrosh <boaz(a)plexistor.com>
Reviewed-by: Ross Zwisler <ross.zwisler(a)linux.intel.com>
Cc: Dave Chinner <david(a)fromorbit.com>
Cc: Dan Williams <dan.j.williams(a)intel.com>
Cc: Ross Zwisler <ross.zwisler(a)linux.intel.com>
Cc: Christoph Hellwig <hch(a)infradead.org>
Cc: Boaz Harrosh <boaz(a)plexistor.com>
---
v2-UPDATE
- Add a period and fix a typo in error messages (Ross Zwisler)
---
fs/xfs/xfs_super.c | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 187e14b..ac18fae 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -1557,15 +1557,30 @@ xfs_fs_fill_super(
sb->s_flags |= MS_I_VERSION;
if (mp->m_flags & XFS_MOUNT_DAX) {
+ struct blk_dax_ctl dax = {
+ .sector = 0,
+ .size = PAGE_SIZE,
+ };
xfs_warn(mp,
- "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
+ "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
if (sb->s_blocksize != PAGE_SIZE) {
xfs_alert(mp,
- "Filesystem block size invalid for DAX Turning DAX off.");
+ "Filesystem block size invalid for DAX. Turning DAX off.");
mp->m_flags &= ~XFS_MOUNT_DAX;
- } else if (!sb->s_bdev->bd_disk->fops->direct_access) {
- xfs_alert(mp,
- "Block device does not support DAX Turning DAX off.");
+ } else if ((error = bdev_direct_access(sb->s_bdev, &dax)) < 0) {
+ switch (error) {
+ case -EOPNOTSUPP:
+ xfs_alert(mp,
+ "Block device does not support DAX. Turning DAX off.");
+ break;
+ case -EINVAL:
+ xfs_alert(mp,
+ "Partition alignment invalid for DAX. Turning DAX off.");
+ break;
+ default:
+ xfs_alert(mp,
+ "DAX access failed (%d). Turning DAX off.", error);
+ }
mp->m_flags &= ~XFS_MOUNT_DAX;
}
}
4 years, 8 months
[PATCH v2 0/3] Add alignment check for DAX mount
by Toshi Kani
When a partition is not aligned by 4KB, mount -o dax succeeds,
but any read/write access to the filesystem fails, except for
metadata update.
Add alignment check to ext4, ext2, and xfs.
v2:
- Use a helper function via ->direct_access for the check.
(Christoph Hellwig)
- Call bdev_direct_access() with sector 0 for the check.
(Boaz Harrosh)
---
Toshi Kani (3):
1/3 ext4: Add alignment check for DAX mount
2/3 ext2: Add alignment check for DAX mount
3/3 xfs: Add alignment check for DAX mount
---
fs/ext2/super.c | 21 +++++++++++++++++++--
fs/ext4/super.c | 20 ++++++++++++++++++--
fs/xfs/xfs_super.c | 23 +++++++++++++++++++----
3 files changed, 56 insertions(+), 8 deletions(-)
4 years, 8 months
[PATCH v2 0/5] dax: handling of media errors
by Vishal Verma
Until now, dax has been disabled if media errors were found on
any device. This series attempts to address that.
The first three patches from Dan re-enable dax even when media
errors are present.
The fourth patch from Matthew removes the
zeroout path from dax entirely, making zeroout operations always
go through the driver (The motivation is that if a backing device
has media errors, and we create a sparse file on it, we don't
want the initial zeroing to happen via dax, we want to give the
block driver a chance to clear the errors).
One pending item is addressing clear_pmem usages in dax.c. clear_pmem is
'unsafe' as it attempts to simply memcpy, and does not go through the driver.
We have a few options of solving this:
1. Remove all usages of clear_pmem that are not sector-aligned. For the
ones that are aligned, replace them with a bio submission that goes
through the driver to clear errors.
2. Export from the block layer, either an API to zero sub-sector ranges,
or in general, clear errors in a range. The dax attempts to clear_pmem
can then use either of these and not be hit be media errors.
I'll send out a v3 with a crack at option 1, but I wanted to get these
changes (especially the ones in xfs) out for review.
The fifth patch changes all the callers of dax_do_io to check for
EIO, and fallback to direct_IO as needed. This forces the IO to
go through the block driver, and can attempt to clear the error.
v2:
- Use blockdev_issue_zeroout in xfs instead of sb_issue_zeroout (Christoph)
- Un-wrapper-ize dax_do_io and leave the fallback to direct_IO to callers
(Christoph)
- Rebase to v4.6-rc1 (fixup a couple of conflicts in ext4 and xfs)
Dan Williams (3):
block, dax: pass blk_dax_ctl through to drivers
dax: fallback from pmd to pte on error
dax: enable dax in the presence of known media errors (badblocks)
Vishal Verma (2):
dax: use sb_issue_zerout instead of calling dax_clear_sectors
dax: handle media errors in dax_do_io
arch/powerpc/sysdev/axonram.c | 10 +++++-----
block/ioctl.c | 9 ---------
drivers/block/brd.c | 9 +++++----
drivers/nvdimm/pmem.c | 17 +++++++++++++----
drivers/s390/block/dcssblk.c | 12 ++++++------
fs/block_dev.c | 19 +++++++++++++++----
fs/dax.c | 36 ++----------------------------------
fs/ext2/inode.c | 29 ++++++++++++++++++-----------
fs/ext4/indirect.c | 18 +++++++++++++-----
fs/ext4/inode.c | 21 ++++++++++++++-------
fs/xfs/xfs_aops.c | 14 ++++++++++++--
fs/xfs/xfs_bmap_util.c | 15 ++++-----------
include/linux/blkdev.h | 3 +--
include/linux/dax.h | 1 -
14 files changed, 108 insertions(+), 105 deletions(-)
--
2.5.5
4 years, 8 months
上海东方发明实施公司销售分公司
by 雍松文
z3c6ewy9zorve5eacfam3swrraiexw6l4waaqc8jsiwfgwyzmuwbne
中高层管理者的职业化修炼
课程背景
团队管理的本质就是打造一支“招之即来,来之能战,战之能胜的团队”。 “招之即来”是下属忠诚度与上司领导力层面的问题,而“战之能胜”则是能力层面的问题。本课程也是针对如何修炼自我、如何打造团队与如何提高领导力而设置的。
通过《职业心态》的讲述引导学员如何树立正确的职业观念,如何提升主动性、积极性、责任感以及为什么要爱上自己的工作?
通过《企业经营哲学》的讲述,引导学员站在经营者的角度去看待企业管理,站在企业的高度去明确自己的角色和定位。
通过《自我修炼》、《管理修炼》、《领导力提升》、《标准化实施技巧》和《绩效管理与提升技巧》等章节的讲述指引学员如何修炼成为一个德才兼备的职场高手。
本课程的讲师一直在思考解决的一个问题就是如何解决学员“上课听听很激动,课后想想很感动,但随后还是一动不动”的问题,这也是将《思维碰撞》放在第一章节的原因。本章节将引导学员改变观念,保持空杯的心态,并自愿、自发、积极的学习与工作,这个章节的目的是为后面章节的学习效果做铺垫,也是整个课程成功以及课后培训效果转化成功的关键一环。
本课程视角独特,逻辑清晰,案例经典,工具实用,将指引学员进入一个全新的思维世界。
课程简介
培训对象:中高层管理人员、技术、生产、质量管理工程师
授课形式:讲师讲授 + 视频演绎 + 案例研讨 +角色扮演 + 讲师点评 + 落地工具。
课程时间:2天 ( 2016年05月13-14日上海、08月28-29日上海 )
课程费用:3800元/人/2天
:0512-68700653 (0)18015596327
课程收益&特点
课程收益1.打开学员心门,引发学员自我反省和深入思考
2.触发学员思维方式的转变
3.激发学员工作和学习的激情、责任感和主动性
4.掌握提升团队配合度、凝聚力、执行力和领导力的技巧
5.掌握标准化和绩效管理提升的设计及实施的技巧
课程特点1.课堂所讲授的工具,大部分来自于世界500强公司使用最广泛、最高效的方法
2.把本期学员最关注问题,作为课堂的实例练习,能够使学员更好的“学以致用”
课程大纲
第一部分:思维碰撞之意识改变
A: 管理者的挑战
1.管理者最大的挑战是什么?
2.如何改变人做事的结果?
B: 成功和失败的哲学
1.案例分析(失败虽然是成功之母,但过去成功的经验,往往也容易造成今天的失败)
2.你拥有的知识和经验是成就你走到今天的原因,也是让你只走到今天的理由
C:学以致用
1.学会放下与空杯心态
2.学习的四个境界
3.为什么“培训会没有用”?
4.如何做,才能更好的“学以致用”?
D:职业意识转变
1.为什么世界上80%的财富,掌握在20%的人手中?
2.什么是弱者思维?
3.为什么拥有“弱者思维”的人会成为真正的强者?
4.习惯养成之魔法定律:7/21法则
5.新事物接受的三种境界
6.思维修炼的三种境界
7.如何做一个“先知先觉”的人?
(很多公司举办过多次培训,但培训效果并不是很理想,“学员往往培训时很激动、课后也很感动,但过段时间还是一动不动”,管理者也会因此质疑培训是不是有用?
如何真正的解决这个困惑,从根本上改变学员的意识与观念,提升培训的长久效果,从而达到最终提升绩效的目的,正是本章节要解决的问题。
本章节讲述的内容将与学员固化的观念发生激烈的碰撞,并引发学员深入的思考。这部分学习的效果,将影响整个培训过程及培训后实施的效果,也必将奠定学员职业化观念的基础)
第二部分:自我修炼
A:三项修炼
1.能力提升的三项修炼
2.三项修炼的精彩诠释
3.案例解析(技能是如何修炼而成的)
B:改变命运唯一的机会——学习
1.世界上唯一不变的就是“变”,但比“变”更可怕的是“一成不变”
2.富不学,富不长;穷不学,穷不尽
3.读万卷书,不如名师指路
4.学习最快的方法是什么?
5.学习最高的境界是什么?
C:职业化修炼
1.忠诚与能力孰重孰轻的思考?
2.德才兼备
3.案例分享(道德常常能够弥补智慧的不足,但智慧永远无法填补道德的空白)
4.相随心生(修炼从心开始)
5.职业选手必备的五大能力
6.职业化修炼的六大秘诀
7.修炼的基本逻辑(透过现象看本质,复杂问题简单化,以“道”“驭”“术”)
D:人生反思
1.人活着的目的是什么?
2.让人生变得更有意义的四件事是什么?
3.人生的价值用什么标准去衡量?
4.工作中,怎么做才能让他人和自己都开心?
(本章节通过《三项修炼》的诠释指引了职业化修炼的方向,通过《修炼的六大秘诀》揭示了修炼的技巧,通过《忠诚与能力》的辩证,揭示了“德才兼备”的深度含义。
本章节也探寻了一个非常大众而又深奥的问题,即“人为什么活着,如何活的更有意义?”。课程中的精彩的诠释,将令您豁然开朗,并引导您进入全新的思维世界)
第三部分:企业的经营哲学
A:做事的哲学
1.案例分析(努力一定要在方向正确的情况下,才有机会成功)
2.选择正确的时空,做正确的事情,同时还要正确的做事
3.方向,方法和时空哪一个更重要?
4.管理者的角色认知
B:企业永恒的目标
1.案例分析(战略决定未来)
2.企业追求的永恒目标
3.企业最终的发展会“止于人”
4.案例解析(敬畏和谦卑是智慧的开端)
C:企业管理六要素
1.企业管理六要素
2.案例分析(某上市公司的四五规划解析)
3.案例分析(某上市公司的经营策略解析)
4.华为企业文化之“狼性与做实文化”解析
(如何选择正确的时空,做正确的事情,同时还能把事情做正确是本章节探讨的一个关键点。
学员将通过本章节的讲解洞悉管理的哲学、企业管理的六要素、如何站在经营者的角度看待公司管理以及如何站在企业的高度去明确自己的角色与定位)
第四部分:管理修炼
A:做事最重要的前提
1.做事不由东,累死也无功
2.别人需求和自己需求间的平衡
3.何为素质?
4.若你是老板,你会雇佣现在的你吗?
5.做一个自己满意的人
B:管理修炼
1.管理的经典诠释
2.管理的手段与目的
3.PDCA的经典诠释
(本章节将引导学员掌握管理修炼的方向和核心技巧)
领导力提升
A:团队解析
1.团队VS“团伙”
2.为什么一个人是“龙”,一群人就变成 “虫”?
3.如何避免“三个和尚没水吃”的困境?
B:沟通技巧
1.案例解析(你对别人的态度,决定了别人对你的回应)
2.沟通的本质
3.高效沟通的技巧
4.跨部门沟通的技巧
C:领导力提升
1.何为领导?
2.领导力提升的核心技巧
3.三大纪律解析
4.执行力提升之黄金定律:新三大纪律
5.违纪的处理之“征心”原则
6.管理的四境界
7.团队的打造目标
D:主动性提升
1.世界上最遥远的距离是从“头”到“脚”的距离,也就是从“想”到“做”的距离
2.知而未行的原因
3.三省吾身
4.主动性提升的核心技巧
(何为团队?如何看到沟通的本质?如何进行更好的团队合作?如何管理团队?如何激发团队的凝聚力和执行力?本章节将带着这些问题,指引学员看到管理的本质,并掌握领导力提升的核心技巧。
培训不仅是要解决“知”的问题,还要解决“行”的问题,如何解决“知易行难”,本章节将给到您满意的答案)
第五部分:职业心态
A:职业观念
1.“正心、修身、齐家、治国、平天下”给我们带来的启示
2.职业观念
3.保持创新的8条秘诀
B:职场成功的秘诀
1.“变态”和“五心”
2.“赢”的解析
3.如何成为职场赢家?
4.案例分享(因为专注,所以专业)
C:改变从心开始
1.关于改变,值得深思的三句话
2.人生哲学
3.案例解析(One of my days in SH)
4.成功是从爱上你的工作开始(Love what U do)
5.什么样的心态就有什么样的人生
6.如何实现个人、家庭、同事和企业的多赢?
(本章节将引导学员如何树立正确的职业观念和职业心态,并揭示了职场成功的秘诀是从“爱上自己的工作”开始。
当一个人成长为职业选手时,也就变成了“招之即来,来之能战,战之能胜”的个人,团队的战斗力也会随之大大增加)
第六部分:标准化实施技巧
A:标准化的解析
1.“让习惯符合标准,让标准变成习惯”的思考
2.何为标准化?
B:管理之路
1.管理标准化
2.标准表单化
3.表单信息化
4.信息绩效化
C:标准化实施的技巧
1.制定标准的目的
2.目的、目标解析
3.目标设定之SMARTER原则
4.制定标准的原则
5.标准化策划之葵花宝典:MECE
6.MECE的使用技巧
7.MECE的判定标准
8.懒人思维在标准化策划中的应用
9.案例解析(懒人思维的具体应用)
D:标准化的软件工具
1.Mindmanager在流程化、标准化中的应用技巧
2.Visio绘制流程图的技巧
3.Adobe Acrobat在文件整合中的应用技巧
E:流程优化技巧
1.流程优化之SIPOC解析
2.企业运营流程全景图制作实例
3.流程制作实例与技巧
4.表单设计技术
(标准化是企业基业长青的根本,也是管理者职业化修炼需要掌握的一门技术。本章节将揭示“如何通过制定标准,让不同的人做同样的事,有同样的结果”的方法与技巧。
“工欲善其事,必先利其器”,本章节将通过MECE、懒人法则、Mindmanager、Visio与Adobe Acrobat等工具的综合应用,使流程优化与标准化的实施过程变成一种享受)
第七部分:绩效管理与提升技巧
A:管理的核心
1.人之初,“性本善”还是“性本恶”的探索
2.人性解读
3.管理的核心之人性管理
B:绩效考核
1.“做事的哲学源于战争,管理的哲学源于太极”的解析
2.绩效管理四原则
3.为什么大部分的企业绩效考核都以失败告终?
4.企业中绩效考核的终极目标是什么?
5.绩效考核实施的案例分析
6.绩效考核实施中的核心技巧及原则
C:绩效系统构建绩效
1.绩效监控系统构建实例解析
2.绩效数据分析技巧
3.绩效提升的技巧
(“人管人,累死人”,通过什么方式能让员工更主动、积极、自发、持续的努力工作?
站在当下,我们应该告别过去“洗脑式培训”,取而代之的是科学的绩效管理体系。它将通过“绩效管理”这双无形的手推动我们的员工以绩效提升为目的持续的改进,改进,再改进。
如何构建绩效体系,如何进行绩效考核、如何进行绩效提升以及如何规避绩效考核的误区也将是中高层管理者的必修课)
4 years, 8 months