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

Commit fe803524 authored by Linus Torvalds's avatar Linus Torvalds
Browse files


Pull driver core and printk fixes from Greg Kroah-Hartman:
 "Here are some fixes for 3.5-rc4 that resolve the kmsg problems that
  people have reported showing up after the printk and kmsg changes went
  into 3.5-rc1.  There are also a smattering of other tiny fixes for the
  extcon and hyper-v drivers that people have reported.

  Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org&gt;">

* tag 'driver-core-3.5-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core:
  extcon: max8997: Add missing kfree for info->edev in max8997_muic_remove()
  extcon: Set platform drvdata in gpio_extcon_probe() and fix irq leak
  extcon: Fix wrong index in max8997_extcon_cable[]
  kmsg - kmsg_dump() fix CONFIG_PRINTK=n compilation
  printk: return -EINVAL if the message len is bigger than the buf size
  printk: use mutex lock to stop syslog_seq from going wild
  kmsg - kmsg_dump() use iterator to receive log buffer content
  vme: change maintainer e-mail address
  Extcon: Don't try to create duplicate link names
  driver core: fixup reversed deferred probe order
  printk: Fix alignment of buf causing crash on ARM EABI
  Tools: hv: verify origin of netlink connector message
parents f8fc0c9a 96c9f05b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -7421,7 +7421,7 @@ F: include/linux/vlynq.h

VME SUBSYSTEM
M:	Martyn Welch <martyn.welch@ge.com>
M:	Manohar Vanga <manohar.vanga@cern.ch>
M:	Manohar Vanga <manohar.vanga@gmail.com>
M:	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
L:	devel@driverdev.osuosl.org
S:	Maintained
+7 −54
Original line number Diff line number Diff line
@@ -68,9 +68,7 @@ static const char *pseries_nvram_os_partitions[] = {
};

static void oops_to_nvram(struct kmsg_dumper *dumper,
		enum kmsg_dump_reason reason,
		const char *old_msgs, unsigned long old_len,
		const char *new_msgs, unsigned long new_len);
			  enum kmsg_dump_reason reason);

static struct kmsg_dumper nvram_kmsg_dumper = {
	.dump = oops_to_nvram
@@ -503,28 +501,6 @@ int __init pSeries_nvram_init(void)
	return 0;
}

/*
 * Try to capture the last capture_len bytes of the printk buffer.  Return
 * the amount actually captured.
 */
static size_t capture_last_msgs(const char *old_msgs, size_t old_len,
				const char *new_msgs, size_t new_len,
				char *captured, size_t capture_len)
{
	if (new_len >= capture_len) {
		memcpy(captured, new_msgs + (new_len - capture_len),
								capture_len);
		return capture_len;
	} else {
		/* Grab the end of old_msgs. */
		size_t old_tail_len = min(old_len, capture_len - new_len);
		memcpy(captured, old_msgs + (old_len - old_tail_len),
								old_tail_len);
		memcpy(captured + old_tail_len, new_msgs, new_len);
		return old_tail_len + new_len;
	}
}

/*
 * Are we using the ibm,rtas-log for oops/panic reports?  And if so,
 * would logging this oops/panic overwrite an RTAS event that rtas_errd
@@ -541,27 +517,6 @@ static int clobbering_unread_rtas_event(void)
						NVRAM_RTAS_READ_TIMEOUT);
}

/* Squeeze out each line's <n> severity prefix. */
static size_t elide_severities(char *buf, size_t len)
{
	char *in, *out, *buf_end = buf + len;
	/* Assume a <n> at the very beginning marks the start of a line. */
	int newline = 1;

	in = out = buf;
	while (in < buf_end) {
		if (newline && in+3 <= buf_end &&
				*in == '<' && isdigit(in[1]) && in[2] == '>') {
			in += 3;
			newline = 0;
		} else {
			newline = (*in == '\n');
			*out++ = *in++;
		}
	}
	return out - buf;
}

/* Derived from logfs_compress() */
static int nvram_compress(const void *in, void *out, size_t inlen,
							size_t outlen)
@@ -619,9 +574,7 @@ static int zip_oops(size_t text_len)
 * partition.  If that's too much, go back and capture uncompressed text.
 */
static void oops_to_nvram(struct kmsg_dumper *dumper,
		enum kmsg_dump_reason reason,
		const char *old_msgs, unsigned long old_len,
		const char *new_msgs, unsigned long new_len)
			  enum kmsg_dump_reason reason)
{
	static unsigned int oops_count = 0;
	static bool panicking = false;
@@ -660,14 +613,14 @@ static void oops_to_nvram(struct kmsg_dumper *dumper,
		return;

	if (big_oops_buf) {
		text_len = capture_last_msgs(old_msgs, old_len,
			new_msgs, new_len, big_oops_buf, big_oops_buf_sz);
		text_len = elide_severities(big_oops_buf, text_len);
		kmsg_dump_get_buffer(dumper, false,
				     big_oops_buf, big_oops_buf_sz, &text_len);
		rc = zip_oops(text_len);
	}
	if (rc != 0) {
		text_len = capture_last_msgs(old_msgs, old_len,
				new_msgs, new_len, oops_data, oops_data_sz);
		kmsg_dump_rewind(dumper);
		kmsg_dump_get_buffer(dumper, true,
				     oops_data, oops_data_sz, &text_len);
		err_type = ERR_TYPE_KERNEL_PANIC;
		*oops_len = (u16) text_len;
	}
+5 −8
Original line number Diff line number Diff line
@@ -110,19 +110,16 @@ static struct kmsg_dumper dw_dumper;
static int dumper_registered;

static void dw_kmsg_dump(struct kmsg_dumper *dumper,
			enum kmsg_dump_reason reason,
			const char *s1, unsigned long l1,
			const char *s2, unsigned long l2)
			 enum kmsg_dump_reason reason)
{
	int i;
	static char line[1024];
	size_t len;

	/* When run to this, we'd better re-init the HW */
	mrst_early_console_init();

	for (i = 0; i < l1; i++)
		early_mrst_console.write(&early_mrst_console, s1 + i, 1);
	for (i = 0; i < l2; i++)
		early_mrst_console.write(&early_mrst_console, s2 + i, 1);
	while (kmsg_dump_get_line(dumper, true, line, sizeof(line), &len))
		early_mrst_console.write(&early_mrst_console, line, len);
}

/* Set the ratio rate to 115200, 8n1, IRQ disabled */
+1 −1
Original line number Diff line number Diff line
@@ -100,7 +100,7 @@ static void driver_deferred_probe_add(struct device *dev)
	mutex_lock(&deferred_probe_mutex);
	if (list_empty(&dev->p->deferred_probe)) {
		dev_dbg(dev, "Added to deferred list\n");
		list_add(&dev->p->deferred_probe, &deferred_probe_pending_list);
		list_add_tail(&dev->p->deferred_probe, &deferred_probe_pending_list);
	}
	mutex_unlock(&deferred_probe_mutex);
}
+3 −2
Original line number Diff line number Diff line
@@ -116,8 +116,8 @@ const char *max8997_extcon_cable[] = {
	[5] = "Charge-downstream",
	[6] = "MHL",
	[7] = "Dock-desk",
	[7] = "Dock-card",
	[8] = "JIG",
	[8] = "Dock-card",
	[9] = "JIG",

	NULL,
};
@@ -514,6 +514,7 @@ static int __devexit max8997_muic_remove(struct platform_device *pdev)

	extcon_dev_unregister(info->edev);

	kfree(info->edev);
	kfree(info);

	return 0;
Loading