Skip to content

Commit bab2a5e

Browse files
weiny2djbw
authored andcommitted
cxl/test: Simulate event log overflow
Log overflow is marked by a separate trace message. Simulate a log with lots of messages and flag overflow until space is cleared. Reviewed-by: Dan Williams <[email protected]> Reviewed-by: Jonathan Cameron <[email protected]> Signed-off-by: Ira Weiny <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dan Williams <[email protected]>
1 parent 0092f62 commit bab2a5e

File tree

1 file changed

+49
-1
lines changed
  • tools/testing/cxl/test

1 file changed

+49
-1
lines changed

tools/testing/cxl/test/mem.c

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ struct mock_event_log {
7878
u16 clear_idx;
7979
u16 cur_idx;
8080
u16 nr_events;
81+
u16 nr_overflow;
82+
u16 overflow_reset;
8183
struct cxl_event_record_raw *events[CXL_TEST_EVENT_CNT_MAX];
8284
};
8385

@@ -116,6 +118,7 @@ static void event_reset_log(struct mock_event_log *log)
116118
{
117119
log->cur_idx = 0;
118120
log->clear_idx = 0;
121+
log->nr_overflow = log->overflow_reset;
119122
}
120123

121124
/* Handle can never be 0 use 1 based indexing for handle */
@@ -147,8 +150,12 @@ static void mes_add_event(struct mock_event_store *mes,
147150
return;
148151

149152
log = &mes->mock_logs[log_type];
150-
if (WARN_ON(log->nr_events >= CXL_TEST_EVENT_CNT_MAX))
153+
154+
if ((log->nr_events + 1) > CXL_TEST_EVENT_CNT_MAX) {
155+
log->nr_overflow++;
156+
log->overflow_reset = log->nr_overflow;
151157
return;
158+
}
152159

153160
log->events[log->nr_events] = event;
154161
log->nr_events++;
@@ -159,6 +166,7 @@ static int mock_get_event(struct cxl_dev_state *cxlds,
159166
{
160167
struct cxl_get_event_payload *pl;
161168
struct mock_event_log *log;
169+
u16 nr_overflow;
162170
u8 log_type;
163171
int i;
164172

@@ -191,6 +199,19 @@ static int mock_get_event(struct cxl_dev_state *cxlds,
191199
if (!event_log_empty(log))
192200
pl->flags |= CXL_GET_EVENT_FLAG_MORE_RECORDS;
193201

202+
if (log->nr_overflow) {
203+
u64 ns;
204+
205+
pl->flags |= CXL_GET_EVENT_FLAG_OVERFLOW;
206+
pl->overflow_err_count = cpu_to_le16(nr_overflow);
207+
ns = ktime_get_real_ns();
208+
ns -= 5000000000; /* 5s ago */
209+
pl->first_overflow_timestamp = cpu_to_le64(ns);
210+
ns = ktime_get_real_ns();
211+
ns -= 1000000000; /* 1s ago */
212+
pl->last_overflow_timestamp = cpu_to_le64(ns);
213+
}
214+
194215
return 0;
195216
}
196217

@@ -231,6 +252,9 @@ static int mock_clear_event(struct cxl_dev_state *cxlds,
231252
}
232253
}
233254

255+
if (log->nr_overflow)
256+
log->nr_overflow = 0;
257+
234258
/* Clear events */
235259
log->clear_idx += pl->nr_recs;
236260
return 0;
@@ -353,6 +377,30 @@ static void cxl_mock_add_event_logs(struct mock_event_store *mes)
353377
(struct cxl_event_record_raw *)&mem_module);
354378
mes->ev_status |= CXLDEV_EVENT_STATUS_INFO;
355379

380+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &maint_needed);
381+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
382+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL,
383+
(struct cxl_event_record_raw *)&dram);
384+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL,
385+
(struct cxl_event_record_raw *)&gen_media);
386+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL,
387+
(struct cxl_event_record_raw *)&mem_module);
388+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
389+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL,
390+
(struct cxl_event_record_raw *)&dram);
391+
/* Overflow this log */
392+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
393+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
394+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
395+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
396+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
397+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
398+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
399+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
400+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
401+
mes_add_event(mes, CXL_EVENT_TYPE_FAIL, &hardware_replace);
402+
mes->ev_status |= CXLDEV_EVENT_STATUS_FAIL;
403+
356404
mes_add_event(mes, CXL_EVENT_TYPE_FATAL, &hardware_replace);
357405
mes_add_event(mes, CXL_EVENT_TYPE_FATAL,
358406
(struct cxl_event_record_raw *)&dram);

0 commit comments

Comments
 (0)