Skip to content

Commit 6259c83

Browse files
committed
Merge remote-tracking branch 'oss/master' into initial-windows-support-for-meson-build-system
2 parents 75bb11d + c887564 commit 6259c83

16 files changed

Lines changed: 723 additions & 22 deletions

File tree

.github/workflows/upload.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
name: upload test binary
4949
runs-on: ubuntu-latest
5050
needs: build-static
51-
if: ${{ github.event_name == 'push' || github.event_name == 'release' && github.repository == 'linux-nvme/nvme-cli' }}
51+
if: ${{ (github.event_name == 'push' || github.event_name == 'release') && github.repository == 'linux-nvme/nvme-cli' }}
5252
steps:
5353
- uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0
5454
with:

libnvme/src/nvme/cmds.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,7 @@ int nvme_get_feature_length(int fid, __u32 cdw11, enum nvme_data_tfr dir,
563563
case NVME_FEAT_FID_RESV_PERSIST:
564564
case NVME_FEAT_FID_WRITE_PROTECT:
565565
case NVME_FEAT_FID_POWER_LIMIT:
566+
case NVME_FEAT_FID_POWER_MEASUREMENT:
566567
*len = 0;
567568
break;
568569
case NVME_FEAT_FID_ENH_CTRL_METADATA:

libnvme/src/nvme/types.h

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,6 +1092,16 @@ enum nvme_power_measurement_type {
10921092
NVME_PMT_VS_MAX = 0xf,
10931093
};
10941094

1095+
/**
1096+
* enum nvme_power_measurement_action - Power measurement actions.
1097+
* @NVME_PMA_STOP: Stop power measurement
1098+
* @NVME_PMA_START: Start power measurement
1099+
*/
1100+
enum nvme_power_measurement_action {
1101+
NVME_PMA_STOP = 0x0,
1102+
NVME_PMA_START = 0x1,
1103+
};
1104+
10951105
/**
10961106
* nvme_psd_power_scale() - power scale occupies the upper 3 bits
10971107
* @ps: power scale value
@@ -8835,7 +8845,7 @@ enum nvme_cmd_get_log_lid {
88358845
* @NVME_FEAT_FID_CONF_DEV_PERSONALITY: Configurable Device Personality
88368846
* @NVME_FEAT_FID_POWER_LIMIT: Power Limit
88378847
* @NVME_FEAT_FID_POWER_THRESH: Power Threshold
8838-
* @NVME_FEAT_FID_POEWR_MEASUREMENT: Power Measurement
8848+
* @NVME_FEAT_FID_POWER_MEASUREMENT: Power Measurement
88398849
* @NVME_FEAT_FID_EMB_MGMT_CTRL_ADDR: Embedded Management Controller Address
88408850
* @NVME_FEAT_FID_HOST_MGMT_AGENT_ADDR: Host Management Agent Address
88418851
* @NVME_FEAT_FID_ENH_CTRL_METADATA: Enhanced Controller Metadata
@@ -8885,7 +8895,7 @@ enum nvme_features_id {
88858895
NVME_FEAT_FID_CONF_DEV_PERSONALITY = 0x22,
88868896
NVME_FEAT_FID_POWER_LIMIT = 0x23,
88878897
NVME_FEAT_FID_POWER_THRESH = 0x24,
8888-
NVME_FEAT_FID_POEWR_MEASUREMENT = 0x25,
8898+
NVME_FEAT_FID_POWER_MEASUREMENT = 0x25,
88898899
NVME_FEAT_FID_EMB_MGMT_CTRL_ADDR = 0x78,
88908900
NVME_FEAT_FID_HOST_MGMT_AGENT_ADDR = 0x79,
88918901
NVME_FEAT_FID_ENH_CTRL_METADATA = 0x7d,
@@ -9041,6 +9051,8 @@ enum nvme_features_id {
90419051
* @NVME_FEAT_FDP_INDEX_MASK:
90429052
* @NVME_FEAT_FDP_EVENTS_ENABLE_SHIFT:
90439053
* @NVME_FEAT_FDP_EVENTS_ENABLE_MASK:
9054+
* @NVME_FEAT_HOST_ID_EXHID_SHIFT:
9055+
* @NVME_FEAT_HOST_ID_EXHID_MASK:
90449056
* @NVME_FEAT_BPWPC_BP0WPS_SHIFT:
90459057
* @NVME_FEAT_BPWPC_BP0WPS_MASK:
90469058
* @NVME_FEAT_BPWPC_BP1WPS_SHIFT:
@@ -9065,6 +9077,12 @@ enum nvme_features_id {
90659077
* @NVME_FEAT_POWER_THRESH_PMTS_MASK:
90669078
* @NVME_FEAT_POWER_THRESH_EPT_SHIFT:
90679079
* @NVME_FEAT_POWER_THRESH_EPT_MASK:
9080+
* @NVME_FEAT_POWER_MEAS_ACT_SHIFT:
9081+
* @NVME_FEAT_POWER_MEAS_ACT_MASK:
9082+
* @NVME_FEAT_POWER_MEAS_PMTS_SHIFT:
9083+
* @NVME_FEAT_POWER_MEAS_PMTS_MASK:
9084+
* @NVME_FEAT_POWER_MEAS_SMT_SHIFT:
9085+
* @NVME_FEAT_POWER_MEAS_SMT_MASK:
90689086
**/
90699087
enum nvme_feat {
90709088
NVME_FEAT_ARBITRATION_BURST_SHIFT = 0,
@@ -9211,6 +9229,8 @@ enum nvme_feat {
92119229
NVME_FEAT_FDP_INDEX_MASK = 0xf,
92129230
NVME_FEAT_FDP_EVENTS_ENABLE_SHIFT = 0,
92139231
NVME_FEAT_FDP_EVENTS_ENABLE_MASK = 0x1,
9232+
NVME_FEAT_HOST_ID_EXHID_SHIFT = 0,
9233+
NVME_FEAT_HOST_ID_EXHID_MASK = 0x1,
92149234
NVME_FEAT_BPWPC_BP0WPS_SHIFT = 0,
92159235
NVME_FEAT_BPWPC_BP0WPS_MASK = 0x7,
92169236
NVME_FEAT_BPWPC_BP1WPS_SHIFT = 3,
@@ -9231,6 +9251,12 @@ enum nvme_feat {
92319251
NVME_FEAT_POWER_THRESH_PMTS_MASK = 0xf,
92329252
NVME_FEAT_POWER_THRESH_EPT_SHIFT = 31,
92339253
NVME_FEAT_POWER_THRESH_EPT_MASK = 0x1,
9254+
NVME_FEAT_POWER_MEAS_ACT_SHIFT = 0,
9255+
NVME_FEAT_POWER_MEAS_ACT_MASK = 0xf,
9256+
NVME_FEAT_POWER_MEAS_PMTS_SHIFT = 4,
9257+
NVME_FEAT_POWER_MEAS_PMTS_MASK = 0xf,
9258+
NVME_FEAT_POWER_MEAS_SMT_SHIFT = 16,
9259+
NVME_FEAT_POWER_MEAS_SMT_MASK = 0xffff,
92349260
};
92359261

92369262
/**
@@ -10514,6 +10540,10 @@ static inline void nvme_feature_decode_arbitration(__u32 value, __u8 *ab,
1051410540
#define NVME_FEAT_POWER_THRESH_PMTS(v) NVME_GET(v, FEAT_POWER_THRESH_PMTS)
1051510541
#define NVME_FEAT_POWER_THRESH_EPT(v) NVME_GET(v, FEAT_POWER_THRESH_EPT)
1051610542

10543+
#define NVME_FEAT_POWER_MEAS_ACT(v) NVME_GET(v, FEAT_POWER_MEAS_ACT)
10544+
#define NVME_FEAT_POWER_MEAS_PMTS(v) NVME_GET(v, FEAT_POWER_MEAS_PMTS)
10545+
#define NVME_FEAT_POWER_MEAS_SMT(v) NVME_GET(v, FEAT_POWER_MEAS_SMT)
10546+
1051710547
static inline void
1051810548
nvme_feature_decode_power_mgmt(__u32 value, __u8 *ps, __u8 *wh)
1051910549
{
@@ -10732,6 +10762,14 @@ nvme_feature_decode_perf_characteristics(__u32 value, __u8 *attri, bool *rvspa)
1073210762
*rvspa = NVME_FEAT_PERFC_RVSPA(value);
1073310763
}
1073410764

10765+
#define NVME_FEAT_HOST_ID_EXHID(v) NVME_GET(v, FEAT_HOST_ID_EXHID)
10766+
10767+
static inline void
10768+
nvme_feature_decode_host_id(__u32 value, bool *exhid)
10769+
{
10770+
*exhid = NVME_FEAT_HOST_ID_EXHID(value);
10771+
}
10772+
1073510773
#define NVME_FEAT_SPM_PBSLC(v) NVME_GET(v, FEAT_SPM_PBSLC)
1073610774

1073710775
static inline void

nvme-print-json.c

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4133,10 +4133,12 @@ static void json_feature_show_fields_power_limit(struct json_object *r,
41334133
static void json_feature_show_fields_power_thresh(struct json_object *r,
41344134
unsigned int result)
41354135
{
4136-
__u8 field = NVME_FEAT_POWER_THRESH_EPT(result);
4137-
4136+
__u8 field;
4137+
__u16 ptv;
41384138
_cleanup_free_ char *k = NULL;
41394139

4140+
field = NVME_FEAT_POWER_THRESH_EPT(result);
4141+
41404142
obj_add_str(r, "Enable Power Threshold (EPT)",
41414143
field ? "Enabled" : "Disabled");
41424144

@@ -4148,13 +4150,33 @@ static void json_feature_show_fields_power_thresh(struct json_object *r,
41484150
obj_add_str(r, "Power Threshold Scale (PTS)",
41494151
nvme_feature_power_limit_scale_to_string(field));
41504152

4151-
field = NVME_FEAT_POWER_THRESH_PTV(result);
4152-
obj_add_uint(r, "Power Threshold Value (PTV)", field);
4153+
ptv = NVME_FEAT_POWER_THRESH_PTV(result);
4154+
4155+
obj_add_uint(r, "Power Threshold Value (PTV)", ptv);
41534156

4154-
k = get_power_and_scale(field, NVME_FEAT_POWER_THRESH_PTS(result));
4157+
k = get_power_and_scale(ptv, NVME_FEAT_POWER_THRESH_PTS(result));
41554158
obj_add_str(r, "Power Threshold", k);
41564159
}
41574160

4161+
static void json_feature_show_fields_power_meas(struct json_object *r,
4162+
unsigned int result)
4163+
{
4164+
__u8 field;
4165+
__u16 smt;
4166+
4167+
field = NVME_FEAT_POWER_MEAS_ACT(result);
4168+
obj_add_str(r, "Action (ACT)",
4169+
nvme_power_measurement_action_to_string(field));
4170+
4171+
field = NVME_FEAT_POWER_MEAS_PMTS(result);
4172+
obj_add_str(r, "Power Measurement Type Select (PMTS)",
4173+
nvme_power_measurement_type_to_string(field));
4174+
4175+
smt = NVME_FEAT_POWER_MEAS_SMT(result);
4176+
4177+
obj_add_uint(r, "Stop Measurement Time (SMT)", smt);
4178+
}
4179+
41584180
static void json_feature_show(enum nvme_features_id fid, int sel, unsigned int result)
41594181
{
41604182
struct json_object *r;
@@ -4300,6 +4322,9 @@ static void json_feature_show_fields(enum nvme_features_id fid, unsigned int res
43004322
case NVME_FEAT_FID_POWER_THRESH:
43014323
json_feature_show_fields_power_thresh(r, result);
43024324
break;
4325+
case NVME_FEAT_FID_POWER_MEASUREMENT:
4326+
json_feature_show_fields_power_meas(r, result);
4327+
break;
43034328
default:
43044329
break;
43054330
}

nvme-print-stdout.c

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5083,7 +5083,7 @@ static void stdout_feat_perfc_vs(struct nvme_vs_perf_attr *data)
50835083
d((unsigned char *)data->vs, data->attrl, 16, 1);
50845084
}
50855085

5086-
static void stdout_feat_perfc(enum nvme_features_id fid, unsigned int result,
5086+
static void stdout_feat_perfc(unsigned int result,
50875087
struct nvme_perf_characteristics *data)
50885088
{
50895089
__u8 attri;
@@ -5133,6 +5133,29 @@ static void stdout_host_metadata(enum nvme_features_id fid,
51335133
}
51345134
}
51355135

5136+
static void stdout_feat_host_id(unsigned int result, unsigned char *hostid)
5137+
{
5138+
uint64_t ull;
5139+
bool exhid;
5140+
5141+
if (!hostid)
5142+
return;
5143+
5144+
nvme_feature_decode_host_id(result, &exhid);
5145+
5146+
if (exhid) {
5147+
printf("\tHost Identifier (HOSTID): %s\n",
5148+
uint128_t_to_l10n_string(le128_to_cpu(hostid)));
5149+
return;
5150+
}
5151+
5152+
ull = hostid[7]; ull <<= 8; ull |= hostid[6]; ull <<= 8;
5153+
ull |= hostid[5]; ull <<= 8; ull |= hostid[4]; ull <<= 8;
5154+
ull |= hostid[3]; ull <<= 8; ull |= hostid[2]; ull <<= 8;
5155+
ull |= hostid[1]; ull <<= 8; ull |= hostid[0];
5156+
printf("\tHost Identifier (HOSTID): %" PRIu64 "\n", ull);
5157+
}
5158+
51365159
static void stdout_feature_show(enum nvme_features_id fid, int sel, unsigned int result)
51375160
{
51385161
printf("get-feature:%#0*x (%s), %s value:%#0*x\n", fid ? 4 : 2, fid,
@@ -5146,7 +5169,6 @@ static void stdout_feature_show_fields(enum nvme_features_id fid,
51465169
const char *async = "Send async event";
51475170
const char *no_async = "Do not send async event";
51485171
__u8 field;
5149-
uint64_t ull;
51505172

51515173
switch (fid) {
51525174
case NVME_FEAT_FID_ARBITRATION:
@@ -5342,7 +5364,8 @@ static void stdout_feature_show_fields(enum nvme_features_id fid,
53425364
nvme_pls_mode_to_string(NVME_GET(result, FEAT_PLS_MODE)));
53435365
break;
53445366
case NVME_FEAT_FID_PERF_CHARACTERISTICS:
5345-
stdout_feat_perfc(fid, result, (struct nvme_perf_characteristics *)buf);
5367+
stdout_feat_perfc(result,
5368+
(struct nvme_perf_characteristics *)buf);
53465369
break;
53475370
case NVME_FEAT_FID_ENH_CTRL_METADATA:
53485371
case NVME_FEAT_FID_CTRL_METADATA:
@@ -5354,12 +5377,7 @@ static void stdout_feature_show_fields(enum nvme_features_id fid,
53545377
printf("\tPre-boot Software Load Count (PBSLC): %u\n", NVME_FEAT_SPM_PBSLC(result));
53555378
break;
53565379
case NVME_FEAT_FID_HOST_ID:
5357-
if (buf) {
5358-
ull = buf[7]; ull <<= 8; ull |= buf[6]; ull <<= 8; ull |= buf[5]; ull <<= 8;
5359-
ull |= buf[4]; ull <<= 8; ull |= buf[3]; ull <<= 8; ull |= buf[2]; ull <<= 8;
5360-
ull |= buf[1]; ull <<= 8; ull |= buf[0];
5361-
printf("\tHost Identifier (HOSTID): %" PRIu64 "\n", ull);
5362-
}
5380+
stdout_feat_host_id(result, buf);
53635381
break;
53645382
case NVME_FEAT_FID_RESV_MASK:
53655383
printf("\tMask Reservation Preempted Notification (RESPRE): %s\n",
@@ -5427,6 +5445,16 @@ static void stdout_feature_show_fields(enum nvme_features_id fid,
54275445
field);
54285446
printf("\n");
54295447
break;
5448+
case NVME_FEAT_FID_POWER_MEASUREMENT:
5449+
field = NVME_FEAT_POWER_MEAS_ACT(result);
5450+
printf("\tAction (ACT): %u - %s\n", field,
5451+
nvme_power_measurement_action_to_string(field));
5452+
field = NVME_FEAT_POWER_MEAS_PMTS(result);
5453+
printf("\tPower Measurement Type Select (PMTS): %u - %s\n",
5454+
field, nvme_power_measurement_type_to_string(field));
5455+
printf("\tStop Measurement Time (SMT): %u\n",
5456+
NVME_FEAT_POWER_MEAS_SMT(result));
5457+
break;
54305458
default:
54315459
break;
54325460
}

nvme-print.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -952,7 +952,7 @@ const char *nvme_feature_to_string(enum nvme_features_id feature)
952952
case NVME_FEAT_FID_CONF_DEV_PERSONALITY:return "Configurable Device Personality";
953953
case NVME_FEAT_FID_POWER_LIMIT: return "Power Limit";
954954
case NVME_FEAT_FID_POWER_THRESH: return "Power Threshold";
955-
case NVME_FEAT_FID_POEWR_MEASUREMENT: return "Power Measurement";
955+
case NVME_FEAT_FID_POWER_MEASUREMENT: return "Power Measurement";
956956
case NVME_FEAT_FID_EMB_MGMT_CTRL_ADDR: return "Embedded Management Controller Address";
957957
case NVME_FEAT_FID_HOST_MGMT_AGENT_ADDR:return "Host Management Agent Address";
958958
case NVME_FEAT_FID_ENH_CTRL_METADATA: return "Enhanced Controller Metadata";
@@ -1526,6 +1526,21 @@ const char *nvme_power_measurement_type_to_string(__u8 pmt)
15261526
return "Reserved";
15271527
}
15281528

1529+
1530+
const char *nvme_power_measurement_action_to_string(__u8 act)
1531+
{
1532+
switch (act) {
1533+
case 0:
1534+
return "Stop";
1535+
case 1:
1536+
return "Start";
1537+
default:
1538+
break;
1539+
}
1540+
1541+
return "Reserved";
1542+
}
1543+
15291544
void nvme_feature_show(enum nvme_features_id fid, int sel, unsigned int result)
15301545
{
15311546
nvme_print(show_feature, NORMAL, fid, sel, result);

nvme-print.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ const char *nvme_pls_mode_to_string(__u8 mode);
343343
const char *nvme_bpwps_to_string(__u8 bpwps);
344344
const char *nvme_feature_power_limit_scale_to_string(__u8 pls);
345345
const char *nvme_power_measurement_type_to_string(__u8 pmt);
346+
const char *nvme_power_measurement_action_to_string(__u8 act);
346347

347348
void nvme_dev_full_path(nvme_ns_t n, char *path, size_t len);
348349
void nvme_generic_full_path(nvme_ns_t n, char *path, size_t len);

nvme.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4875,6 +4875,7 @@ static bool is_get_feature_result_set(enum nvme_features_id feature_id)
48754875
{
48764876
switch (feature_id) {
48774877
case NVME_FEAT_FID_PERF_CHARACTERISTICS:
4878+
case NVME_FEAT_FID_HOST_ID:
48784879
return false;
48794880
default:
48804881
break;

0 commit comments

Comments
 (0)