All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Allen <jallen@linux.vnet.ibm.com>
To: gregkh@linuxfoundation.org
Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	Nathan Fontenot <nfont@linux.vnet.ibm.com>
Subject: [PATCH v2] memory-hotplug: Fix kernel warning during memory hotplug on ppc64
Date: Tue, 3 Nov 2015 11:21:59 -0600	[thread overview]
Message-ID: <5638ED37.3090500@linux.vnet.ibm.com> (raw)

This patch fixes a bug where a kernel warning is triggered when performing
a memory hotplug on ppc64. This warning may also occur on any architecture
that has multiple sections per memory block.

[   78.300767] ------------[ cut here ]------------
[   78.300768] WARNING: at ../drivers/base/memory.c:210
[   78.300769] Modules linked in: rpadlpar_io(X) rpaphp(X) tcp_diag udp_diag inet_diag unix_diag af_packet_diag netlink_diag af_packet xfs libcrc32c ibmveth(X) rtc_generic btrfs xor raid6_pq xts gf128mul dm_crypt sd_mod sr_mod cdrom crc_t10dif ibmvscsi(X) scsi_transport_srp scsi_tgt dm_mod sg scsi_mod autofs4
[   78.300789] Supported: Yes, External
[   78.300791] CPU: 1 PID: 3090 Comm: systemd-udevd Tainted: G              X 3.12.45-1-default #1
[   78.300793] task: c0000004d7d1d970 ti: c0000004d7b90000 task.ti: c0000004d7b90000
[   78.300794] NIP: c0000000004fcff8 LR: c0000000004fda84 CTR: 0000000000000000
[   78.300795] REGS: c0000004d7b93930 TRAP: 0700   Tainted: G              X  (3.12.45-1-default)
[   78.300796] MSR: 8000000000029033 <SF,EE,ME,IR,DR,RI,LE>  CR: 24088848  XER: 00000000
[   78.300800] CFAR: c0000000004fcf98 SOFTE: 1
GPR00: 0000000000000537 c0000004d7b93bb0 c000000000e7f200 0000000000053000
GPR04: 0000000000001000 0000000000000001 c000000000e0f200 0000000000000000
GPR08: 0000000000000000 0000000000000001 0000000000000537 00000000014dc000
GPR12: 0000000000054000 c00000000e7f0900 0000000010041040 0000000000000000
GPR16: 00000100206f0010 000000001003ff78 000000001006c824 00000000100410b0
GPR20: 000000001003ff90 000000001006c00c 000001002073cd20 00000100206f0760
GPR24: 00000100206f85a0 c00000000076d950 c0000004ef7c95e0 c0000004d7b93e00
GPR28: c0000004de601738 0000000000000001 c000000001218f80 00000000003fffff
[   78.300818] NIP [c0000000004fcff8] memory_block_action+0x258/0x2e0
[   78.300820] LR [c0000000004fda84] memory_subsys_online+0x54/0x100
[   78.300821] Call Trace:
[   78.300822] [c0000004d7b93bb0] [c000000009071ce0] 0xc000000009071ce0 (unreliable)
[   78.300824] [c0000004d7b93c40] [c0000000004fda84] memory_subsys_online+0x54/0x100
[   78.300826] [c0000004d7b93c70] [c0000000004df784] device_online+0xb4/0x120
[   78.300828] [c0000004d7b93cb0] [c0000000004fd738] store_mem_state+0x88/0x220
[   78.300830] [c0000004d7b93cf0] [c0000000004db448] dev_attr_store+0x68/0xa0
[   78.300833] [c0000004d7b93d30] [c00000000031f938] sysfs_write_file+0xf8/0x1d0
[   78.300835] [c0000004d7b93d90] [c00000000027d29c] vfs_write+0xec/0x250
[   78.300837] [c0000004d7b93de0] [c00000000027dfdc] SyS_write+0x6c/0xf0
[   78.300839] [c0000004d7b93e30] [c00000000000a17c] syscall_exit+0x0/0x7c
[   78.300840] Instruction dump:
[   78.300841] 780a0560 79482ea4 7ce94214 2fa70000 41de0014 7d09402a 396b4000 7907ffe3
[   78.300844] 4082ff54 3cc2fff9 8926b83a 69290001 <0b090000> 2fa90000 40de006c 3860fff0
[   78.300847] ---[ end trace dfec8da06ebbc762 ]---

The warning is triggered because there is a udev rule that automatically
tries to online memory after it has been added. The udev rule varies from
distro to distro, but will generally look something like:

SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online"

On any architecture that uses memory_probe_store to reserve memory,
this can interrupt the memory reservation process. This patch modifies
memory_probe_store to take the hotplug sysfs lock to prevent the online
of added memory before the completion of the probe.

Signed-off-by: John Allen <jallen@linux.vnet.ibm.com>
---
v2: Move call to unlock_device_hotplug under "out" label

diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index bece691..7c50415 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -422,6 +422,10 @@ memory_probe_store(struct device *dev, struct device_attribute *attr,
 	if (phys_addr & ((pages_per_block << PAGE_SHIFT) - 1))
 		return -EINVAL;

+	ret = lock_device_hotplug_sysfs();
+	if (ret)
+		return ret;
+
 	for (i = 0; i < sections_per_block; i++) {
 		nid = memory_add_physaddr_to_nid(phys_addr);
 		ret = add_memory(nid, phys_addr,
@@ -434,6 +438,7 @@ memory_probe_store(struct device *dev, struct device_attribute *attr,

 	ret = count;
 out:
+	unlock_device_hotplug();
 	return ret;
 }


             reply	other threads:[~2015-11-03 17:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-03 17:21 John Allen [this message]
2015-11-03 21:13 ` [PATCH v2] memory-hotplug: Fix kernel warning during memory hotplug on ppc64 Yasuaki Ishimatsu
2015-11-09 16:35 ` Nathan Fontenot
2015-11-10  1:21 ` Michael Ellerman
2015-11-10  1:21   ` Michael Ellerman
2015-11-24 20:15   ` John Allen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5638ED37.3090500@linux.vnet.ibm.com \
    --to=jallen@linux.vnet.ibm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=nfont@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.