[PATCH v1] libnvdimm: fix kernel-doc notation
by luanshi
Fix kernel-doc notation in drivers/nvdimm/namespace_devs.c.
Fixes: bf9bccc14c05 ("libnvdimm: pmem label sets and namespace instantiation.")
Signed-off-by: Liguang Zhang <zhangliguang(a)linux.alibaba.com>
---
drivers/nvdimm/namespace_devs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
index cca0a3b..3851245 100644
--- a/drivers/nvdimm/namespace_devs.c
+++ b/drivers/nvdimm/namespace_devs.c
@@ -1900,7 +1900,7 @@ static int select_pmem_id(struct nd_region *nd_region, u8 *pmem_id)
/**
* create_namespace_pmem - validate interleave set labelling, retrieve label0
* @nd_region: region with mappings to validate
- * @nspm: target namespace to create
+ * @nsindex: target namespace index to create
* @nd_label: target pmem namespace label to evaluate
*/
static struct device *create_namespace_pmem(struct nd_region *nd_region,
--
1.8.3.1
1 year, 4 months
Project Establishment
by Aseel Finance UAE.
Dear Sir,
As-Salaam-Alaikum.
Greetings from Aseel Islamic Finance PJSC.
Aseel Islamic finance PJSC is private joint stock company that was
established in 2006 and has built a leading market position for itself in the UAE's finance market which specializes in loan finance and investment activities in real estate, hospitality, sports, industrial & sustainable technologies, strategic financial investments,specialized education, healthcare services, agriculture,manufacturing, mining, energy and additional environmentally sustainable projects.
My Name is Saif dawood. Do you have projects that require funding? We have finance available for your projects with over 2 trillion private and corporate investment portfolios. Aseel Islamic finance PJSC is
looking for equity partners, entrepreneur, fund raisers and portfolio managers who will pay up to 3.5% interest and/or part equity position with a 5 to 10 year hold. In 2030, we plan on acquiring up to 2 trillion in high-quality, low risk assets and investments to capitalize on the current market cycle.
Aseel Islamic finance PJSC is acting as a lender and the fund will be disbursed on a clear interest rate of 3.5% annually to the equity partners and entrepreneurs for their investment projects. We also give a 2% commission to brokers, who bring project owners for finance or
other opportunities.
For further details, kindly send us via email with your business plans or project summary.
Regards,
Mr. SaIf Dawood
International Business Coordinator
Aseel Islamic Finance PJSC
Al Mankhool, Dubai C2 Tower,
Ground floor,P.O 94669 Dubai,
United Arab Emirates
+971 586 242 191
1 year, 4 months
[PATCH v2] libnvdimm/nsio: differentiate between probe mapping and runtime mapping
by Aneesh Kumar K.V
nvdimm core currently maps the full namespace to an ioremap range
while probing the namespace mode. This can result in probe failures
on architectures that have limited ioremap space.
For example, with a large btt namespace that consumes most of I/O remap
range, depending on the sequence of namespace initialization, we can find
a pfn namespace initialization failure due to unavailable I/O remap space
which we use for temporary mapping.
nvdimm core can avoid this failure by only mapping the reserver block area to
check for pfn superblock type and map the full namespace resource only before
using the namespace.
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar(a)linux.ibm.com>
---
Changes from V1:
* update changelog
* update patch based on review feedback.
drivers/dax/pmem/core.c | 2 +-
drivers/nvdimm/claim.c | 7 +++----
drivers/nvdimm/nd.h | 4 ++--
drivers/nvdimm/pfn.h | 6 ++++++
drivers/nvdimm/pfn_devs.c | 5 -----
drivers/nvdimm/pmem.c | 15 ++++++++++++---
6 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/drivers/dax/pmem/core.c b/drivers/dax/pmem/core.c
index 6eb6dfdf19bf..f174dbfbe1c4 100644
--- a/drivers/dax/pmem/core.c
+++ b/drivers/dax/pmem/core.c
@@ -28,7 +28,7 @@ struct dev_dax *__dax_pmem_probe(struct device *dev, enum dev_dax_subsys subsys)
nsio = to_nd_namespace_io(&ndns->dev);
/* parse the 'pfn' info block via ->rw_bytes */
- rc = devm_nsio_enable(dev, nsio);
+ rc = devm_nsio_enable(dev, nsio, info_block_reserve());
if (rc)
return ERR_PTR(rc);
rc = nvdimm_setup_pfn(nd_pfn, &pgmap);
diff --git a/drivers/nvdimm/claim.c b/drivers/nvdimm/claim.c
index 2985ca949912..d89d2c039e25 100644
--- a/drivers/nvdimm/claim.c
+++ b/drivers/nvdimm/claim.c
@@ -300,12 +300,12 @@ static int nsio_rw_bytes(struct nd_namespace_common *ndns,
return rc;
}
-int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio)
+int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio, unsigned long size)
{
struct resource *res = &nsio->res;
struct nd_namespace_common *ndns = &nsio->common;
- nsio->size = resource_size(res);
+ nsio->size = size;
if (!devm_request_mem_region(dev, res->start, resource_size(res),
dev_name(&ndns->dev))) {
dev_warn(dev, "could not reserve region %pR\n", res);
@@ -318,8 +318,7 @@ int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio)
nvdimm_badblocks_populate(to_nd_region(ndns->dev.parent), &nsio->bb,
&nsio->res);
- nsio->addr = devm_memremap(dev, res->start, resource_size(res),
- ARCH_MEMREMAP_PMEM);
+ nsio->addr = devm_memremap(dev, res->start, size, ARCH_MEMREMAP_PMEM);
return PTR_ERR_OR_ZERO(nsio->addr);
}
diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
index ee5c04070ef9..93d3c760c0f3 100644
--- a/drivers/nvdimm/nd.h
+++ b/drivers/nvdimm/nd.h
@@ -376,7 +376,7 @@ void nvdimm_badblocks_populate(struct nd_region *nd_region,
#define MAX_STRUCT_PAGE_SIZE 64
int nvdimm_setup_pfn(struct nd_pfn *nd_pfn, struct dev_pagemap *pgmap);
-int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio);
+int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio, unsigned long size);
void devm_nsio_disable(struct device *dev, struct nd_namespace_io *nsio);
#else
static inline int nvdimm_setup_pfn(struct nd_pfn *nd_pfn,
@@ -385,7 +385,7 @@ static inline int nvdimm_setup_pfn(struct nd_pfn *nd_pfn,
return -ENXIO;
}
static inline int devm_nsio_enable(struct device *dev,
- struct nd_namespace_io *nsio)
+ struct nd_namespace_io *nsio, unsigned long size)
{
return -ENXIO;
}
diff --git a/drivers/nvdimm/pfn.h b/drivers/nvdimm/pfn.h
index acb19517f678..f4856c87d01c 100644
--- a/drivers/nvdimm/pfn.h
+++ b/drivers/nvdimm/pfn.h
@@ -36,4 +36,10 @@ struct nd_pfn_sb {
__le64 checksum;
};
+static inline u32 info_block_reserve(void)
+{
+ return ALIGN(SZ_8K, PAGE_SIZE);
+}
+
+
#endif /* __NVDIMM_PFN_H */
diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
index 60d81fae06ee..e49aa9a0fd04 100644
--- a/drivers/nvdimm/pfn_devs.c
+++ b/drivers/nvdimm/pfn_devs.c
@@ -635,11 +635,6 @@ int nd_pfn_probe(struct device *dev, struct nd_namespace_common *ndns)
}
EXPORT_SYMBOL(nd_pfn_probe);
-static u32 info_block_reserve(void)
-{
- return ALIGN(SZ_8K, PAGE_SIZE);
-}
-
/*
* We hotplug memory at sub-section granularity, pad the reserved area
* from the previous section base to the namespace base address.
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index f9f76f6ba07b..3c188ffeff11 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -491,17 +491,26 @@ static int pmem_attach_disk(struct device *dev,
static int nd_pmem_probe(struct device *dev)
{
int ret;
+ struct nd_namespace_io *nsio;
struct nd_namespace_common *ndns;
ndns = nvdimm_namespace_common_probe(dev);
if (IS_ERR(ndns))
return PTR_ERR(ndns);
- if (devm_nsio_enable(dev, to_nd_namespace_io(&ndns->dev)))
- return -ENXIO;
+ nsio = to_nd_namespace_io(&ndns->dev);
- if (is_nd_btt(dev))
+ if (is_nd_btt(dev)) {
+ /*
+ * Map with resource size
+ */
+ if (devm_nsio_enable(dev, nsio, resource_size(&nsio->res)))
+ return -ENXIO;
return nvdimm_namespace_attach_btt(ndns);
+ }
+
+ if (devm_nsio_enable(dev, nsio, info_block_reserve()))
+ return -ENXIO;
if (is_nd_pfn(dev))
return pmem_attach_disk(dev, ndns);
--
2.21.0
1 year, 4 months
[PATCH V1 1/2] libnvdimm/nsio: differentiate between probe mapping and runtime mapping
by Aneesh Kumar K.V
nvdimm core currently maps the full namespace to an ioremap range
while probing the namespace mode. This can result in probe failures
on architectures that have limited ioremap space.
nvdimm core can avoid this failure by only mapping the reserver block area to
check for pfn superblock type and map the full namespace resource only before
using the namespace. nvdimm core use ioremap range only for the raw and btt
namespace and we can limit the max namespace size for these two modes. For
both fsdax and devdax this change enables nvdimm to map namespace larger
that ioremap limit.
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar(a)linux.ibm.com>
---
drivers/nvdimm/blk.c | 2 +-
drivers/nvdimm/btt.c | 13 ++++++++++++-
drivers/nvdimm/claim.c | 2 +-
drivers/nvdimm/nd.h | 2 +-
drivers/nvdimm/pfn.h | 6 ++++++
drivers/nvdimm/pfn_devs.c | 5 -----
drivers/nvdimm/pmem.c | 2 +-
7 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/drivers/nvdimm/blk.c b/drivers/nvdimm/blk.c
index 677d6f45b5c4..755192332269 100644
--- a/drivers/nvdimm/blk.c
+++ b/drivers/nvdimm/blk.c
@@ -302,7 +302,7 @@ static int nd_blk_probe(struct device *dev)
ndns->rw_bytes = nsblk_rw_bytes;
if (is_nd_btt(dev))
- return nvdimm_namespace_attach_btt(ndns);
+ return nvdimm_namespace_attach_btt(dev, ndns);
else if (nd_btt_probe(dev, ndns) == 0) {
/* we'll come back as btt-blk */
return -ENXIO;
diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c
index 3e9f45aec8d1..a1e213e8ef81 100644
--- a/drivers/nvdimm/btt.c
+++ b/drivers/nvdimm/btt.c
@@ -1668,9 +1668,12 @@ static void btt_fini(struct btt *btt)
}
}
-int nvdimm_namespace_attach_btt(struct nd_namespace_common *ndns)
+int nvdimm_namespace_attach_btt(struct device *dev,
+ struct nd_namespace_common *ndns)
{
+ struct nd_namespace_io *nsio = to_nd_namespace_io(&ndns->dev);
struct nd_btt *nd_btt = to_nd_btt(ndns->claim);
+ struct resource *res = &nsio->res;
struct nd_region *nd_region;
struct btt_sb *btt_sb;
struct btt *btt;
@@ -1685,6 +1688,14 @@ int nvdimm_namespace_attach_btt(struct nd_namespace_common *ndns)
if (!btt_sb)
return -ENOMEM;
+ /*
+ * Remove the old mapping and do the full mapping.
+ */
+ devm_memunmap(dev, nsio->addr);
+ nsio->addr = devm_memremap(dev, res->start, resource_size(res),
+ ARCH_MEMREMAP_PMEM);
+ if (IS_ERR(nsio->addr))
+ return -ENXIO;
/*
* If this returns < 0, that is ok as it just means there wasn't
* an existing BTT, and we're creating a new one. We still need to
diff --git a/drivers/nvdimm/claim.c b/drivers/nvdimm/claim.c
index 2985ca949912..9f2e6646fcd4 100644
--- a/drivers/nvdimm/claim.c
+++ b/drivers/nvdimm/claim.c
@@ -318,7 +318,7 @@ int devm_nsio_enable(struct device *dev, struct nd_namespace_io *nsio)
nvdimm_badblocks_populate(to_nd_region(ndns->dev.parent), &nsio->bb,
&nsio->res);
- nsio->addr = devm_memremap(dev, res->start, resource_size(res),
+ nsio->addr = devm_memremap(dev, res->start, info_block_reserve(),
ARCH_MEMREMAP_PMEM);
return PTR_ERR_OR_ZERO(nsio->addr);
diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
index ee5c04070ef9..f51d51aa2f96 100644
--- a/drivers/nvdimm/nd.h
+++ b/drivers/nvdimm/nd.h
@@ -363,7 +363,7 @@ struct resource *nvdimm_allocate_dpa(struct nvdimm_drvdata *ndd,
resource_size_t nvdimm_namespace_capacity(struct nd_namespace_common *ndns);
bool nvdimm_namespace_locked(struct nd_namespace_common *ndns);
struct nd_namespace_common *nvdimm_namespace_common_probe(struct device *dev);
-int nvdimm_namespace_attach_btt(struct nd_namespace_common *ndns);
+int nvdimm_namespace_attach_btt(struct device *dev, struct nd_namespace_common *ndns);
int nvdimm_namespace_detach_btt(struct nd_btt *nd_btt);
const char *nvdimm_namespace_disk_name(struct nd_namespace_common *ndns,
char *name);
diff --git a/drivers/nvdimm/pfn.h b/drivers/nvdimm/pfn.h
index acb19517f678..f4856c87d01c 100644
--- a/drivers/nvdimm/pfn.h
+++ b/drivers/nvdimm/pfn.h
@@ -36,4 +36,10 @@ struct nd_pfn_sb {
__le64 checksum;
};
+static inline u32 info_block_reserve(void)
+{
+ return ALIGN(SZ_8K, PAGE_SIZE);
+}
+
+
#endif /* __NVDIMM_PFN_H */
diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
index 60d81fae06ee..e49aa9a0fd04 100644
--- a/drivers/nvdimm/pfn_devs.c
+++ b/drivers/nvdimm/pfn_devs.c
@@ -635,11 +635,6 @@ int nd_pfn_probe(struct device *dev, struct nd_namespace_common *ndns)
}
EXPORT_SYMBOL(nd_pfn_probe);
-static u32 info_block_reserve(void)
-{
- return ALIGN(SZ_8K, PAGE_SIZE);
-}
-
/*
* We hotplug memory at sub-section granularity, pad the reserved area
* from the previous section base to the namespace base address.
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index f9f76f6ba07b..69956e49ec56 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -501,7 +501,7 @@ static int nd_pmem_probe(struct device *dev)
return -ENXIO;
if (is_nd_btt(dev))
- return nvdimm_namespace_attach_btt(ndns);
+ return nvdimm_namespace_attach_btt(dev, ndns);
if (is_nd_pfn(dev))
return pmem_attach_disk(dev, ndns);
--
2.21.0
1 year, 4 months
[PATCH] libnvdimm: fix kernel-doc notation
by luanshi
Fix kernel-doc notation in drivers/nvdimm/namespace_devs.c.
Fixes: bf9bccc14c05 ("libnvdimm: pmem label sets and namespace instantiation.")
Signed-off-by: Liguang Zhang <zhangliguang(a)linux.alibaba.com>
---
drivers/nvdimm/namespace_devs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/nvdimm/namespace_devs.c b/drivers/nvdimm/namespace_devs.c
index cca0a3b..5cfb1e9 100644
--- a/drivers/nvdimm/namespace_devs.c
+++ b/drivers/nvdimm/namespace_devs.c
@@ -1900,7 +1900,7 @@ static int select_pmem_id(struct nd_region *nd_region, u8 *pmem_id)
/**
* create_namespace_pmem - validate interleave set labelling, retrieve label0
* @nd_region: region with mappings to validate
- * @nspm: target namespace to create
+ * @ndindex: target namespace index to create
* @nd_label: target pmem namespace label to evaluate
*/
static struct device *create_namespace_pmem(struct nd_region *nd_region,
--
1.8.3.1
1 year, 4 months
Re: GOODNEWS YOU HAVE WON A CAR & CASH PRIZE. CHECK EMAIL
by TOYOTA LOTTERY ORGANIZATION
Toyota Lottery Organization.
Email: toyotalotterypro(a)aol.com
Dear Winner,
EMAIL WINNING NUMBER: TYT-0077-981-19
We are glad to inform you that your E-mail Address has won you
the cash prize of USD$800,000,00 (Eight Hundred Thousand USD)
including a TOYOTA HIGHLANDER. NO TICKETS WERE SOLD.
Email Winning Details: TYT-0077-981-19
Batch Number: 079/20/TT46
Category: 3rd category
To file for your claim you are to contact claims agent
immediately at email below in order to match up your winning
email address:
FULL NAME:
CONTACT ADDRESS:
COUNTRY:
AGE:
MAN/WOMAN:
YOUR OCCUPATION:
MOBILE NUMBER:
You must not reveal winning information to anyone or persons.
This is to avoid double claiming of your winning prize.
Congratulations!!!
Yours Faithfully,
Online Coordinators
Toyota Lottery Organization.
E-mail: toyotalotterypro(a)aol.com
Joan; 0081 800-331-4331
Lily; 0086 571-8502-2044
1 year, 4 months
linux-nvdimm@lists.01.org 被黑了! 立即更改密码!
by linux-nvdimm@lists.01.org
我问候你!
我有个坏消息。
15/06/2019 - 在这一天,我攻击了您的操作系统并完全访问了您的帐户 linux-nvdimm(a)lists.01.org。
就是这样。
在您当天连接的路由器的软件中,存在一个漏洞。
我首先攻击了这个路由器并将恶意代码放在上面。
当您通过Internet输入时,我的木马安装在您设备的操作系统上。
之后,我完成了你的磁盘转储(我有你所有的地址簿,查看网站的历史记录,所有文件,电话号码和所有联系人的地址)。
一个月前,我想锁定你的设备并要求少量资金解锁。
但我查看了您经常访问的网站。 你最喜欢的资源令我震惊。
我说的是成人网站。
我想说 - 你是个大变态者。你有一个令人眼花缭乱的幻想!
在那之后,我想到了一个想法。
我制作了你喜欢的成人网站的截图(你知道我的意思,是吗?)。
之后,我在浏览本网站时拍摄了你和你的娱乐照片(我使用了你设备的相机)。
结果很棒! 不要犹豫!
我深信您不想向您的亲戚,朋友或同事展示这些照片。
我认为786美元对于我的沉默是少量的。
此外,我花了很多时间在你身上!
我在比特币接受钱。
我的BTC钱包: 1FM76fWQ6rGyCvjWojshgsbbCK6R8rLWJS
您不知道如何补充比特币钱包?
在任何搜索引擎中写“如何补充btc钱包”。
这很简单。
对于付款,你有两天多一点(恰好50小时)。
别担心,计时器将在您打开此信件时开始。是的,是的..它已经开始了!
付款后,我的病毒和你的妥协自动毁灭。
如果我没有收到您指定的金额,您的设备将被屏蔽,您的所有联系人都会收到您娱乐的照片。
要谨慎!
- 不要试图找到并摧毁我的病毒! (您的所有数据都已上传到远程服务器)
- 不要试图联系我(这是不可能的,我通过您的帐户向您发送了此电子邮件)
- 各种安全服务对您没有帮助;格式化磁盘或销毁设备也无济于事,因为您的数据已经在远程服务器上。
附:我保证,付款后我不会打扰你,因为你不是我唯一的客户。
这是一个黑客的荣誉准则。
从现在开始,我建议你使用好的防病毒软件并定期更新(每天几次)!
不要生我的气,每个人都有自己的工作。
再见。
1 year, 4 months
Структура рабочего времени
by Antonina
Нормирование труда, как гарантия роста эффективности труда сотрудников
Дата проведения: 22 октября
В программе :
1. Нормирование труда. Законодательство о нормировании труда. Изменение и пересмотр норм.
2. Структура рабочего времени. Виды норм и методы нормирования. Практикум: расчет штучного времени и норм времени на партию изделий; расчет взаимных изменений норм времени и выработки.
3. Расчет численности персонала на основе любых норм. Практикум: расчет численности персонала по нормам времени, обслуживания и выработки.
4. Нормирование различных трудовых процессов (ручные, машинные, автоматизированные). Норма времени для бригады. Практикум: расчет бригадной нормы времени, трудоемкости и внутрибригадных потерь рабочего времени.
5. Разработка норм труда: хронометраж Практикум: обработка результатов хронометража и расчет нормы времени.
6. Разработка норм труда: фотография рабочего времени/ Практикум: обработка результатов индивидуальных фотографий рабочего времени, а также выполненных методами групповой фотографии и моментных наблюдений.
7. "Бюрократический практикум" - документы для утверждения и ввода в действие норм труда.
8. "Нормируем всех" - особенности нормирования различных видов работ и профессий (руководителя, специалисты, служащие, рабочие) на примере готовых норм труда.
9. Контроль выполнения норм, анализ выполнения норм.
Дополнительно>
Новости
Читать...
Новости туризма
Читать...
Интернет
Читать...
--
С уважением,
Надежда Кирилловна
email-маркетолог
Web: http://ukrved.in.ua/
Вы получили данное письмо, так как подписаны на рассылку. Если письмо попало к Вам по ошибке, Вы можете
Отказаться от рассылки. или пожаловаться на Спам!
List-Unsubscribe from the newsletter or complain about Spam!
1 year, 4 months