[PATCH v2] libndctl: add support for the MSFT family of DSM functions
by Lijun Pan
From: Lijun Pan <Lijun.Pan(a)dell.com>
This patch retrieves the health data from NVDIMM-N via
the MSFT _DSM function[1], following JESD245A[2] standards.
Now 'ndctl list --dimms --health --idle' could work
on MSFT type NVDIMM-N, but limited to health_state,
temperature_celsius, and life_used_percentage.
[1]. https://msdn.microsoft.com/library/windows/hardware/mt604741
[2]. https://www.jedec.org/sites/default/files/docs/JESD245A.pdf
Cc: Stuart Hayes <Stuart.Hayes(a)dell.com>
Signed-off-by: Lijun Pan <Lijun.Pan(a)dell.com>
---
v2:
- v2 combines v1's 1/2 and 2/2
- reuse the existing libndctl abstraction (suggested by Dan)
- move the MSFT _DSM code under ndctl/lib/
- the closet common field we can have between MSFT _DSM and smart is
health_state, temperature_celsius, and life_used_percentage.
ndctl/lib/Makefile.am | 1 +
ndctl/lib/libndctl-msft.c | 143 +++++++++++++++++++++++++++++++++++++++++++
ndctl/lib/libndctl-private.h | 4 ++
ndctl/lib/libndctl.c | 2 +
ndctl/lib/ndctl-msft.h | 63 +++++++++++++++++++
5 files changed, 213 insertions(+)
create mode 100644 ndctl/lib/libndctl-msft.c
create mode 100644 ndctl/lib/ndctl-msft.h
diff --git a/ndctl/lib/Makefile.am b/ndctl/lib/Makefile.am
index 58a0bb3..7a446be 100644
--- a/ndctl/lib/Makefile.am
+++ b/ndctl/lib/Makefile.am
@@ -32,6 +32,7 @@ endif
if ENABLE_SMART
libndctl_la_SOURCES += libndctl-smart.c
libndctl_la_SOURCES += libndctl-hpe1.c
+libndctl_la_SOURCES += libndctl-msft.c
endif
EXTRA_DIST += libndctl.sym
diff --git a/ndctl/lib/libndctl-msft.c b/ndctl/lib/libndctl-msft.c
new file mode 100644
index 0000000..868e5c0
--- /dev/null
+++ b/ndctl/lib/libndctl-msft.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright (C) 2016-2017 Dell, Inc.
+ * Copyright (C) 2016 Hewlett Packard Enterprise Development LP
+ * Copyright (c) 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 <stdlib.h>
+#include <limits.h>
+#include <util/log.h>
+#include <ndctl/libndctl.h>
+#include "libndctl-private.h"
+#include "ndctl-msft.h"
+
+#define CMD_MSFT(_c) ((_c)->msft)
+#define CMD_MSFT_SMART(_c) (CMD_MSFT(_c)->u.smart.data)
+
+static struct ndctl_cmd *msft_dimm_cmd_new_smart(struct ndctl_dimm *dimm)
+{
+ struct ndctl_bus *bus = ndctl_dimm_get_bus(dimm);
+ struct ndctl_ctx *ctx = ndctl_bus_get_ctx(bus);
+ struct ndctl_cmd *cmd;
+ size_t size;
+ struct ndn_pkg_msft *msft;
+
+ if (!ndctl_dimm_is_cmd_supported(dimm, ND_CMD_CALL)) {
+ dbg(ctx, "unsupported cmd\n");
+ return NULL;
+ }
+
+ size = sizeof(*cmd) + sizeof(struct ndn_pkg_msft);
+ cmd = calloc(1, size);
+ if (!cmd)
+ return NULL;
+
+ cmd->dimm = dimm;
+ ndctl_cmd_ref(cmd);
+ cmd->type = ND_CMD_CALL;
+ cmd->size = size;
+ cmd->status = 1;
+
+ msft = CMD_MSFT(cmd);
+ msft->gen.nd_family = NVDIMM_FAMILY_MSFT;
+ msft->gen.nd_command = NDN_MSFT_CMD_SMART;
+ msft->gen.nd_fw_size = 0;
+ msft->gen.nd_size_in = offsetof(struct ndn_msft_smart, status);
+ msft->gen.nd_size_out = sizeof(msft->u.smart);
+ msft->u.smart.status = 0;
+
+ cmd->firmware_status = &msft->u.smart.status;
+
+ return cmd;
+}
+
+static int msft_smart_valid(struct ndctl_cmd *cmd)
+{
+ if (cmd->type != ND_CMD_CALL ||
+ cmd->size != sizeof(*cmd) + sizeof(struct ndn_pkg_msft) ||
+ CMD_MSFT(cmd)->gen.nd_family != NVDIMM_FAMILY_MSFT ||
+ CMD_MSFT(cmd)->gen.nd_command != NDN_MSFT_CMD_SMART ||
+ cmd->status != 0)
+ return cmd->status < 0 ? cmd->status : -EINVAL;
+ return 0;
+}
+
+static unsigned int msft_cmd_smart_get_flags(struct ndctl_cmd *cmd)
+{
+ if (msft_smart_valid(cmd) < 0)
+ return UINT_MAX;
+
+ /* below health data can be retrieved via MSFT _DSM function 11 */
+ return NDN_MSFT_SMART_HEALTH_VALID |
+ NDN_MSFT_SMART_TEMP_VALID |
+ NDN_MSFT_SMART_USED_VALID;
+}
+
+static unsigned int num_set_bit_health(__u16 num)
+{
+ int i;
+ __u16 n = num & 0x7FFF;
+ unsigned int count = 0;
+
+ for (i = 0; i < 15; i++)
+ if (!!(n & (1 << i)))
+ count++;
+
+ return count;
+}
+
+static unsigned int msft_cmd_smart_get_health(struct ndctl_cmd *cmd)
+{
+ unsigned int health;
+ unsigned int num;
+
+ if (msft_smart_valid(cmd) < 0)
+ return UINT_MAX;
+
+ num = num_set_bit_health(CMD_MSFT_SMART(cmd)->health);
+ if (num == 0)
+ health = 0;
+ else if (num < 2)
+ health = ND_SMART_NON_CRITICAL_HEALTH;
+ else if (num < 3)
+ health = ND_SMART_CRITICAL_HEALTH;
+ else
+ health = ND_SMART_FATAL_HEALTH;
+
+ return health;
+}
+
+static unsigned int msft_cmd_smart_get_temperature(struct ndctl_cmd *cmd)
+{
+ if (msft_smart_valid(cmd) < 0)
+ return UINT_MAX;
+ /*
+ * refer to JESD245 spec section 7.8 to calculate the temperature
+ * then convert to 1/16 Celsius granularity.
+ */
+ return CMD_MSFT_SMART(cmd)->temp & 0x0FFC;
+}
+
+static unsigned int msft_cmd_smart_get_life_used(struct ndctl_cmd *cmd)
+{
+ if (msft_smart_valid(cmd) < 0)
+ return UINT_MAX;
+
+ return 100 - CMD_MSFT_SMART(cmd)->nvm_lifetime;
+}
+
+struct ndctl_smart_ops * const msft_smart_ops = &(struct ndctl_smart_ops) {
+ .new_smart = msft_dimm_cmd_new_smart,
+ .smart_get_flags = msft_cmd_smart_get_flags,
+ .smart_get_health = msft_cmd_smart_get_health,
+ .smart_get_temperature = msft_cmd_smart_get_temperature,
+ .smart_get_life_used = msft_cmd_smart_get_life_used,
+};
diff --git a/ndctl/lib/libndctl-private.h b/ndctl/lib/libndctl-private.h
index 3e67db0..8f10fbc 100644
--- a/ndctl/lib/libndctl-private.h
+++ b/ndctl/lib/libndctl-private.h
@@ -32,6 +32,7 @@
#include <ccan/endian/endian.h>
#include <ccan/short_types/short_types.h>
#include "ndctl-hpe1.h"
+#include "ndctl-msft.h"
#define SZ_16M 0x01000000
@@ -196,6 +197,7 @@ struct ndctl_cmd {
struct nd_cmd_clear_error clear_err[0];
#endif
struct ndn_pkg_hpe1 hpe1[0];
+ struct ndn_pkg_msft msft[0];
struct nd_cmd_smart smart[0];
struct nd_cmd_smart_threshold smart_t[0];
struct nd_cmd_get_config_size get_size[0];
@@ -226,9 +228,11 @@ struct ndctl_smart_ops {
#if HAS_SMART == 1
struct ndctl_smart_ops * const intel_smart_ops;
struct ndctl_smart_ops * const hpe1_smart_ops;
+struct ndctl_smart_ops * const msft_smart_ops;
#else
static struct ndctl_smart_ops * const intel_smart_ops = NULL;
static struct ndctl_smart_ops * const hpe1_smart_ops = NULL;
+static struct ndctl_smart_ops * const msft_smart_ops = NULL;
#endif
/* internal library helpers for conditionally defined command numbers */
diff --git a/ndctl/lib/libndctl.c b/ndctl/lib/libndctl.c
index 565c969..e5e027a 100644
--- a/ndctl/lib/libndctl.c
+++ b/ndctl/lib/libndctl.c
@@ -1254,6 +1254,8 @@ static void *add_dimm(void *parent, int id, const char *dimm_base)
dimm->dsm_family = strtoul(buf, NULL, 0);
if (dimm->dsm_family == NVDIMM_FAMILY_HPE1)
dimm->smart_ops = hpe1_smart_ops;
+ if (dimm->dsm_family == NVDIMM_FAMILY_MSFT)
+ dimm->smart_ops = msft_smart_ops;
dimm->formats = formats;
sprintf(path, "%s/nfit/format", dimm_base);
diff --git a/ndctl/lib/ndctl-msft.h b/ndctl/lib/ndctl-msft.h
new file mode 100644
index 0000000..0a1c7c6
--- /dev/null
+++ b/ndctl/lib/ndctl-msft.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2016-2017 Dell, Inc.
+ * Copyright (C) 2016 Hewlett Packard Enterprise Development LP
+ * Copyright (c) 2014-2015, 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.
+ */
+#ifndef __NDCTL_MSFT_H__
+#define __NDCTL_MSFT_H__
+
+enum {
+ NDN_MSFT_CMD_QUERY = 0,
+
+ /* non-root commands */
+ NDN_MSFT_CMD_SMART = 11,
+};
+
+/* NDN_MSFT_CMD_SMART */
+#define NDN_MSFT_SMART_HEALTH_VALID ND_SMART_HEALTH_VALID
+#define NDN_MSFT_SMART_TEMP_VALID ND_SMART_TEMP_VALID
+#define NDN_MSFT_SMART_USED_VALID ND_SMART_USED_VALID
+
+/*
+ * This is actually function 11 data,
+ * This is the closest I can find to match smart
+ * Microsoft _DSM does not have smart function
+ */
+struct ndn_msft_smart_data {
+ __u16 health;
+ __u16 temp;
+ __u8 err_thresh_stat;
+ __u8 warn_thresh_stat;
+ __u8 nvm_lifetime;
+ __u8 count_dram_uncorr_err;
+ __u8 count_dram_corr_err;
+} __attribute__((packed));
+
+struct ndn_msft_smart {
+ __u32 status;
+ union {
+ __u8 buf[9];
+ struct ndn_msft_smart_data data[0];
+ };
+} __attribute__((packed));
+
+union ndn_msft_cmd {
+ __u32 query;
+ struct ndn_msft_smart smart;
+} __attribute__((packed));
+
+struct ndn_pkg_msft {
+ struct nd_cmd_pkg gen;
+ union ndn_msft_cmd u;
+} __attribute__((packed));
+
+#endif /* __NDCTL_MSFT_H__ */
--
1.8.3.1
3 years, 9 months
[ndctl PATCH] completion: updates for file name completion
by Vishal Verma
Add file name completion for the --input and --output arguments of
read-labels and the new write-labels commands.
Signed-off-by: Vishal Verma <vishal.l.verma(a)intel.com>
---
contrib/ndctl | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/contrib/ndctl b/contrib/ndctl
index c97adcc..076423f 100755
--- a/contrib/ndctl
+++ b/contrib/ndctl
@@ -91,7 +91,7 @@ __ndctlcomp()
COMPREPLY=( $( compgen -W "$1" -- "$2" ) )
for cword in "${COMPREPLY[@]}"; do
- if [[ "$cword" == @(--bus|--region|--type|--mode|--size|--dimm|--reconfig|--uuid|--name|--sector-size|--map|--namespace) ]]; then
+ if [[ "$cword" == @(--bus|--region|--type|--mode|--size|--dimm|--reconfig|--uuid|--name|--sector-size|--map|--namespace|--input|--output) ]]; then
COMPREPLY[$i]="${cword}="
else
COMPREPLY[$i]="${cword} "
@@ -132,6 +132,11 @@ __ndctl_get_dimms()
echo "$(ndctl list $opts | grep -E "^\s*\"dev\":" | cut -d\" -f4)"
}
+__ndctl_file_comp()
+{
+ local cur="$1"
+ _filedir
+}
__ndctl_comp_options()
{
local cur=$1
@@ -171,6 +176,12 @@ __ndctl_comp_options()
--map)
opts="mem dev"
;;
+ --output)
+ ;&
+ --input)
+ __ndctl_file_comp "${cur##*=}"
+ return
+ ;;
*)
return
;;
@@ -215,6 +226,8 @@ __ndctl_comp_non_option_args()
;&
read-labels)
;&
+ write-labels)
+ ;&
zero-labels)
opts="$(__ndctl_get_dimms -i) all"
;;
--
2.9.3
3 years, 10 months
We have delivery problems with your parcel # 546354452
by USPS International
Hello,
Your item has arrived at Wed, 29 Mar 2017 01:39:44 -0700, but our courier
was not able to deliver the parcel.
You can download the shipment label attached!
Thank you for your time.
Knight Staberg - USPS Senior Support Manager.
3 years, 10 months
[ndctl PATCH] Documentation, write-labels: add man page
by Dan Williams
Unlike read-labels, the write-labels command is meant to be run against
one dimm at a time. This hopefully avoids confusion trying to match
input files to output devices.
Signed-off-by: Dan Williams <dan.j.williams(a)intel.com>
---
Documentation/Makefile.am | 1 +
Documentation/ndctl-write-labels.txt | 29 +++++++++++++++++++++++++++++
2 files changed, 30 insertions(+)
create mode 100644 Documentation/ndctl-write-labels.txt
diff --git a/Documentation/Makefile.am b/Documentation/Makefile.am
index eea11e087012..d72085df4845 100644
--- a/Documentation/Makefile.am
+++ b/Documentation/Makefile.am
@@ -2,6 +2,7 @@ man1_MANS = \
ndctl.1 \
ndctl-zero-labels.1 \
ndctl-read-labels.1 \
+ ndctl-write-labels.1 \
ndctl-init-labels.1 \
ndctl-check-labels.1 \
ndctl-enable-region.1 \
diff --git a/Documentation/ndctl-write-labels.txt b/Documentation/ndctl-write-labels.txt
new file mode 100644
index 000000000000..bace46fba160
--- /dev/null
+++ b/Documentation/ndctl-write-labels.txt
@@ -0,0 +1,29 @@
+ndctl-write-labels(1)
+=====================
+
+NAME
+----
+ndctl-write-labels - write data to the label area on a dimm
+
+SYNOPSIS
+--------
+[verse]
+'ndctl write-labels <nmem> [-i <filename>]'
+
+include::labels-description.txt[]
+Read data from the input filename, or stdin, and write it to the given
+<nmem> device. Note that the device must not be active in any region,
+otherwise the kernel will not allow write access to the device's label
+data area.
+
+OPTIONS
+-------
+include::labels-options.txt[]
+-i::
+--input::
+ input file
+
+SEE ALSO
+--------
+http://pmem.io/documents/NVDIMM_Namespace_Spec.pdf[NVDIMM Namespace
+Specification]
3 years, 10 months
[ndctl PATCH] ndctl, {read, write}-labels: add long options for -i and -o
by Dan Williams
Without long options the bash completion code is unable to determine the
available options with "--list-opts".
Reported-by: Vishal Verma <vishal.l.verma(a)intel.com>
Signed-off-by: Dan Williams <dan.j.williams(a)intel.com>
---
Documentation/ndctl-read-labels.txt | 1 +
ndctl/dimm.c | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/Documentation/ndctl-read-labels.txt b/Documentation/ndctl-read-labels.txt
index 9c3acede8723..ecef164c3283 100644
--- a/Documentation/ndctl-read-labels.txt
+++ b/Documentation/ndctl-read-labels.txt
@@ -18,6 +18,7 @@ OPTIONS
-------
include::labels-options.txt[]
-o::
+--output::
output file
-j::
--json::
diff --git a/ndctl/dimm.c b/ndctl/dimm.c
index 4d25417fb2ae..f6a07a7f4c6e 100644
--- a/ndctl/dimm.c
+++ b/ndctl/dimm.c
@@ -790,12 +790,12 @@ OPT_STRING('b', "bus", ¶m.bus, "bus-id", \
OPT_BOOLEAN('v',"verbose", ¶m.verbose, "turn on debug")
#define READ_OPTIONS() \
-OPT_STRING('o', NULL, ¶m.outfile, "output-file", \
+OPT_STRING('o', "output", ¶m.outfile, "output-file", \
"filename to write label area contents"), \
OPT_BOOLEAN('j', "json", ¶m.json, "parse label data into json")
#define WRITE_OPTIONS() \
-OPT_STRING('i', NULL, ¶m.infile, "input-file", \
+OPT_STRING('i', "input", ¶m.infile, "input-file", \
"filename to read label area data")
#define INIT_OPTIONS() \
3 years, 10 months
Excellent 3D Printing Opportunities (Ventura, CA)
by Nicholas Meyler
New Exclusive Retained Searches from
Wingate Dunross, Inc.
My new client in Ventura, CA has retained me on a set of exciting new searches in the field of 3D Printing, one of the hottest growth fields in the high-technology world.
Imagine a world where everybody can create.
Imagine the fastest and the most accurate 3D Printer.
Imagine a 3D Printer really easy-to-use.
A 3D Printer perfect for the industrial and professional users.
A 3D Printer driven by an Intelligent System, by a Cognitive System.
The Best Technology in The Best Design.
And now we need your help.
About My Client:
My Client is a 3D printing startup that integrates the latest exponential technologies in components, sensors, optical systems and chemistry to apply Moore’s Law to a new, proprietary 3D Printing technology. The result is a desktop, professional 3D Printer that takes 3D Printing from hours to minutes making it FASTER, with a LARGER build volume, at HIGHER resolutions and a LOWER cost. They're doing this with a user experience and a design oriented approach making their 3D technology elegant and compact.
Their 3D printer has been designed to offer the best and the smartest ultra-fast 3D Printing experience, from a clean cartridge system to a complete cognitive hardware and stand-alone technology that let users adopt this machine quickly in any kind of environment and for any type of usage.
(1) SOFTWARE ENGINEER
VENTURA (CA) | ENGINEERING | FULL-TIME
Job Description:
The Software Engineer will be responsible for the design, development, implementation and maintenance of software for the 3D Printer.
Responsibilities:
Create technical specifications and develop software solutions based upon the specifications
Design, develop and implement software and associated features on the 3D Printer
Design and develop user interfaces and application frameworks that support communication with the 3D Printer Hardware and Firmware, 3D print file placement, file viewing, file editing and assigning process values
Collaborate and work closely with Systems, Mechanical, Electrical and Process Engineers to develop and implement the software features desired by those Engineers
Perform design and code reviews, unit-tests and system integrations
Develop software requirements and software project plan
Support QA testing of the developed software
Participate in software alpha and beta test programs
Experience:
3 to 5 years of experience in the relevant Engineering discipline
Requirements:
BS or MS in Computer Science or Computer Engineering
Three years of experience developing commercial software applications
Proficient in C#, .NET and C++
Excellent Object Oriented Design skills
Good knowledge of Operating Systems
Excellent knowledge of Embedded Systems
Good understanding of Communication Protocols
Experience with Application frameworks and design patterns
Experience with GUI Development using frameworks
Proficiency using modern software development processes, including software configuration management tools and defect tracking tools
Excellent documentation skills, communication skills and collaboration skills
(2) PRINT PROCESS ENGINEER
VENTURA (CA) | ENGINEERING | FULL-TIME
Job Description:
The Process Engineer will be responsible for the development and optimization of processes for the 3D Printer and its Print technology involving new equipment and new materials.
Responsibilities:
Develop, optimize and test processes for 3D Print technology involving associated hardware, software, materials and post-processing
Understand the complex system interactions between the software, hardware and materials as they relate to the print process
Heavily interact with Materials, Software, Mechanical, Electrical and Optical Engineers, while developing and optimizing processes with variable parameters using statistical methods
Heavily participate in printer integration activities involving various Engineering disciplines
Design test plans and execute testing of the 3D Printer’s hardware, software and materials
Evaluate printer performance and suggest areas for improvement
Assist various Engineers to scale up hardware and materials for manufactureability
Independently conduct hands-on experiments and develop thorough reports on the research
Participate in software, hardware and materials alpha and beta test programs
Experience:
3 to 5 years of experience in the relevant Engineering discipline
Requirements:
BS or MS in Chemical, Materials, Mechanical or Electrical Engineering
Strong analytical and problem solving skills to work on problems of diverse scope where analysis of data requires evaluation of multiple variables simultaneously
Experience in selecting methods and techniques for defining problems and obtaining solutions
Ability to identify the various abstract and concrete variables that control the process and determine and optimize the effect of those variables on the print process
Ability to partner with various Engineering cross functions and identify and report relevant problems
Experience and deep knowledge about statistics and process control
Ability to analyze the collected data and present the analysis in a statistical format
Ability to write reports, process guides and manuals
Strong communication, interpersonal and collaborative skills
(3) SYSTEMS ENGINEER
VENTURA (CA) | ENGINEERING | FULL-TIME
Job Description:
The Systems Engineer will be responsible for the system and subsystem (electrical and mechanical) architecture and design of their 3D Printer including conception, analysis, design, integration, optimization and testing of the System.
Responsibilities:
Responsible for analysis, design, building and integration of mechanical and electrical systems and subsystems for the 3D Printer
Collaborate directly with other Engineers to specify system requirements, implement designs and troubleshoot issues
Participate in design and development of motion control systems, motor drive electronics and micro-processor boards
Conduct design review with other Engineers and prepare system design documents
Conceptualize test plans for end-to-end validation strategy around all design changes that affect the printing process
Provide support for electrical and mechanical systems and subsystems from concept through production
Identify appropriate vendors and build initial relationships for procurement
Experience:
3 to 5 years of experience in the relevant Engineering discipline
Requirements:
BS or MS in Electrical or Mechanical Engineering
Proven experience in system requirements specification and design document preparation.
Strong knowledge of Electrical Engineering and Mechanical Engineering principles, processes and tools
Knowledge in electrical subsystem design
Strong understanding and knowledge of motion control systems and electric motors like Stepper and Servo motors
Experience developing motor drive electronics for different motor types
Circuit board design experience utilizing micro-processor based hardware – preferred but not required
Ability to develop low level firmware for processor based control boards
Project management capabilities - Ability to lead tasks, prioritizing actions, time management
Experience with CAD is required (preferably with SolidWorks)
Hands on attitude with the ability to operate standard soldering and electrical test equipment
Excellent documentation skills, communication skills and collaboration skills
Another Client is looking for a
(4) Senior Polymer Scientist (Cleveland, OH)
Duties/Responsibilities:
My exciting new Client is searching for a dynamic individual with experience in organic and polymer synthesis, and polymer application development. This Senior Polymer Scientist will be part of an application development group of scientists and chemists. Responsibilities will include conducting laboratory synthesis and polymer characterization, interpreting and reporting results, maintaining instrumentation, documenting procedures, validating test methods, developing new applications, and advising others on test method capabilities. They may serve as the project and customer point person for internal and external collaborations.
Education/Experience Requirements:
Ph.D. or M.S. in Polymer Chemistry, Materials Science, or Chemistry
5+ years of experience in polymer application development for microelectronics or other high value markets (e.g., display technologies, silicon wafer/chip coatings, OLED, biomedical applications, etc.)
Track record of successfully driving research and development projects to commercial success
Strong understanding of structure-property relationships for improvement of mechanical properties
Knowledge of polymer synthesis techniques (e.g., ROMP, organometallic catalysis, vinyl addition and free radical polymerization, condensation polymerization, etc.)
Understanding of methods to prepare photo-definable materials (e.g., positive-tone, negative-tone)
Familiarity with formulation chemistry (e.g. adhesion promoters, antioxidants, etc.)
Proficient with cleanroom equipment (e.g., spin-coating, photo-exposure alignment tools, profilometry, laser microscope, reactive ion-etch, sputtering, electroplating, etc.)
Familiarity with statistical analysis and Design of Experiments
Understanding of methods to characterize chemicals and materials by Instron, DSC, DMA, TGA, DRM, GPC, HPLC and NMR
Proven publication track record
Proven capability of working with patent attorney in scoping out the invention and drafting new patent applications
Willingness to spend majority of time in laboratory
Strong knowledge of chemical properties, hazards and safe handling practices
Proficiency in Japanese would be advantageous
General Skills and Physical Requirements:
Proficiency in MS Outlook, Word, Excel and PowerPoint
Good written and verbal communication skills
Good attention to detail and keen observation skills
Good interpersonal skills
Ability to maintain thorough, accurate records
Good mechanical aptitude
Ability to multi-task
Action-oriented
Manual dexterity required to use syringes and to operate and maintain instruments
Able to stand for prolonged periods of time, for up to 2 consecutive hours
Company Profile:
This Client is a wholly-owned subsidiary of a large corporation which is a pioneer in plastics with over 6,000 employees and $2Bn in annual sales. They are involved in the development of a novel platform of polymers based on cyclic olefins that are polymerized using a proprietary class of organometallic catalysts. Application areas include the semiconductor, optoelectronic and electronic packaging markets. Ongoing development and commercial activities with multiple Fortune 500 companies in the micro-electronics and semi-conductor industries is the primary business focus.
Benefits:
A wide range of competitive benefits including:
Comprehensive medical, dental, life insurance and disability plans available on the date of hire
Vacation and Holiday pay available on the date of hire
Competitive wages
401 (K) and Profit Sharing Plan
A great work environment
If you are interested in applying for one or more of these positions, please respond with a resume. Referrals and recommendations are also welcomed.
Best Regards,
Nicholas Meyler
President/GM, Technology
Wingate Dunross, Inc.
ph (818)597-3200 ext. 211
<nickm(a)wdsearch.com>
http://app.streamsend.com/private/u4Kt/nKR/rPOzpjo/unsubscribe/28637513
3 years, 10 months
[ndctl PATCH 0/6] ndctl: 'write-labels' and other misc updates
by Dan Williams
The primary change is the creation of a new 'write-labels' utility that
can replay the output from 'read-labels' back onto a given device
(nmem). This capability is then used to regression test label
compatibility.
Unrelated to write-labels support this series also takes the opportunity
to:
* clean up the source file names for the ndctl utility commands
* add some missing documentation
* fixup the summary output of dimm-related commands
---
Dan Williams (6):
ndctl: drop "builtin" prefix from source file names
Documentation, list: add --device-dax, -X description to man page
Documentation, list: add --mode, -m description to man page
ndctl, dimm: add 'write-labels' command
ndctl, dimm: fix count display in the presence of errors
test: add interleave set compatibility test
Documentation/ndctl-list.txt | 28 ++++++++
builtin.h | 1
ndctl/Makefile.am | 16 ++--
ndctl/bat.c | 0
ndctl/check.c | 0
ndctl/create-nfit.c | 0
ndctl/dimm.c | 138 +++++++++++++++++++++++++++++++++----
ndctl/list.c | 0
ndctl/namespace.c | 0
ndctl/ndctl.c | 1
ndctl/region.c | 0
ndctl/test.c | 0
test/Makefile.am | 11 ++-
test/label-compat.sh | 61 ++++++++++++++++
test/nmem1.bin | Bin
test/nmem2.bin | Bin
test/nmem3.bin | Bin
test/nmem4.bin | Bin
18 files changed, 228 insertions(+), 28 deletions(-)
rename ndctl/{builtin-bat.c => bat.c} (100%)
rename ndctl/{builtin-check.c => check.c} (100%)
rename ndctl/{builtin-create-nfit.c => create-nfit.c} (100%)
rename ndctl/{builtin-dimm.c => dimm.c} (88%)
rename ndctl/{builtin-list.c => list.c} (100%)
rename ndctl/{builtin-xaction-namespace.c => namespace.c} (100%)
rename ndctl/{builtin-xable-region.c => region.c} (100%)
rename ndctl/{builtin-test.c => test.c} (100%)
create mode 100755 test/label-compat.sh
create mode 100644 test/nmem1.bin
create mode 100644 test/nmem2.bin
create mode 100644 test/nmem3.bin
create mode 100644 test/nmem4.bin
3 years, 10 months
Delivery Problem, Reason: No Answer
by FedEx Package Support
Hello,
With this e-mail we'd like to inform you that we've tried to deliver your
parcel #006581822 today.
We kindly ask you to find the shipment notice enclosed for additional
details.
We appreciate you chosing our service.
Aidan Navia - FedEx Expedited Delivery
3 years, 10 months
[PATCH 00/13] dax, pmem: move cpu cache maintenance to libnvdimm
by Dan Williams
A couple weeks back, in the course of reviewing the memcpy_nocache()
proposal from Brian, Linus subtly suggested that the pmem specific
memcpy_to_pmem() routine be moved to be implemented at the driver
level [1]:
"Quite frankly, the whole 'memcpy_nocache()' idea or (ab-)using
copy_user_nocache() just needs to die. It's idiotic.
As you point out, it's also fundamentally buggy crap.
Throw it away. There is no possible way this is ever valid or
portable. We're not going to lie and claim that it is.
If some driver ends up using 'movnt' by hand, that is up to that
*driver*. But no way in hell should we care about this one whit in
the sense of <linux/uaccess.h>."
This feedback also dovetails with another fs/dax.c design wart of being
hard coded to assume the backing device is pmem. We call the pmem
specific copy, clear, and flush routines even if the backing device
driver is one of the other 3 dax drivers (axonram, dccssblk, or brd).
There is no reason to spend cpu cycles flushing the cache after writing
to brd, for example, since it is using volatile memory for storage.
Moreover, the pmem driver might be fronting a volatile memory range
published by the ACPI NFIT, or the platform might have arranged to flush
cpu caches on power fail. This latter capability is a feature that has
appeared in embedded storage appliances ("legacy" / pre-NFIT nvdimm
platforms).
So, this series:
1/ moves what was previously named "the pmem api" out of the global
namespace and into "that *driver*" (libnvdimm / pmem).
2/ arranges for dax to stop abusing copy_user_nocache() and implements a
libnvdimm-local memcpy that uses movnt
3/ makes cache maintenance optional by arranging for dax to call driver
specific copy and flush operations only if the driver publishes them.
4/ adds a module parameter that can be used to inform libnvdimm of a
platform-level flush-cache-on-power-fail capability.
[1]: https://lists.01.org/pipermail/linux-nvdimm/2017-January/008364.html
These patches have a build success notification from the 0day kbuild robot
and pass the libnvdimm / ndctl unit tests. I am looking to take them
through the libnvdimm tree with acks from x86, block, dm etc...
---
Dan Williams (13):
x86, dax, pmem: remove indirection around memcpy_from_pmem()
block, dax: introduce dax_operations
x86, dax, pmem: introduce 'copy_from_iter' dax operation
dax, pmem: introduce an optional 'flush' dax operation
x86, dax: replace clear_pmem() with open coded memset + dax_ops->flush
x86, dax, libnvdimm: move wb_cache_pmem() to libnvdimm
x86, libnvdimm, pmem: move arch_invalidate_pmem() to libnvdimm
x86, libnvdimm, dax: stop abusing __copy_user_nocache
libnvdimm, pmem: implement cache bypass for all copy_from_iter() operations
libnvdimm, pmem: fix persistence warning
libnvdimm, nfit: enable support for volatile ranges
libnvdimm, pmem: disable dax flushing when pmem is fronting a volatile region
libnvdimm, pmem: disable dax flushing for 'cache flush on fail' platforms
MAINTAINERS | 2
arch/powerpc/sysdev/axonram.c | 6 +
arch/x86/Kconfig | 1
arch/x86/include/asm/pmem.h | 121 ----------------------------
arch/x86/include/asm/string_64.h | 1
drivers/acpi/nfit/core.c | 15 ++-
drivers/block/brd.c | 6 +
drivers/md/dm.c | 6 +
drivers/nvdimm/Kconfig | 5 +
drivers/nvdimm/Makefile | 2
drivers/nvdimm/bus.c | 10 +-
drivers/nvdimm/claim.c | 9 +-
drivers/nvdimm/core.c | 2
drivers/nvdimm/dax_devs.c | 2
drivers/nvdimm/dimm_devs.c | 4 -
drivers/nvdimm/namespace_devs.c | 9 +-
drivers/nvdimm/nd-core.h | 9 ++
drivers/nvdimm/pfn_devs.c | 4 -
drivers/nvdimm/pmem.c | 46 ++++++++---
drivers/nvdimm/pmem.h | 20 +++++
drivers/nvdimm/region_devs.c | 52 ++++++++----
drivers/nvdimm/x86-asm.S | 71 ++++++++++++++++
drivers/nvdimm/x86.c | 84 +++++++++++++++++++
drivers/s390/block/dcssblk.c | 6 +
fs/block_dev.c | 6 +
fs/dax.c | 35 +++++++-
include/linux/blkdev.h | 10 ++
include/linux/libnvdimm.h | 9 ++
include/linux/pmem.h | 165 --------------------------------------
include/linux/string.h | 8 ++
include/linux/uio.h | 4 +
lib/Kconfig | 6 +
lib/iov_iter.c | 25 ++++++
tools/testing/nvdimm/Kbuild | 2
34 files changed, 405 insertions(+), 358 deletions(-)
delete mode 100644 arch/x86/include/asm/pmem.h
create mode 100644 drivers/nvdimm/x86-asm.S
create mode 100644 drivers/nvdimm/x86.c
delete mode 100644 include/linux/pmem.h
3 years, 10 months