Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94158e54 authored by Sebastian Ott's avatar Sebastian Ott Committed by Martin Schwidefsky
Browse files

s390/debug: improve debug_event



debug_event currently truncates the data if used with a size larger than
the buf_size of the debug feature. For lots of callers of this function,
wrappers have been implemented that loop until all data is handled.

Move that functionality into debug_event_common and get rid of the wrappers.

Signed-off-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Acked-by: default avatarMichael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 7c3eaaa3
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -18,11 +18,7 @@ extern debug_info_t *pci_debug_err_id;

static inline void zpci_err_hex(void *addr, int len)
{
	while (len > 0) {
		debug_event(pci_debug_err_id, 0, (void *) addr, len);
		len -= pci_debug_err_id->buf_size;
		addr += pci_debug_err_id->buf_size;
	}
	debug_event(pci_debug_err_id, 0, addr, len);
}

#endif
+18 −10
Original line number Diff line number Diff line
@@ -900,12 +900,16 @@ debug_entry_t *debug_event_common(debug_info_t *id, int level, const void *buf,
	} else {
		spin_lock_irqsave(&id->lock, flags);
	}
	do {
		active = get_active_entry(id);
		memset(DEBUG_DATA(active), 0, id->buf_size);
		memcpy(DEBUG_DATA(active), buf, min(len, id->buf_size));
		debug_finish_entry(id, active, level, 0);
	spin_unlock_irqrestore(&id->lock, flags);
		len -= id->buf_size;
		buf += id->buf_size;
	} while (len > 0);

	spin_unlock_irqrestore(&id->lock, flags);
	return active;
}
EXPORT_SYMBOL(debug_event_common);
@@ -928,12 +932,16 @@ debug_entry_t *debug_exception_common(debug_info_t *id, int level,
	} else {
		spin_lock_irqsave(&id->lock, flags);
	}
	do {
		active = get_active_entry(id);
		memset(DEBUG_DATA(active), 0, id->buf_size);
		memcpy(DEBUG_DATA(active), buf, min(len, id->buf_size));
	debug_finish_entry(id, active, level, 1);
	spin_unlock_irqrestore(&id->lock, flags);
		debug_finish_entry(id, active, level, len <= id->buf_size);
		len -= id->buf_size;
		buf += id->buf_size;
	} while (len > 0);

	spin_unlock_irqrestore(&id->lock, flags);
	return active;
}
EXPORT_SYMBOL(debug_exception_common);
+1 −7
Original line number Diff line number Diff line
@@ -55,13 +55,7 @@ extern debug_info_t *scm_debug;

static inline void SCM_LOG_HEX(int level, void *data, int length)
{
	if (!debug_level_enabled(scm_debug, level))
		return;
	while (length > 0) {
	debug_event(scm_debug, level, data, length);
		length -= scm_debug->buf_size;
		data += scm_debug->buf_size;
	}
}

static inline void SCM_LOG_STATE(int level, struct scm_device *scmdev)
+1 −5
Original line number Diff line number Diff line
@@ -43,11 +43,7 @@ static DEFINE_MUTEX(on_close_mutex);

static void CHSC_LOG_HEX(int level, void *data, int length)
{
	while (length > 0) {
	debug_event(chsc_debug_log_id, level, data, length);
		length -= chsc_debug_log_id->buf_size;
		data += chsc_debug_log_id->buf_size;
	}
}

MODULE_AUTHOR("IBM Corporation");
+1 −7
Original line number Diff line number Diff line
@@ -22,13 +22,7 @@ extern debug_info_t *cio_debug_crw_id;

static inline void CIO_HEX_EVENT(int level, void *data, int length)
{
	if (unlikely(!cio_debug_trace_id))
		return;
	while (length > 0) {
	debug_event(cio_debug_trace_id, level, data, length);
		length -= cio_debug_trace_id->buf_size;
		data += cio_debug_trace_id->buf_size;
	}
}

#endif
Loading