From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 39D541BC062 for ; Wed, 4 Dec 2024 12:54:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316897; cv=none; b=bBrIhIwIhAbXtT/A54r0oT/ioc2cvC8wH6JNwqbzaLoafqXvqPihs+tfB1FhxT/T1pJpN4J/jJedgEA+RxixCm10m1NcLz32q+7j7+toLD1P8wqXr2hQexuBBvfanjaXRXLxYdLp4T3BufMTvmaAnQHsrO2PABA1w6hisW1nHPA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316897; c=relaxed/simple; bh=DemhL4cc1sp6Aqy2pgRkUydsYoG35xqCQwkgVd3ioow=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HiY3xXWxrKO8cZ3OQv+Xahmxl1EZd6nOiehoGeUCLGPpnkps9y2PHQFH3wlLUL20zpXxaD1rEn/3O2YEOgFYwaW8PBwnZMfgdbtBFmwCE7XTrrKzMtOHlJ7Vr8+tqlRhLH5RyO6+6q4S7sKjkDVb3r5B5AESdupIjeJ8TY92WxA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Atyb2NQW; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Atyb2NQW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316893; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=OXGsdvv3AOb25EXWN4EjEJfR5qBP9EzuVcsjQaH9awM=; b=Atyb2NQWNWizwui7xN8ajltan6FBuyq7UlO65Ufv4ko++YRnx8roJ8zGNfD+AumLy/S7XG N9KUc6KW5HyWkqYu5kT4L5sVuIPDFOYjoxOvfPIGCc4kGxuGN23Kstd/2LHZZz0n2gwJtS BRDm4RUoE61rgSo3WvPlfKjdJ2FVXzM= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-25-twRk2nE6PfSgWHbXTWWOUg-1; Wed, 04 Dec 2024 07:54:52 -0500 X-MC-Unique: twRk2nE6PfSgWHbXTWWOUg-1 X-Mimecast-MFC-AGG-ID: twRk2nE6PfSgWHbXTWWOUg Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4349eeeb841so48110905e9.3 for ; Wed, 04 Dec 2024 04:54:52 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316891; x=1733921691; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OXGsdvv3AOb25EXWN4EjEJfR5qBP9EzuVcsjQaH9awM=; b=plFaAEYxd2ay3m3f7ExQ7YRe9IDTc8eD7rr8BbDoOqLCJpYVzneKcRLUbd1Jq8QC+p w4ldmyF2Tn6/WuObBcS1VQrEHoEhHaj10QaqZzaQntO61khh1A/F4ZvLQcJrwv9kkbUe QrtcbXeNsIH2PS73YTz0reG/68J7cHkb9AEGgmRcy38/3dyh39vhF58kf/oH84aAl3Z/ JLsHw6YCVnMHZrZXzZMm7K6VBFS/soQgOEJT+RgyniS8ifPAL6SkzsQKQT/TJFKAviXG riFefKQFBhPkxElPP+txk02uA1Sa4X55y2MBTPhHUMWowxaJvVwIpO97fkD2/o2Zl69f wahw== X-Gm-Message-State: AOJu0Ywh4a5JiwMXKo1Ssk90e/1ZSO4a8Ak9KzUbT+VlXL8K4okuTg0l MBTSM3lsz18EC6MwbpqTNxLOjV7rLsNkHw+cR5c/AFO09sfPsBwFkg50lYKUV9dF1VwRS3j+IVP wnRnef+g2fkrwrarCBiTzbgaPZ0ufAbfP2/L1Jns4GA9GI/U9KErdb1qUXb8wtX5RXA5IPYM9Lq f11P6rSn0kt8yyCLSNQPl+KicdOLu0AU+ywO6ijBk7cShj X-Gm-Gg: ASbGncsbBq2Tw/GbsZQ2nJp7Y8JQpG8JQKs8S5lMRuY+Ur8d+VfRXy2UbHVmUmC4b4Y wHl5K8dOOPbaqP0EAyY+Z27vpgp5eGMu/XJYC6wv9Z0gIOosOk4jw6b9SFNH4A4rHsP+RXpV17H QgZUCtZ2e+ai/6yXU88xqqxujAMkEEnf9bsy53874667/VZ/8GpCl2sVlb7J05w0ftIPv8kFurB GowdQICuUVVl+tzhgAjeCwjiGHBU9tPoZ39whc9JboFymjOt9cLVxa3PjMBZmSoQQAyToA/ze7S V8XeJbuYcfKa7gwaW4NXPLWpRoz/p7+Pg7Q= X-Received: by 2002:a5d:6d08:0:b0:385:f280:d55 with SMTP id ffacd0b85a97d-385fd418db2mr5360115f8f.37.1733316891042; Wed, 04 Dec 2024 04:54:51 -0800 (PST) X-Google-Smtp-Source: AGHT+IHGOcFoEjkEw+PoNC+LLaws3waLwovX9iW85k260HP1nxTmH4H7ZaUgV85wmWvqw6YlLZ08+Q== X-Received: by 2002:a5d:6d08:0:b0:385:f280:d55 with SMTP id ffacd0b85a97d-385fd418db2mr5360063f8f.37.1733316890620; Wed, 04 Dec 2024 04:54:50 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-385ea9c5952sm11045422f8f.67.2024.12.04.04.54.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:54:49 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 01/12] fs/proc/vmcore: convert vmcore_cb_lock into vmcore_mutex Date: Wed, 4 Dec 2024 13:54:32 +0100 Message-ID: <20241204125444.1734652-2-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" We want to protect vmcore modifications from concurrent opening of the vmcore, and also serialize vmcore modification. (a) We can currently modify the vmcore after it was opened. This can happen if a vmcoredd is added after the vmcore module was initialized and already opened by user space. We want to fix that and prepare for new code wanting to serialize against concurrent opening. (b) To handle it cleanly we need to protect the modifications against concurrent opening. As the modifications end up allocating memory and can sleep, we cannot rely on the spinlock. Let's convert the spinlock into a mutex to prepare for further changes. Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- fs/proc/vmcore.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index b4521b096058..586f84677d2f 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -62,7 +62,8 @@ core_param(novmcoredd, vmcoredd_disabled, bool, 0); /* Device Dump Size */ static size_t vmcoredd_orig_sz; =20 -static DEFINE_SPINLOCK(vmcore_cb_lock); +static DEFINE_MUTEX(vmcore_mutex); + DEFINE_STATIC_SRCU(vmcore_cb_srcu); /* List of registered vmcore callbacks. */ static LIST_HEAD(vmcore_cb_list); @@ -72,7 +73,7 @@ static bool vmcore_opened; void register_vmcore_cb(struct vmcore_cb *cb) { INIT_LIST_HEAD(&cb->next); - spin_lock(&vmcore_cb_lock); + mutex_lock(&vmcore_mutex); list_add_tail(&cb->next, &vmcore_cb_list); /* * Registering a vmcore callback after the vmcore was opened is @@ -80,13 +81,13 @@ void register_vmcore_cb(struct vmcore_cb *cb) */ if (vmcore_opened) pr_warn_once("Unexpected vmcore callback registration\n"); - spin_unlock(&vmcore_cb_lock); + mutex_unlock(&vmcore_mutex); } EXPORT_SYMBOL_GPL(register_vmcore_cb); =20 void unregister_vmcore_cb(struct vmcore_cb *cb) { - spin_lock(&vmcore_cb_lock); + mutex_lock(&vmcore_mutex); list_del_rcu(&cb->next); /* * Unregistering a vmcore callback after the vmcore was opened is @@ -95,7 +96,7 @@ void unregister_vmcore_cb(struct vmcore_cb *cb) */ if (vmcore_opened) pr_warn_once("Unexpected vmcore callback unregistration\n"); - spin_unlock(&vmcore_cb_lock); + mutex_unlock(&vmcore_mutex); =20 synchronize_srcu(&vmcore_cb_srcu); } @@ -120,9 +121,9 @@ static bool pfn_is_ram(unsigned long pfn) =20 static int open_vmcore(struct inode *inode, struct file *file) { - spin_lock(&vmcore_cb_lock); + mutex_lock(&vmcore_mutex); vmcore_opened =3D true; - spin_unlock(&vmcore_cb_lock); + mutex_unlock(&vmcore_mutex); =20 return 0; } --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E2B1F1CDA09 for ; Wed, 4 Dec 2024 12:54:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316899; cv=none; b=GwNA6xmR1NOma/02ves7mmOVd4j5oZvWgjdokWzULHkGKNHQbgXd82m5I3uCe3CCqOqZwzrj5Dt5R3mvKxgm9y+MQ0i5F4qxwHUBTh6MoGYc+TN+hCsImhdQFNH8Vd+s3hKI185CUReajsu3nOEop62nbjXOQl7yXjcU/79WP8M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316899; c=relaxed/simple; bh=WdYleG7wq0/QsvZ4l+B0SUHHNWJZ0MpP6g4l1w+mx3k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KkFaAaEbxPjByrbjrUk6NIs9EzhfKGijqSaISJuVwqr5PAS6pqi1VXQSl+NtQcoDy4Cs6tH1G+6/xPEYrtWtMgY6K+HRRtKJOXiEVRZ2QJ0xmuMLWEiSseSCNa0cyfRyxv6rJ6Aj7ujQe6nCNPwTZF+/ppAcsbhSIiGi+ootyZk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=GONRlE/S; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="GONRlE/S" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316897; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=EkAK23ba+nOdc62V3txwBduSNZiyWl3c9gCUE/mLOOA=; b=GONRlE/SeF+2FdZTlHIAGz3oa4X62vGXtccTLntozzWin1ZloS1WP/FtH82HyeQNMFhr+K imh3spkMNNfPoS/IsDa/y7f5trLhBuNcMd43KvT8bBBDcZUGFQ7vAV0zmyn2cCjEI4wEen R6UrHOhlrQPUBu21EKBLHcSPba7Gg1o= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-680-_2h_Eqk1MHS8nF9oiV4Ezw-1; Wed, 04 Dec 2024 07:54:55 -0500 X-MC-Unique: _2h_Eqk1MHS8nF9oiV4Ezw-1 X-Mimecast-MFC-AGG-ID: _2h_Eqk1MHS8nF9oiV4Ezw Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-3860bc1d4f1so379796f8f.2 for ; Wed, 04 Dec 2024 04:54:55 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316894; x=1733921694; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EkAK23ba+nOdc62V3txwBduSNZiyWl3c9gCUE/mLOOA=; b=GJ4WpZ0N5vlPVzBEECcOxo4Rar/60C6FGFx30UDpKu78nKxT5IgYmOQOIsPmjB32oz E3mrjwzh5G0jQTgX3k9EscExohL6e5z++VGyh8RQiZYly1Zbob/SkVPtHIot+BKvIpCz t63IUHePGJ6UF0xksoCKooWviyIG/r1fNbmic/xB3aDiFsqr29qvyciYLSqVvI6jUTWU 1pk6sW82felGWpmxdXDSPYqXN8FPuHA02V/eu6Ha3MgBBrxgF2apQcScrUa/mv9C/agK pwdqKNCA0PscA8RhtNSmBft0iOXWnmq+U0b05x84OqROK3cbYgn/Y7GlCqXm68/yjjxC 3Lew== X-Gm-Message-State: AOJu0YyN3JS5cMNlqrmFpPxuhcK71UZUNIaY5WUvC5E11LHKGpYBlIyI lBDVkJRUYsBd5MahFJ6tn13i1V1HN/7m5QsRN/RDjQfr3sVmlD9ib/fnTFSHOEvxB7htlAkO90a QwDcEU470kBC+gYfcOK0E2buyEZYJvp521/dB6EROpc5SdLX81vuZwFAyTNGJsSSlqh+9l1nFnc NAMsQTu3Q4WEnbW4FtA7YrjaaJbVUqMsGcEm27xrEcAyT0 X-Gm-Gg: ASbGnctPrAQ8YmZvrHbd8MAQzTXS+RrODghrPvJJZgvtlKzFLyhlU4cQKjXbQEnFATa SmroF9wamGvIUZPG1NtZrG40QccMp9HLBd60G6Eo2+mWdp+vldsNUSBUS5j/RzUi91uTU+ZMeNW mk7V/K7zjdZIRgIc7S2GC/JZQ8lrDMsZ7Whov8PvWi1PTUAxDZ4Izfr7s2n4mxdZjjww79Vvevm BxkmWTn0ZpcNDwCr+jQzJYeYhRnWBlXOfOgCr0BKdZQCGkVx9wzNzGwr+INTofvOovXt/7aCwK+ SESxgwe7MWQ6etsqw+20qAVWR9ozG7HCYvM= X-Received: by 2002:a05:6000:1847:b0:385:ecdf:a30a with SMTP id ffacd0b85a97d-385fd3ee334mr5400398f8f.33.1733316893994; Wed, 04 Dec 2024 04:54:53 -0800 (PST) X-Google-Smtp-Source: AGHT+IFvdtkWkEwxi8mpcTLDx5Tk+eqhyWjoc+BX5ypLCUE7CH8mOKCeowIphEqt4hXFtq1npl/2WQ== X-Received: by 2002:a05:6000:1847:b0:385:ecdf:a30a with SMTP id ffacd0b85a97d-385fd3ee334mr5400356f8f.33.1733316893544; Wed, 04 Dec 2024 04:54:53 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-434d52c12a4sm23880495e9.30.2024.12.04.04.54.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:54:52 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 02/12] fs/proc/vmcore: replace vmcoredd_mutex by vmcore_mutex Date: Wed, 4 Dec 2024 13:54:33 +0100 Message-ID: <20241204125444.1734652-3-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that we have a mutex that synchronizes against opening of the vmcore, let's use that one to replace vmcoredd_mutex: there is no need to have two separate ones. This is a preparation for properly preventing vmcore modifications after the vmcore was opened. Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- fs/proc/vmcore.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index 586f84677d2f..e5a7e302f91f 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -53,7 +53,6 @@ static struct proc_dir_entry *proc_vmcore; #ifdef CONFIG_PROC_VMCORE_DEVICE_DUMP /* Device Dump list and mutex to synchronize access to list */ static LIST_HEAD(vmcoredd_list); -static DEFINE_MUTEX(vmcoredd_mutex); =20 static bool vmcoredd_disabled; core_param(novmcoredd, vmcoredd_disabled, bool, 0); @@ -248,7 +247,7 @@ static int vmcoredd_copy_dumps(struct iov_iter *iter, u= 64 start, size_t size) size_t tsz; char *buf; =20 - mutex_lock(&vmcoredd_mutex); + mutex_lock(&vmcore_mutex); list_for_each_entry(dump, &vmcoredd_list, list) { if (start < offset + dump->size) { tsz =3D min(offset + (u64)dump->size - start, (u64)size); @@ -269,7 +268,7 @@ static int vmcoredd_copy_dumps(struct iov_iter *iter, u= 64 start, size_t size) } =20 out_unlock: - mutex_unlock(&vmcoredd_mutex); + mutex_unlock(&vmcore_mutex); return ret; } =20 @@ -283,7 +282,7 @@ static int vmcoredd_mmap_dumps(struct vm_area_struct *v= ma, unsigned long dst, size_t tsz; char *buf; =20 - mutex_lock(&vmcoredd_mutex); + mutex_lock(&vmcore_mutex); list_for_each_entry(dump, &vmcoredd_list, list) { if (start < offset + dump->size) { tsz =3D min(offset + (u64)dump->size - start, (u64)size); @@ -306,7 +305,7 @@ static int vmcoredd_mmap_dumps(struct vm_area_struct *v= ma, unsigned long dst, } =20 out_unlock: - mutex_unlock(&vmcoredd_mutex); + mutex_unlock(&vmcore_mutex); return ret; } #endif /* CONFIG_MMU */ @@ -1518,9 +1517,9 @@ int vmcore_add_device_dump(struct vmcoredd_data *data) dump->size =3D data_size; =20 /* Add the dump to driver sysfs list */ - mutex_lock(&vmcoredd_mutex); + mutex_lock(&vmcore_mutex); list_add_tail(&dump->list, &vmcoredd_list); - mutex_unlock(&vmcoredd_mutex); + mutex_unlock(&vmcore_mutex); =20 vmcoredd_update_size(data_size); return 0; @@ -1538,7 +1537,7 @@ EXPORT_SYMBOL(vmcore_add_device_dump); static void vmcore_free_device_dumps(void) { #ifdef CONFIG_PROC_VMCORE_DEVICE_DUMP - mutex_lock(&vmcoredd_mutex); + mutex_lock(&vmcore_mutex); while (!list_empty(&vmcoredd_list)) { struct vmcoredd_node *dump; =20 @@ -1548,7 +1547,7 @@ static void vmcore_free_device_dumps(void) vfree(dump->buf); vfree(dump); } - mutex_unlock(&vmcoredd_mutex); + mutex_unlock(&vmcore_mutex); #endif /* CONFIG_PROC_VMCORE_DEVICE_DUMP */ } =20 --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F1E91E47C6 for ; Wed, 4 Dec 2024 12:55:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316906; cv=none; b=r8rTh/yvqgiR0lFvPf0PuBUWsNcCaAWUrrkfDpat3Z48NiNWq3FrIoX3zl9ZghZDAqUTTmCf5G6Cge3COFVaabkTnC3ghLN18VouLKEelIF1ZSzVgg2FP060jLI22kZyXinq8ORRMwuYtBSumFMpGmHOfsTK8Yj/iuS5N8YAES0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316906; c=relaxed/simple; bh=xNCoAGkL25Y87LMlQW3va8oiEgJuCLqo1bQEZDQgP2o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qNxlyJRG5AYiKvnmM5oazfMQKY/9ESFRpyWpREWT1cIPZ0YTQW0QX7j5E4O9n14cTLrsyU0uC7OCcaEQuxpdzPLxWuiwrzpLLO4Uo9PJbBsL1J7o9uRhBOIjMESmmNLjkOS3hxEHz5uHQucdBsEZ1spaYV2sZ1/DYPq05QFfFrY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=AALoxonP; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="AALoxonP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316903; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9g+9cVRXvhHLgxGSqrQTBE7Bw6RR/sxdLnnaInZE9Y8=; b=AALoxonPOr5NBFYi9JxILnWJ2DIhCTE5YPMhxk708xDc8DPT31EC+DroD8OXBTAzDMKIhC hDs2qT97qRbH77msvGIwaK/UbafYq3ZWzjY5UNhoWyY8HEDCIoFJP1nW7USHwcpLFjua3a 2/sNAgIt67uwaQZecnncGDQN1QAIrB8= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-202-Qn77EsRVN4uVEbUFU6WpiQ-1; Wed, 04 Dec 2024 07:55:02 -0500 X-MC-Unique: Qn77EsRVN4uVEbUFU6WpiQ-1 X-Mimecast-MFC-AGG-ID: Qn77EsRVN4uVEbUFU6WpiQ Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-434a27c9044so38629225e9.0 for ; Wed, 04 Dec 2024 04:55:01 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316899; x=1733921699; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9g+9cVRXvhHLgxGSqrQTBE7Bw6RR/sxdLnnaInZE9Y8=; b=ihSRreUGZWEs1dp2of31Ws1XXhBz6F2mpPiXlC1AW1/YxS6Yy5WE3lpRatP6+APntP P6ozPWqnlHPkQO5mewO/rj9J3Po6gj/LeneLAIJXgDMFD7A0wkN1fqwp55jTICfdC1uP zVc8YiXvRQDeoNEC1HJDV71o05yxDtVCYXjJBpAMyqmi+OXuPzyIf8mztZv4/2KBQ3+W dbzn+Pl4QqKF9hKl0KlJVdt4r/icNcx+CntXD4b/KgBYpzjl+0dgSXi2U6yT56iT5z4o IgItFnaEEF53gCDbYHsUh7/gSCCl+9ncOFW+HjGZp1qIvNHwIACu6UTVvc5IZseBYtCu o/9w== X-Gm-Message-State: AOJu0Yyfvt9VX5CEoxfY0bChp2lz3e8ZkIh/S+B0Q2CurzquN0RERERY cESMK4/cs76OD2y+be7vLAet66SOg9jtd+S25rtH64oOpWNtBSWyJQAfcqF+5g6mYPQQbeS175a tSiM++6iWC0LesnUDn28m0XOKGbo3CAPmz8w0rI5YGN4cprY+Ics54oVW18SXZTSMC1FwrKrfH3 H2X/32Ofo2sEZ0z6ZAwVMhpRAVs9BxTXCp89qUwqux2uw1 X-Gm-Gg: ASbGncujaEUUC7Ky1iacPfU2vYaZOjcTcunEGzzW1i5/agWs3f4mc5tIlKEaRXbnrRf pGiVV+FBrOhQPyRv2WcG33/LTtB6LoZ0wkq/nA4wUkgdFt0u9AvoTcCbMeDIDA06/SiajhzBtrM /BOU2CLLhaUHP2iJcS7DXcHpG3nCnpacbsUB0+uNjLPIvYYa0jlXL5aCBrr/NeL8hZhEyp9Jpvd bVynubMe5mSahnZpTvjVaMCcncXd/xjMsJrbsNKHglQ4kpyTTFGB3dhp29hZbR5x0Q2xtSFwEue HmaUPNIiSDK2hmNuKYpSJuCCp8D9pH03xkQ= X-Received: by 2002:a05:600c:a46:b0:434:9e17:18e5 with SMTP id 5b1f17b1804b1-434d3f015c9mr39711875e9.0.1733316899052; Wed, 04 Dec 2024 04:54:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IHeFWcM8kn1L8FVMwX9bQLaSRcl3tsS9Ol6XIyBOc2az2VjBMSNXd7wAhtLStmYUmhz8yBnag== X-Received: by 2002:a05:600c:a46:b0:434:9e17:18e5 with SMTP id 5b1f17b1804b1-434d3f015c9mr39710705e9.0.1733316897137; Wed, 04 Dec 2024 04:54:57 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-434d52c0dc8sm23581375e9.27.2024.12.04.04.54.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:54:55 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 03/12] fs/proc/vmcore: disallow vmcore modifications while the vmcore is open Date: Wed, 4 Dec 2024 13:54:34 +0100 Message-ID: <20241204125444.1734652-4-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The vmcoredd_update_size() call and its effects (size/offset changes) are currently completely unsynchronized, and will cause trouble when performed concurrently, or when done while someone is already reading the vmcore. Let's protect all vmcore modifications by the vmcore_mutex, disallow vmcore modifications while the vmcore is open, and warn on vmcore modifications after the vmcore was already opened once: modifications while the vmcore is open are unsafe, and modifications after the vmcore was opened indicates trouble. Properly synchronize against concurrent opening of the vmcore. No need to grab the mutex during mmap()/read(): after we opened the vmcore, modifications are impossible. It's worth noting that modifications after the vmcore was opened are completely unexpected, so failing if open, and warning if already opened (+closed again) is good enough. This change not only handles concurrent adding of device dumps + concurrent reading of the vmcore properly, it also prepares for other mechanisms that will modify the vmcore. Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- fs/proc/vmcore.c | 57 +++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index e5a7e302f91f..16faabe5ea30 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -68,6 +68,8 @@ DEFINE_STATIC_SRCU(vmcore_cb_srcu); static LIST_HEAD(vmcore_cb_list); /* Whether the vmcore has been opened once. */ static bool vmcore_opened; +/* Whether the vmcore is currently open. */ +static unsigned int vmcore_open; =20 void register_vmcore_cb(struct vmcore_cb *cb) { @@ -122,6 +124,20 @@ static int open_vmcore(struct inode *inode, struct fil= e *file) { mutex_lock(&vmcore_mutex); vmcore_opened =3D true; + if (vmcore_open + 1 =3D=3D 0) { + mutex_unlock(&vmcore_mutex); + return -EBUSY; + } + vmcore_open++; + mutex_unlock(&vmcore_mutex); + + return 0; +} + +static int release_vmcore(struct inode *inode, struct file *file) +{ + mutex_lock(&vmcore_mutex); + vmcore_open--; mutex_unlock(&vmcore_mutex); =20 return 0; @@ -243,33 +259,27 @@ static int vmcoredd_copy_dumps(struct iov_iter *iter,= u64 start, size_t size) { struct vmcoredd_node *dump; u64 offset =3D 0; - int ret =3D 0; size_t tsz; char *buf; =20 - mutex_lock(&vmcore_mutex); list_for_each_entry(dump, &vmcoredd_list, list) { if (start < offset + dump->size) { tsz =3D min(offset + (u64)dump->size - start, (u64)size); buf =3D dump->buf + start - offset; - if (copy_to_iter(buf, tsz, iter) < tsz) { - ret =3D -EFAULT; - goto out_unlock; - } + if (copy_to_iter(buf, tsz, iter) < tsz) + return -EFAULT; =20 size -=3D tsz; start +=3D tsz; =20 /* Leave now if buffer filled already */ if (!size) - goto out_unlock; + return 0; } offset +=3D dump->size; } =20 -out_unlock: - mutex_unlock(&vmcore_mutex); - return ret; + return 0; } =20 #ifdef CONFIG_MMU @@ -278,20 +288,16 @@ static int vmcoredd_mmap_dumps(struct vm_area_struct = *vma, unsigned long dst, { struct vmcoredd_node *dump; u64 offset =3D 0; - int ret =3D 0; size_t tsz; char *buf; =20 - mutex_lock(&vmcore_mutex); list_for_each_entry(dump, &vmcoredd_list, list) { if (start < offset + dump->size) { tsz =3D min(offset + (u64)dump->size - start, (u64)size); buf =3D dump->buf + start - offset; if (remap_vmalloc_range_partial(vma, dst, buf, 0, - tsz)) { - ret =3D -EFAULT; - goto out_unlock; - } + tsz)) + return -EFAULT; =20 size -=3D tsz; start +=3D tsz; @@ -299,14 +305,12 @@ static int vmcoredd_mmap_dumps(struct vm_area_struct = *vma, unsigned long dst, =20 /* Leave now if buffer filled already */ if (!size) - goto out_unlock; + return 0; } offset +=3D dump->size; } =20 -out_unlock: - mutex_unlock(&vmcore_mutex); - return ret; + return 0; } #endif /* CONFIG_MMU */ #endif /* CONFIG_PROC_VMCORE_DEVICE_DUMP */ @@ -691,6 +695,7 @@ static int mmap_vmcore(struct file *file, struct vm_are= a_struct *vma) =20 static const struct proc_ops vmcore_proc_ops =3D { .proc_open =3D open_vmcore, + .proc_release =3D release_vmcore, .proc_read_iter =3D read_vmcore, .proc_lseek =3D default_llseek, .proc_mmap =3D mmap_vmcore, @@ -1516,12 +1521,18 @@ int vmcore_add_device_dump(struct vmcoredd_data *da= ta) dump->buf =3D buf; dump->size =3D data_size; =20 - /* Add the dump to driver sysfs list */ + /* Add the dump to driver sysfs list and update the elfcore hdr */ mutex_lock(&vmcore_mutex); - list_add_tail(&dump->list, &vmcoredd_list); - mutex_unlock(&vmcore_mutex); + if (vmcore_opened) + pr_warn_once("Unexpected adding of device dump\n"); + if (vmcore_open) { + ret =3D -EBUSY; + goto out_err; + } =20 + list_add_tail(&dump->list, &vmcoredd_list); vmcoredd_update_size(data_size); + mutex_unlock(&vmcore_mutex); return 0; =20 out_err: --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE3E41E3796 for ; Wed, 4 Dec 2024 12:55:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316905; cv=none; b=tS+ET41RD3C477eAJVPiCBlOpC76D5NAtAkxWlpSKK+fqcf2rt8PsixRRSaUaWU40AucSVTewwRwqHT+RG9Zf8na8UU3rYp+XMB3yfrqYNxn6cyPjgPOI+qA0HMkijxepXAVJAf8Oy8T8cvLbFTRsM1UnvwFcgn3PqVZCOGRlA4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316905; c=relaxed/simple; bh=BgMJzD3uvTJhEKjQ1/IdIeY2entK2KsTWNxYBemJ1qE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=anvpoDbz3eMIiOcJiVImfNGM/fLPPzE7YntC/GUR7nzii5gaUQw3D7N/4BlnL/z0RivXP42ACeEocYpBDvSyrzQHcGsml8UTw1GGGH5yapRNXJ4+ZqzYqjFp2IYCaNfCpJac6V0uRWs247mSnD5qvPxpAXwmfLk9YKkI1tGTNgk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=GW5FMw+a; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="GW5FMw+a" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316902; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WYRTkbcHet+ClCO8Q7Li/qxr/6/P0nWlLIIrfww7Knk=; b=GW5FMw+auNEG6EXHPF67S/0tV49wAULCi+mreQUSFeALvtdoZnysb8nz7ceYBWJX8tboi6 6THrdZYOxdNTeB8XtoD4xUNnG2si2Oi+iP0khCca39ZyoeLPibNnGcrLKfPpZzVaGt+q1r MYrncwTcwGvU1JJON8ONB/E8ruFTBgU= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-651-BT6q17MBOVq-uUDRtpvW5A-1; Wed, 04 Dec 2024 07:55:01 -0500 X-MC-Unique: BT6q17MBOVq-uUDRtpvW5A-1 X-Mimecast-MFC-AGG-ID: BT6q17MBOVq-uUDRtpvW5A Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-434c214c05aso29037765e9.0 for ; Wed, 04 Dec 2024 04:55:01 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316900; x=1733921700; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WYRTkbcHet+ClCO8Q7Li/qxr/6/P0nWlLIIrfww7Knk=; b=kXduS7uoVWJ9ZlAzlvColgFDxF4cpCd8LQ2oXoUS2HD02iK6YGz0IpHx5BraX817g0 HVSdVPdWCZZco9juy9McC4m7f4MHgLE3+RZn/k6U8M7gyirgKVQDIz1tJqHW+nR0enHA MvWcotpedwekXIMNn4YQuemPds+8+cDtyUR2YMWAiayYhA6SgoThNStgfdfsRrQySWhT 48q4gsT3GcG0r5xO+B9m0iR8neUIPf0DuVl21oSfXBwijRKauTxubowzTdP+QwHuEXCg JvO6s9wVzgAqGFxjuHdphHbYvhS6MZu5z+U6CHtEJsTGccCTNk6qHSL3PTngA3DY9H6D FyIw== X-Gm-Message-State: AOJu0YxShlvsknmtLFT2O/BrXbkZS1Eh3+UGU0TC7yw3XfHUJo6zyWpW WZ/MMNUNqoHksFT4Lpm9rReZKbycvSQ9m5Er6HwWILfTlCUwyzYLUvS8B/4fqyAdbCcXVt1BOuB 50z++038eTH/kteTHxioXYoIQD9YTXjntCHSvWSx5rbszIJYMOEqqB0xc9KCSSFxTMv7K9CNLkN azqRHLfSE+eqFZSZG+hBt36MaYNfm15PVTpWgKzCGsfguR X-Gm-Gg: ASbGnctp3F2fUUsjMrBX9RWEP0GkgXsVi1anXdZO+8rv/UlDnWFZXHPuSR1B+lhP9pm azpCL6jnYLI0xMbTtbPDnONcrnYriGaM2unSMUAoUpprWyWiqLZM42jYErz/L5xruLilkgy+PQi Bu4CZA0qzoNymLO0GRifjNSnDXnDjs8QP6v3yNqxsPE1uH9Rko7L5QOMKRdKqdyiYdzxEhw8RSc vH+UvnYHrO9OOs0wigRvhTX1F0pqRkMduITuu6iIIVb0QYR54Bk+VzpkyEWZ/1bjQCybAMI6taC pZXrhPRluwbk99MHuScm48lFR9/CeVCyzOo= X-Received: by 2002:a5d:6c62:0:b0:385:f677:85af with SMTP id ffacd0b85a97d-385fd53ee5fmr5431788f8f.47.1733316900412; Wed, 04 Dec 2024 04:55:00 -0800 (PST) X-Google-Smtp-Source: AGHT+IGkIZLfFS9dd4mzise8YhuqVkFTd47qC7aw9US3336mGUo5e0+UH/rIIT1Petk2to7fPbudFQ== X-Received: by 2002:a5d:6c62:0:b0:385:f677:85af with SMTP id ffacd0b85a97d-385fd53ee5fmr5431725f8f.47.1733316899810; Wed, 04 Dec 2024 04:54:59 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-385ccd2e1bdsm18785865f8f.9.2024.12.04.04.54.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:54:58 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 04/12] fs/proc/vmcore: prefix all pr_* with "vmcore:" Date: Wed, 4 Dec 2024 13:54:35 +0100 Message-ID: <20241204125444.1734652-5-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Let's use "vmcore: " as a prefix, converting the single "Kdump: vmcore not initialized" one to effectively be "vmcore: not initialized". Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- fs/proc/vmcore.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index 16faabe5ea30..13dfc128d07e 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -8,6 +8,8 @@ * */ =20 +#define pr_fmt(fmt) "vmcore: " fmt + #include #include #include @@ -1580,7 +1582,7 @@ static int __init vmcore_init(void) rc =3D parse_crash_elf_headers(); if (rc) { elfcorehdr_free(elfcorehdr_addr); - pr_warn("Kdump: vmcore not initialized\n"); + pr_warn("not initialized\n"); return rc; } elfcorehdr_free(elfcorehdr_addr); --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 96CED1B414D for ; Wed, 4 Dec 2024 12:55:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316909; cv=none; b=KYrTcoCkMzkn9Yvsa8/Rtg8Kt1IPVNknfE0ISx02CmcdVs/r5s1wjCG9MtkgqjLI5eMBYVwI/hxhjbSxmGRkxTbEzUSciAJUxhYUvatvyKhtKiN2dJApiKJjqRu8F6CqUxAvOAZeysn+uV9vum82E0B69o0ZYcD5sFqEFfvA7OI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316909; c=relaxed/simple; bh=HA0N1cA5be1rrj+6WYs2Tt0NgjsLsDLvBhYCgodIfoE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qw3lKI1T7pAtVflUg5oyZKEvSmmLDfgxPnZ5889/IBASH6W1LVc6kq6BtuLGN69T6jWg30zPsWPiznF70Cl7eebHEH82kegNW3WwmWYA3drKackxGra+3hIlIaXFnp4qovvTfvHYUdTUDAXpHK5Dis4Sg0YLHvxh1Lzfyw/mlL0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=aoNuebCb; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="aoNuebCb" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316906; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AVSVbg92vBS9ECQ/qpyBYmAQmSQp+EsDoLv4fB2tW0Q=; b=aoNuebCbUhApNLiPTj4ptjq5FK+7D7hTpv7bVT/Ad+r1SZOaRp7aCFx3kxIbbgeglRwwKy a867A07M2iQKOBJlJoW9lw60ZqR3MHk+G/pdt1tfK2V+qSjbEFT0h+6bjm90vNx5Yro4jS lxdDmYP2gYaSML4pyWNd2GIYAm4+j6M= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-448-zdkTDByjPNeTAiudoxoNqA-1; Wed, 04 Dec 2024 07:55:05 -0500 X-MC-Unique: zdkTDByjPNeTAiudoxoNqA-1 X-Mimecast-MFC-AGG-ID: zdkTDByjPNeTAiudoxoNqA Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-434a27c9044so38629915e9.0 for ; Wed, 04 Dec 2024 04:55:04 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316904; x=1733921704; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AVSVbg92vBS9ECQ/qpyBYmAQmSQp+EsDoLv4fB2tW0Q=; b=XGDT2EdYN/nF15JeFzMFQqJiGf6AzxDHGg84j1v6k2TJHCS43ZfYgK/wb1bq+ZuVCA RgqXlgmckMN0OIS+MG1iE+3PbF8Ef9DEwZwS6PEPBqTqbb2PtG8GT9lrb3dvNR8IeeUW xbNgeqf49pe3gbFYjPZqzsLQisDVS3gtARuDWnEOaxwE8p5SXkFHc1XIKTD6pKcSN/UV Je5SPimRiRN2PIyTXDokL9+iy4cXSly7UUqlaA0WiyOymicoi9rJZgWJyKKCj9q0E85E mjvIV+T2NQP6pDv8x3wfrxFS+mCOvQutkc8MLqhmI5XvUlM/8N692g6c1cmcrrElozix B/kw== X-Gm-Message-State: AOJu0YwjphXw87LCBoyWJ7ed9oTtmb/jtnJpgGa4C+ue+TxQ8MRuDTPo HeN2pEcOqMVD4QAVx+tiR2sW1wKjX+vuB7eMh4wPbNIPIkvyhf1s132kvW+ma6ror8FUq2lXIJw 0nOZu0D34fCg2AwAjNlcn08ZDhi9yDlWBQAOcWk/tQoQYzdReUPXy7GimQnZn0PgTmgR64J14o9 1to1SNpJsUYxLoQzLsi4ud0je8hhggS0cZYjBg5xpnmkIU X-Gm-Gg: ASbGnctMQI0k3TZYs26Zb46k42pM9ctlFQggaEXal36yrgALSqcITAR3uCJYbRQA9nx LNSDuDme6KHZ9rpNjX4lDC8OdTF9WZYm7MQeYw8ULkL8i06DPWQdwDZxuoWHi/naXfJWMkEiYbf crE9/j8hC91mx8rs8rVqVc8A3levZJ9KnwEtKzSlBuxSo06jbyJzJCs8epb+Y2aGzEuZ95/b8QJ n6tA91Zv7V7MiFppnCIjhg+TkcsxMNpIbDJauS3zodxT0EmDJIX/imLxVNCskG9Fe7ZPhIyplPo QR9UfpOOh6ie0ab1QBn2Q/T9EGRc70k54KM= X-Received: by 2002:a05:600c:1906:b0:434:942c:1466 with SMTP id 5b1f17b1804b1-434d3fe3665mr34090165e9.29.1733316903759; Wed, 04 Dec 2024 04:55:03 -0800 (PST) X-Google-Smtp-Source: AGHT+IHp2zQuzmhokkabZpnrzoR4CmRg7d0WsOdBj322Nwyq7pIMtC1YAe5DPX1PH/Wsn3EpBmq5yA== X-Received: by 2002:a05:600c:1906:b0:434:942c:1466 with SMTP id 5b1f17b1804b1-434d3fe3665mr34089715e9.29.1733316903376; Wed, 04 Dec 2024 04:55:03 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-434d52b66ecsm23469265e9.39.2024.12.04.04.55.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:55:02 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 05/12] fs/proc/vmcore: move vmcore definitions out of kcore.h Date: Wed, 4 Dec 2024 13:54:36 +0100 Message-ID: <20241204125444.1734652-6-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" These vmcore defines are not related to /proc/kcore, move them out. We'll move "struct vmcoredd_node" to vmcore.c, because it is only used internally. While "struct vmcore" is only used internally for now, we're planning on using it from inline functions in crash_dump.h next, so move it to crash_dump.h. While at it, rename "struct vmcore" to "struct vmcore_range", which is a more suitable name and will make the usage of it outside of vmcore.c clearer. Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- fs/proc/vmcore.c | 26 ++++++++++++++++---------- include/linux/crash_dump.h | 7 +++++++ include/linux/kcore.h | 13 ------------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index 13dfc128d07e..8d262017ca11 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -53,6 +53,12 @@ static u64 vmcore_size; static struct proc_dir_entry *proc_vmcore; =20 #ifdef CONFIG_PROC_VMCORE_DEVICE_DUMP +struct vmcoredd_node { + struct list_head list; /* List of dumps */ + void *buf; /* Buffer containing device's dump */ + unsigned int size; /* Size of the buffer */ +}; + /* Device Dump list and mutex to synchronize access to list */ static LIST_HEAD(vmcoredd_list); =20 @@ -322,10 +328,10 @@ static int vmcoredd_mmap_dumps(struct vm_area_struct = *vma, unsigned long dst, */ static ssize_t __read_vmcore(struct iov_iter *iter, loff_t *fpos) { + struct vmcore_range *m =3D NULL; ssize_t acc =3D 0, tmp; size_t tsz; u64 start; - struct vmcore *m =3D NULL; =20 if (!iov_iter_count(iter) || *fpos >=3D vmcore_size) return 0; @@ -580,7 +586,7 @@ static int mmap_vmcore(struct file *file, struct vm_are= a_struct *vma) { size_t size =3D vma->vm_end - vma->vm_start; u64 start, end, len, tsz; - struct vmcore *m; + struct vmcore_range *m; =20 start =3D (u64)vma->vm_pgoff << PAGE_SHIFT; end =3D start + size; @@ -703,16 +709,16 @@ static const struct proc_ops vmcore_proc_ops =3D { .proc_mmap =3D mmap_vmcore, }; =20 -static struct vmcore* __init get_new_element(void) +static struct vmcore_range * __init get_new_element(void) { - return kzalloc(sizeof(struct vmcore), GFP_KERNEL); + return kzalloc(sizeof(struct vmcore_range), GFP_KERNEL); } =20 static u64 get_vmcore_size(size_t elfsz, size_t elfnotesegsz, struct list_head *vc_list) { + struct vmcore_range *m; u64 size; - struct vmcore *m; =20 size =3D elfsz + elfnotesegsz; list_for_each_entry(m, vc_list, list) { @@ -1110,11 +1116,11 @@ static int __init process_ptload_program_headers_el= f64(char *elfptr, size_t elfnotes_sz, struct list_head *vc_list) { + struct vmcore_range *new; int i; Elf64_Ehdr *ehdr_ptr; Elf64_Phdr *phdr_ptr; loff_t vmcore_off; - struct vmcore *new; =20 ehdr_ptr =3D (Elf64_Ehdr *)elfptr; phdr_ptr =3D (Elf64_Phdr*)(elfptr + sizeof(Elf64_Ehdr)); /* PT_NOTE hdr */ @@ -1153,11 +1159,11 @@ static int __init process_ptload_program_headers_el= f32(char *elfptr, size_t elfnotes_sz, struct list_head *vc_list) { + struct vmcore_range *new; int i; Elf32_Ehdr *ehdr_ptr; Elf32_Phdr *phdr_ptr; loff_t vmcore_off; - struct vmcore *new; =20 ehdr_ptr =3D (Elf32_Ehdr *)elfptr; phdr_ptr =3D (Elf32_Phdr*)(elfptr + sizeof(Elf32_Ehdr)); /* PT_NOTE hdr */ @@ -1195,8 +1201,8 @@ static int __init process_ptload_program_headers_elf3= 2(char *elfptr, static void set_vmcore_list_offsets(size_t elfsz, size_t elfnotes_sz, struct list_head *vc_list) { + struct vmcore_range *m; loff_t vmcore_off; - struct vmcore *m; =20 /* Skip ELF header, program headers and ELF note segment. */ vmcore_off =3D elfsz + elfnotes_sz; @@ -1605,9 +1611,9 @@ void vmcore_cleanup(void) =20 /* clear the vmcore list. */ while (!list_empty(&vmcore_list)) { - struct vmcore *m; + struct vmcore_range *m; =20 - m =3D list_first_entry(&vmcore_list, struct vmcore, list); + m =3D list_first_entry(&vmcore_list, struct vmcore_range, list); list_del(&m->list); kfree(m); } diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h index acc55626afdc..788a45061f35 100644 --- a/include/linux/crash_dump.h +++ b/include/linux/crash_dump.h @@ -114,6 +114,13 @@ struct vmcore_cb { extern void register_vmcore_cb(struct vmcore_cb *cb); extern void unregister_vmcore_cb(struct vmcore_cb *cb); =20 +struct vmcore_range { + struct list_head list; + unsigned long long paddr; + unsigned long long size; + loff_t offset; +}; + #else /* !CONFIG_CRASH_DUMP */ static inline bool is_kdump_kernel(void) { return false; } #endif /* CONFIG_CRASH_DUMP */ diff --git a/include/linux/kcore.h b/include/linux/kcore.h index 86c0f1d18998..9a2fa013c91d 100644 --- a/include/linux/kcore.h +++ b/include/linux/kcore.h @@ -20,19 +20,6 @@ struct kcore_list { int type; }; =20 -struct vmcore { - struct list_head list; - unsigned long long paddr; - unsigned long long size; - loff_t offset; -}; - -struct vmcoredd_node { - struct list_head list; /* List of dumps */ - void *buf; /* Buffer containing device's dump */ - unsigned int size; /* Size of the buffer */ -}; - #ifdef CONFIG_PROC_KCORE void __init kclist_add(struct kcore_list *, void *, size_t, int type); =20 --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 050A51F7079 for ; Wed, 4 Dec 2024 12:55:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316910; cv=none; b=bJTqZXHPRC2H/gnj8oK8WHxozz3Fg6p4W6BgpLdABjoMlXxanx9S/1Z9DwJJOC1LR2T/tkM08vQSzs6KLOCeSfWMnMd2g33wrzKIAogolmuUyl1uQeu0Wrh6VhZtigS+WhiSJ1zftq/Act+EE+RQMw4wuxqordQpyKVwtIckgVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316910; c=relaxed/simple; bh=GU+EylrtNkBl0PCgVUrji2d7nB4cQuMPE/K3NHw4YGM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NMAfUbaE3swduQoiz7um/zkgu0JmHYDNVGZdRg4bZcMr2kXz3TWYo8Wm8DZ7nglZMqYQk4FRctTRxuR6qREPBqbK/SnZk57X91BX1fJAvARecpbQNT2uEIwFpvJSuFQKUOcRYpw5voM0GkJ7J1sz0UzpCvrHHtYOkpub/CegNWU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=O6nHUCsJ; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="O6nHUCsJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316908; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3TMBFu0zsYs/BK8mI3BuEemyVvVnFxsrbDwOUtwonV0=; b=O6nHUCsJ7VBy/f4+kT+4tfTdhK/ev61TkwjjZmbff2s2hSLFi7tSIAgK3HtznPqESiFD67 3GPit59iFITU0dpq2t2encr920VrsREEynoNQas1dY6Twbx1LmfOX6U7FTd0C2wr16YROs ko1dwVeLZENjU3yZ0sIbtda2Qki/U44= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-84-TQ_yofWpPtqI2G39CANC8A-1; Wed, 04 Dec 2024 07:55:07 -0500 X-MC-Unique: TQ_yofWpPtqI2G39CANC8A-1 X-Mimecast-MFC-AGG-ID: TQ_yofWpPtqI2G39CANC8A Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-385dfa9b758so2188677f8f.0 for ; Wed, 04 Dec 2024 04:55:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316906; x=1733921706; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3TMBFu0zsYs/BK8mI3BuEemyVvVnFxsrbDwOUtwonV0=; b=RdS2mxaF/7VPTuMJ+uKqSH5WztsdBVOvMDUOYh8yiXFCPCCLDrsMRtFViV/OTkYTVe y48neI97jgpUmbD5UuYS3uSlAUF7syl8w27auk0Go6Zg9740B5MnB4/jrQZY2Cno/GHu qyrCBxMDURn5ymxiZVFEuZL7cCm0kFQwBKFFIkggtk4aoj6pRsd1MDEqSIJQL27sxozB EHvn2ovFW3MdKqmv8fHurnjeBkz1pUDWfNv44PpJzFpPdavS6KIbhUicucyFsjvSbEu+ TZ+CqLI2n+uPlMMpt++ozGdpG4qHod26Gm5H5rNjAidEbefY8cDvzYv7lYXO8FU6WTlp JUwA== X-Gm-Message-State: AOJu0Yxc6PW+mhZFGjv8HdaNHGCb7ym6W7G19SsZGcMRn1wq8hMJ++b2 YMjXSWrCwpSlPL8CAZLGySqCyiEiowcGTIVLQ+BlPBVFNEbZqXKIi6+yKlF+P8AjxbGDu07qMBQ DYdo5dniAbryBG6Mh7JW0PVlXdLE3lb4Mb5qzvsBbrvhu0BK+3tnrOdXE1uv7KbRopDSXxdXeGd cWC6qtJxT/B5mNQGhoWwNPKXV5d2DFqQVbyV97eLGDNzze X-Gm-Gg: ASbGncvaYsmadC5PIbL9m4FwaQOlphH2QDBDjW2x9pcAHNPbxgPp7FmTFAHzcmVaKJ0 WZtGWZMfEIPHNueGxc9eIzxyjzWI+mn5WnsEP/WZwVoJO8F3LNk218ApoT8w1C+5In0u1H5v3D7 iUgiUb9MCub+zAoY52HMhDwV3W9wl6ICFBeQnpVoo4R+TOuumX0GLramoFwtn5+f0SLli64baFq uoObrzKc0bt/71uVR2rsRYkhghsSCeUa8E5QaPWPD5g/3laci4Fpjsi7HIylaqH1Gb9HcvSxB0N Gx4mjlbPwnc+Via/4oJpMeZQsCl50otQ7SA= X-Received: by 2002:a05:6000:156e:b0:385:fa2e:a33e with SMTP id ffacd0b85a97d-38607c0e1e7mr3561620f8f.43.1733316905828; Wed, 04 Dec 2024 04:55:05 -0800 (PST) X-Google-Smtp-Source: AGHT+IH3Vs5XvVpD9wVjl4Do+O4dwdUFKsmLeUCgsK0LBk5udBDNdRPox9DV3gXL42llKQONJirIJg== X-Received: by 2002:a05:6000:156e:b0:385:fa2e:a33e with SMTP id ffacd0b85a97d-38607c0e1e7mr3561572f8f.43.1733316905408; Wed, 04 Dec 2024 04:55:05 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-385ed8dee66sm10241947f8f.104.2024.12.04.04.55.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:55:04 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 06/12] fs/proc/vmcore: factor out allocating a vmcore range and adding it to a list Date: Wed, 4 Dec 2024 13:54:37 +0100 Message-ID: <20241204125444.1734652-7-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Let's factor it out into include/linux/crash_dump.h, from where we can use it also outside of vmcore.c later. Acked-by: Baoquan He Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- fs/proc/vmcore.c | 21 ++------------------- include/linux/crash_dump.h | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index 8d262017ca11..9b72e255dd03 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -709,11 +709,6 @@ static const struct proc_ops vmcore_proc_ops =3D { .proc_mmap =3D mmap_vmcore, }; =20 -static struct vmcore_range * __init get_new_element(void) -{ - return kzalloc(sizeof(struct vmcore_range), GFP_KERNEL); -} - static u64 get_vmcore_size(size_t elfsz, size_t elfnotesegsz, struct list_head *vc_list) { @@ -1116,7 +1111,6 @@ static int __init process_ptload_program_headers_elf6= 4(char *elfptr, size_t elfnotes_sz, struct list_head *vc_list) { - struct vmcore_range *new; int i; Elf64_Ehdr *ehdr_ptr; Elf64_Phdr *phdr_ptr; @@ -1139,13 +1133,8 @@ static int __init process_ptload_program_headers_elf= 64(char *elfptr, end =3D roundup(paddr + phdr_ptr->p_memsz, PAGE_SIZE); size =3D end - start; =20 - /* Add this contiguous chunk of memory to vmcore list.*/ - new =3D get_new_element(); - if (!new) + if (vmcore_alloc_add_range(vc_list, start, size)) return -ENOMEM; - new->paddr =3D start; - new->size =3D size; - list_add_tail(&new->list, vc_list); =20 /* Update the program header offset. */ phdr_ptr->p_offset =3D vmcore_off + (paddr - start); @@ -1159,7 +1148,6 @@ static int __init process_ptload_program_headers_elf3= 2(char *elfptr, size_t elfnotes_sz, struct list_head *vc_list) { - struct vmcore_range *new; int i; Elf32_Ehdr *ehdr_ptr; Elf32_Phdr *phdr_ptr; @@ -1182,13 +1170,8 @@ static int __init process_ptload_program_headers_elf= 32(char *elfptr, end =3D roundup(paddr + phdr_ptr->p_memsz, PAGE_SIZE); size =3D end - start; =20 - /* Add this contiguous chunk of memory to vmcore list.*/ - new =3D get_new_element(); - if (!new) + if (vmcore_alloc_add_range(vc_list, start, size)) return -ENOMEM; - new->paddr =3D start; - new->size =3D size; - list_add_tail(&new->list, vc_list); =20 /* Update the program header offset */ phdr_ptr->p_offset =3D vmcore_off + (paddr - start); diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h index 788a45061f35..9717912ce4d1 100644 --- a/include/linux/crash_dump.h +++ b/include/linux/crash_dump.h @@ -121,6 +121,20 @@ struct vmcore_range { loff_t offset; }; =20 +/* Allocate a vmcore range and add it to the list. */ +static inline int vmcore_alloc_add_range(struct list_head *list, + unsigned long long paddr, unsigned long long size) +{ + struct vmcore_range *m =3D kzalloc(sizeof(*m), GFP_KERNEL); + + if (!m) + return -ENOMEM; + m->paddr =3D paddr; + m->size =3D size; + list_add_tail(&m->list, list); + return 0; +} + #else /* !CONFIG_CRASH_DUMP */ static inline bool is_kdump_kernel(void) { return false; } #endif /* CONFIG_CRASH_DUMP */ --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D63D1FBEAB for ; Wed, 4 Dec 2024 12:55:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316915; cv=none; b=HWBdAtyVYhR6UTaRqMlZbN5k9H1Tj6Lzb0UkoDYEQgdTmFKi7bu6a44zy9NxlG4pLHWNecihypZbIZowz0apsNp7k+Ko5LvD72sSofqJwwTDy/HZdZLn6cS8uBtUyQwAQ2g1mAxu4qNjc93S99xvwC57JEGJGF97HgH680TLmd4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316915; c=relaxed/simple; bh=8EJBn/hbfhsOHacsaBstPaeEQTFd5MZoCB7W0faV+24=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dqfFjdi/HhLjoRl0LnPzEQHCJQP7uywcu3hlz3DBCSPclRMIC5ExyA5DIS1zRfI5xPNh2EOiOpcOS/3zynZAPW4BNm1GELDbc0VS3jyKBZ/JNev3CHhY6tnCmd6K3B9o+/WZqQFhZSvvDvsK2DilInWEZVpPwEYuNOqZrPGTUk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=hbOHkUx4; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="hbOHkUx4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316913; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=/hPjJFLUCb0ZdSDAqGVI3uh+hCPNkczr7XmzIQmCEzE=; b=hbOHkUx4i/55ixVZ+5on81TwWQmiePi/4QuXSdBVmI1FgC6JzHVL27ZF9vp/V9OwJPTES/ D3X0lSv4ae2TQZNUfmXxEeHz2kho/f/6a7CgZHCEdqAHZ55VFy3TDdSks4ULVjuZRvJt94 8ztl80SvZzdFPcxMIecFLBpIKxL/UcQ= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-6-_Ojf8BIyPT2wwfDCIQfxxw-1; Wed, 04 Dec 2024 07:55:10 -0500 X-MC-Unique: _Ojf8BIyPT2wwfDCIQfxxw-1 X-Mimecast-MFC-AGG-ID: _Ojf8BIyPT2wwfDCIQfxxw Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4349e97bfc4so62389445e9.3 for ; Wed, 04 Dec 2024 04:55:09 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316909; x=1733921709; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/hPjJFLUCb0ZdSDAqGVI3uh+hCPNkczr7XmzIQmCEzE=; b=Va0u3YVdL3unK9bIBs7rYFedIG0UAN2eSNZaAFDwZRNS/uQ2MGGK1crDG3wy2+oHIr ZYH9Mb78v5+IrJya4iEBc8g9S4ApndT7uf6VtBuvd+X4efoRarGKhhiDXD9U8akzTMwy yJSWwun14SInUScXfJg7TWn+MfDT5jKncJrHwqNl3ZOcUHig8BPmuxvDffjaDMgFjDm+ 2nhO2UHoRerl7az6Uz3R4ujlPY2+nFmirzql8YCc5D2m+dO9rvR1BbapsZPIUTlf0Lr+ QuIVm0bYOru/rq6WCp3omsPMfyfDEuRT84JLqViwwwdmoeC8IQKUqLSuZg9lfxgi5F6X 9MCQ== X-Gm-Message-State: AOJu0YwT+eX7AztOnWA/k3OESqLtp+UbtcyJ44tF9ggcKLPncim8Arej h0eBsUlNFpzJ9PxMVZWZbDcYSegter35SqojmzzWqJGmPzzznQhCsBSnGUPZVdTA5HJZ68RKj2l XfMKyCRFgRspntHzApYC6JyaSB1zBKL0LOn/9FTyP6dUMJkniQS2wdgnEO82y1GgUbJKxSnbJIX ev1S9f5pCAnMtSQvo8hBZsp7n8AEd+KwjYPAo47+X8KTnV X-Gm-Gg: ASbGncs/AH/iNchqSOipfjnqmbezYqe3Bzwo5nR75CjA7SJf2VhNjUyrKoNWcsAei7i aTrvcm3rZzP0f4p/tubYgAnMhSw6XHPavoH6rNFg+pdzHeKW3JJrNtOsiQw/KB0MIS079Q4cu+E AcV6Cv/NA47SkXXr7ROT0PwULyfrYG+WsffQZC9BgbMqn2bJEhd9jdRjcxAgLb3O8h4i5v+qv/j uovszVNzenoz1nZF/auRqPxQmt0tVfiFMmo7kxsIlVJze2q59/OZz/sc43Df0+bz6mi1inVBazl um71nruuP5yyvRgvjdCGq8PdxsXxau/APss= X-Received: by 2002:a05:600c:1989:b0:431:6083:cd30 with SMTP id 5b1f17b1804b1-434d09b2a75mr60275055e9.6.1733316908815; Wed, 04 Dec 2024 04:55:08 -0800 (PST) X-Google-Smtp-Source: AGHT+IFKlYOU/tZlshqWyJGjVsl03zkEzffSPE/+D71b9Tfd5+g4TqcfXtmwO5t6x/22DC/lF4E/bA== X-Received: by 2002:a05:600c:1989:b0:431:6083:cd30 with SMTP id 5b1f17b1804b1-434d09b2a75mr60274425e9.6.1733316908112; Wed, 04 Dec 2024 04:55:08 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-385db7f86dasm16267209f8f.66.2024.12.04.04.55.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:55:06 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 07/12] fs/proc/vmcore: factor out freeing a list of vmcore ranges Date: Wed, 4 Dec 2024 13:54:38 +0100 Message-ID: <20241204125444.1734652-8-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Let's factor it out into include/linux/crash_dump.h, from where we can use it also outside of vmcore.c later. Acked-by: Baoquan He Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- fs/proc/vmcore.c | 9 +-------- include/linux/crash_dump.h | 11 +++++++++++ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index 9b72e255dd03..e7b3cde44890 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -1592,14 +1592,7 @@ void vmcore_cleanup(void) proc_vmcore =3D NULL; } =20 - /* clear the vmcore list. */ - while (!list_empty(&vmcore_list)) { - struct vmcore_range *m; - - m =3D list_first_entry(&vmcore_list, struct vmcore_range, list); - list_del(&m->list); - kfree(m); - } + vmcore_free_ranges(&vmcore_list); free_elfcorebuf(); =20 /* clear vmcore device dump list */ diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h index 9717912ce4d1..5d61c7454fd6 100644 --- a/include/linux/crash_dump.h +++ b/include/linux/crash_dump.h @@ -135,6 +135,17 @@ static inline int vmcore_alloc_add_range(struct list_h= ead *list, return 0; } =20 +/* Free a list of vmcore ranges. */ +static inline void vmcore_free_ranges(struct list_head *list) +{ + struct vmcore_range *m, *tmp; + + list_for_each_entry_safe(m, tmp, list, list) { + list_del(&m->list); + kfree(m); + } +} + #else /* !CONFIG_CRASH_DUMP */ static inline bool is_kdump_kernel(void) { return false; } #endif /* CONFIG_CRASH_DUMP */ --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 03E561B414D for ; Wed, 4 Dec 2024 12:55:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316915; cv=none; b=eax1SXXhPL9WebcUqYDceDDSmSR5UM89hWYAx9PNdBCfBAbl+n8iXgeuMKU0rScOHyTYhyIhbwbxZ0RHv5IIXcwxyLtqEV5GYZyXjfnu8nv9HYLGfUVuvVMoFvIJrEQDosS/zTS3lT2cWOqZgd02bO/s3MsD6psPocS/M10VERA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316915; c=relaxed/simple; bh=Rg9yOQYGTd6pgwnyhp2VaHUTS4HPDRcUrf1ti8sagOE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oUtykKClR+XnuY/G0p05MaXIwLKQm3M+NJQaggzyYG6qp+/dSXHDyCKNjizlp+KQVo59MdswsY0p9YNVpBy8fvKIYeb7v4k1vQpI6ZgzC11cyJZSM1dQJHtj8wW8WhbutS6r2vZIz4CbNXdSucLIsIF7MvDtwu7+7n3EWE6ApzY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=IJbXoQVC; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="IJbXoQVC" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316913; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DHduTfm8MEvatODJJecU9qsghwDNoQQYbaQi+lekCuQ=; b=IJbXoQVC7I6eg9F+A8EYC78ugY4QeIJcusZGNFFjiqfuIkkq1tGyG9wp57lE8kKR7IPTDM DfSWXsCV1mM7DYOTjNNbYph/nRp9hjX+byac9mF8l2TSADwZBYvMUXmc0gj/2cYudlqN8O x1Fh+Bf6GviTB5S9vZbXWwz74MLUZFA= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-218-hCnnjokAP7u4QmBl-PSqbw-1; Wed, 04 Dec 2024 07:55:11 -0500 X-MC-Unique: hCnnjokAP7u4QmBl-PSqbw-1 X-Mimecast-MFC-AGG-ID: hCnnjokAP7u4QmBl-PSqbw Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43498af7937so55218585e9.1 for ; Wed, 04 Dec 2024 04:55:11 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316910; x=1733921710; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DHduTfm8MEvatODJJecU9qsghwDNoQQYbaQi+lekCuQ=; b=Oxen5oCzRunbxWmIrsjaLHo55Dedf+sZ+wLBY2X8aPbkVuCP2hJ+HONiTVevoa9VId XQl4TisDeTpCPvQm9mQzWLP7sSBhv1PDw+hUZrRrudMRr0JJEPVi5ozd8vToWChy9lAf WPt+DQ3uQ9y0QE5Q8zMCvfweYsOXR1VsK1rIG2ZS7DfoNoumHpNBbBWaxALE0hT+utP8 6HFkDTEPdLjj6ue+EBP9lUUZu1LtmfdlK1HniW4X9nTGqaMWV9u8fLT4Uk6B886XKFsd Rs0ra+ReW2SLi/zmyWOqbPkNPPdm+wKkTIfM4MR74GfNHtPDnziO2ell5IISuoUo9LKK fMYg== X-Gm-Message-State: AOJu0Yy/erAvOreNX3gy8QZuIOUV4YX1mjNcehHzLmov4coP71wXtjKy OHo8kXO8CmxaMfkimpGBHihGDMt/sHnw1bM+aEpiO/uYr0laB17RQ4FQioTOhje8TQz5mknN5yw yzEiGrAVNQQkOJhA70DlNt4ZcntbVFk47q0IjnId5lghiqA+b31rNY00Xwk05t6Qhao8PmqTMGm JQaT1bzJuJew+bA/4IKw1YWs+WDtR0qnu1o46GL3mt0ryw X-Gm-Gg: ASbGnctYAVrR89KsDZ/9sOkZhxSqzaue+LEaXwlx4lFZLPrO4Cgjqx8htJajAP/RE8l 7i1XTc9lnQT8J/AyDgD9lAavqz4O18nl/BDGq80n/S8Gh/CekeCVjEGnSG72rk5fWzfTzbm9KCK CvKu3hetZ0wT4StfvdCUaS6vEGUmIEBoWT3vp0Wxlf7y6wjSDDyDblz7JGavg+kBmwJSyWmhCTJ rxndcvPLChbip8K07jn2bywH5eskTXaLlgSblkdHO4geLK4nv/QjBuZKIoLMrBEue8BdvmacwHu ONUJdmrNbD/dVZ+XOcwwtuxOdP2VhZH6NAo= X-Received: by 2002:a05:600c:1c88:b0:434:9df4:5472 with SMTP id 5b1f17b1804b1-434d0a15068mr60073705e9.31.1733316910549; Wed, 04 Dec 2024 04:55:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IGWq3Nj3w3HYlBbZnRWgOzE8l6L8boPfRZN2lwS+xZGCeTjU6KZId+aHdXHdM4P1FN9VEFBqg== X-Received: by 2002:a05:600c:1c88:b0:434:9df4:5472 with SMTP id 5b1f17b1804b1-434d0a15068mr60073175e9.31.1733316910084; Wed, 04 Dec 2024 04:55:10 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-434d5280746sm23704445e9.21.2024.12.04.04.55.08 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:55:09 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 08/12] fs/proc/vmcore: introduce PROC_VMCORE_DEVICE_RAM to detect device RAM ranges in 2nd kernel Date: Wed, 4 Dec 2024 13:54:39 +0100 Message-ID: <20241204125444.1734652-9-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" s390 allocates+prepares the elfcore hdr in the dump (2nd) kernel, not in the crashed kernel. RAM provided by memory devices such as virtio-mem can only be detected using the device driver; when vmcore_init() is called, these device drivers are usually not loaded yet, or the devices did not get probed yet. Consequently, on s390 these RAM ranges will not be included in the crash dump, which makes the dump partially corrupt and is unfortunate. Instead of deferring the vmcore_init() call, to an (unclear?) later point, let's reuse the vmcore_cb infrastructure to obtain device RAM ranges as the device drivers probe the device and get access to this information. Then, we'll add these ranges to the vmcore, adding more PT_LOAD entries and updating the offsets+vmcore size. Use a separate Kconfig option to be set by an architecture to include this code only if the arch really needs it. Further, we'll make the config depend on the relevant drivers (i.e., virtio_mem) once they implement support (next). The alternative of having a PROVIDE_PROC_VMCORE_DEVICE_RAM config option was dropped for now for simplicity. The current target use case is s390, which only creates an elf64 elfcore, so focusing on elf64 is sufficient. Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- fs/proc/Kconfig | 18 +++++ fs/proc/vmcore.c | 156 +++++++++++++++++++++++++++++++++++++ include/linux/crash_dump.h | 9 +++ 3 files changed, 183 insertions(+) diff --git a/fs/proc/Kconfig b/fs/proc/Kconfig index d80a1431ef7b..5668620ab34d 100644 --- a/fs/proc/Kconfig +++ b/fs/proc/Kconfig @@ -61,6 +61,24 @@ config PROC_VMCORE_DEVICE_DUMP as ELF notes to /proc/vmcore. You can still disable device dump using the kernel command line option 'novmcoredd'. =20 +config NEED_PROC_VMCORE_DEVICE_RAM + bool + +config PROC_VMCORE_DEVICE_RAM + def_bool y + depends on PROC_VMCORE && NEED_PROC_VMCORE_DEVICE_RAM + help + If the elfcore hdr is allocated and prepared by the dump kernel + ("2nd kernel") instead of the crashed kernel, RAM provided by memory + devices such as virtio-mem will not be included in the dump + image, because only the device driver can properly detect them. + + With this config enabled, these RAM ranges will be queried from the + device drivers once the device gets probed, so they can be included + in the crash dump. + + Relevant architectures should select NEED_PROC_VMCORE_DEVICE_RAM. + config PROC_SYSCTL bool "Sysctl support (/proc/sys)" if EXPERT depends on PROC_FS diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index e7b3cde44890..6dc293d0eb5b 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -79,6 +79,8 @@ static bool vmcore_opened; /* Whether the vmcore is currently open. */ static unsigned int vmcore_open; =20 +static void vmcore_process_device_ram(struct vmcore_cb *cb); + void register_vmcore_cb(struct vmcore_cb *cb) { INIT_LIST_HEAD(&cb->next); @@ -90,6 +92,8 @@ void register_vmcore_cb(struct vmcore_cb *cb) */ if (vmcore_opened) pr_warn_once("Unexpected vmcore callback registration\n"); + if (!vmcore_open && cb->get_device_ram) + vmcore_process_device_ram(cb); mutex_unlock(&vmcore_mutex); } EXPORT_SYMBOL_GPL(register_vmcore_cb); @@ -1535,6 +1539,158 @@ int vmcore_add_device_dump(struct vmcoredd_data *da= ta) EXPORT_SYMBOL(vmcore_add_device_dump); #endif /* CONFIG_PROC_VMCORE_DEVICE_DUMP */ =20 +#ifdef CONFIG_PROC_VMCORE_DEVICE_RAM +static int vmcore_realloc_elfcore_buffer_elf64(size_t new_size) +{ + char *elfcorebuf_new; + + if (WARN_ON_ONCE(new_size < elfcorebuf_sz)) + return -EINVAL; + if (get_order(elfcorebuf_sz_orig) =3D=3D get_order(new_size)) { + elfcorebuf_sz_orig =3D new_size; + return 0; + } + + elfcorebuf_new =3D (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, + get_order(new_size)); + if (!elfcorebuf_new) + return -ENOMEM; + memcpy(elfcorebuf_new, elfcorebuf, elfcorebuf_sz); + free_pages((unsigned long)elfcorebuf, get_order(elfcorebuf_sz_orig)); + elfcorebuf =3D elfcorebuf_new; + elfcorebuf_sz_orig =3D new_size; + return 0; +} + +static void vmcore_reset_offsets_elf64(void) +{ + Elf64_Phdr *phdr_start =3D (Elf64_Phdr *)(elfcorebuf + sizeof(Elf64_Ehdr)= ); + loff_t vmcore_off =3D elfcorebuf_sz + elfnotes_sz; + Elf64_Ehdr *ehdr =3D (Elf64_Ehdr *)elfcorebuf; + Elf64_Phdr *phdr; + int i; + + for (i =3D 0, phdr =3D phdr_start; i < ehdr->e_phnum; i++, phdr++) { + u64 start, end; + + /* + * After merge_note_headers_elf64() we should only have a single + * PT_NOTE entry that starts immediately after elfcorebuf_sz. + */ + if (phdr->p_type =3D=3D PT_NOTE) { + phdr->p_offset =3D elfcorebuf_sz; + continue; + } + + start =3D rounddown(phdr->p_offset, PAGE_SIZE); + end =3D roundup(phdr->p_offset + phdr->p_memsz, PAGE_SIZE); + phdr->p_offset =3D vmcore_off + (phdr->p_offset - start); + vmcore_off =3D vmcore_off + end - start; + } + set_vmcore_list_offsets(elfcorebuf_sz, elfnotes_sz, &vmcore_list); +} + +static int vmcore_add_device_ram_elf64(struct list_head *list, size_t coun= t) +{ + Elf64_Phdr *phdr_start =3D (Elf64_Phdr *)(elfcorebuf + sizeof(Elf64_Ehdr)= ); + Elf64_Ehdr *ehdr =3D (Elf64_Ehdr *)elfcorebuf; + struct vmcore_range *cur; + Elf64_Phdr *phdr; + size_t new_size; + int rc; + + if ((Elf32_Half)(ehdr->e_phnum + count) !=3D ehdr->e_phnum + count) { + pr_err("too many device ram ranges\n"); + return -ENOSPC; + } + + /* elfcorebuf_sz must always cover full pages. */ + new_size =3D sizeof(Elf64_Ehdr) + + (ehdr->e_phnum + count) * sizeof(Elf64_Phdr); + new_size =3D roundup(new_size, PAGE_SIZE); + + /* + * Make sure we have sufficient space to include the new PT_LOAD + * entries. + */ + rc =3D vmcore_realloc_elfcore_buffer_elf64(new_size); + if (rc) { + pr_err("resizing elfcore failed\n"); + return rc; + } + + /* Modify our used elfcore buffer size to cover the new entries. */ + elfcorebuf_sz =3D new_size; + + /* Fill the added PT_LOAD entries. */ + phdr =3D phdr_start + ehdr->e_phnum; + list_for_each_entry(cur, list, list) { + WARN_ON_ONCE(!IS_ALIGNED(cur->paddr | cur->size, PAGE_SIZE)); + elfcorehdr_fill_device_ram_ptload_elf64(phdr, cur->paddr, cur->size); + + /* p_offset will be adjusted later. */ + phdr++; + ehdr->e_phnum++; + } + list_splice_tail(list, &vmcore_list); + + /* We changed elfcorebuf_sz and added new entries; reset all offsets. */ + vmcore_reset_offsets_elf64(); + + /* Finally, recalculate the total vmcore size. */ + vmcore_size =3D get_vmcore_size(elfcorebuf_sz, elfnotes_sz, + &vmcore_list); + proc_vmcore->size =3D vmcore_size; + return 0; +} + +static void vmcore_process_device_ram(struct vmcore_cb *cb) +{ + unsigned char *e_ident =3D (unsigned char *)elfcorebuf; + struct vmcore_range *first, *m; + LIST_HEAD(list); + int count; + + /* We only support Elf64 dumps for now. */ + if (WARN_ON_ONCE(e_ident[EI_CLASS] !=3D ELFCLASS64)) { + pr_err("device ram ranges only support Elf64\n"); + return; + } + + if (cb->get_device_ram(cb, &list)) { + pr_err("obtaining device ram ranges failed\n"); + return; + } + count =3D list_count_nodes(&list); + if (!count) + return; + + /* + * For some reason these ranges are already know? Might happen + * with unusual register->unregister->register sequences; we'll simply + * sanity check using the first range. + */ + first =3D list_first_entry(&list, struct vmcore_range, list); + list_for_each_entry(m, &vmcore_list, list) { + unsigned long long m_end =3D m->paddr + m->size; + unsigned long long first_end =3D first->paddr + first->size; + + if (first->paddr < m_end && m->paddr < first_end) + goto out_free; + } + + /* If adding the mem nodes succeeds, they must not be freed. */ + if (!vmcore_add_device_ram_elf64(&list, count)) + return; +out_free: + vmcore_free_ranges(&list); +} +#else /* !CONFIG_PROC_VMCORE_DEVICE_RAM */ +static void vmcore_process_device_ram(struct vmcore_cb *cb) +{ +} +#endif /* CONFIG_PROC_VMCORE_DEVICE_RAM */ + /* Free all dumps in vmcore device dump list */ static void vmcore_free_device_dumps(void) { diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h index 5d61c7454fd6..2f2555e6407c 100644 --- a/include/linux/crash_dump.h +++ b/include/linux/crash_dump.h @@ -20,6 +20,8 @@ extern int elfcorehdr_alloc(unsigned long long *addr, uns= igned long long *size); extern void elfcorehdr_free(unsigned long long addr); extern ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos); extern ssize_t elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos); +void elfcorehdr_fill_device_ram_ptload_elf64(Elf64_Phdr *phdr, + unsigned long long paddr, unsigned long long size); extern int remap_oldmem_pfn_range(struct vm_area_struct *vma, unsigned long from, unsigned long pfn, unsigned long size, pgprot_t prot); @@ -99,6 +101,12 @@ static inline void vmcore_unusable(void) * indicated in the vmcore instead. For example, a ballooned = page * contains no data and reading from such a page will cause h= igh * load in the hypervisor. + * @get_device_ram: query RAM ranges that can only be detected by device + * drivers, such as the virtio-mem driver, so they can be included in + * the crash dump on architectures that allocate the elfcore hdr in the = dump + * ("2nd") kernel. Indicated RAM ranges may contain holes to reduce the + * total number of ranges; such holes can be detected using the pfn_is_r= am + * callback just like for other RAM. * @next: List head to manage registered callbacks internally; initialized= by * register_vmcore_cb(). * @@ -109,6 +117,7 @@ static inline void vmcore_unusable(void) */ struct vmcore_cb { bool (*pfn_is_ram)(struct vmcore_cb *cb, unsigned long pfn); + int (*get_device_ram)(struct vmcore_cb *cb, struct list_head *list); struct list_head next; }; extern void register_vmcore_cb(struct vmcore_cb *cb); --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAE902040B7 for ; Wed, 4 Dec 2024 12:55:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316918; cv=none; b=Gty/yJkT1RxORAvcIsax5cDBo5RMmsN9Sog/QzihPnvUKwJMsS/aOpmtNaiTFRI3eAILZcPqeZetsulHVf/zR/HSvgyypo5xunoPxJ3uaJfhtiA2jv+CJ35CXtUeIKikxItMm0+neDCGpdNQk/wL6dRp0z2vowllZO6LjfLJf+I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316918; c=relaxed/simple; bh=+kw0hVN/R7EKfAHQdf+parzKCkCR3tVH/e099GIq3Ww=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=us9O66wxvxh+TDjlD2ZoGXm8Iezf1hxewyIgDh4wVHJYuJHKNpFH5h6uXnlr20m6oclDyAkDtZKQxEp3/HfgItHZ6PYEPq/nfyKwR08tQMZkPjg0MZKaVuTXX8yeyRu2+3ECT9NbpG9QG3MATiO7Hut2BINuhLWeQEIinMInoPg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=ZFomIgrP; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="ZFomIgrP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316916; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=na4vd6mThSkzeb6NVT06w3pd7mJ97fz8U44/x2n2hr0=; b=ZFomIgrPWyEqZA16QxQVbj5dj3zEpDpCeIbOYVdI+NAfyp9xYxh3X1AhNtLFyvnkbmEFEG Ex+Ys+DGTrpYQ6Euf8ZYRt2/fYi0lk3/4jzIuFgcQGOHAubOrQFxlxz+Vmm9AyzuVyC0oH Ot1SRxkma+T7Dz9WZpZHjMSYaHBpWzg= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-353-9ZIaFoszPSCRWYNSfx69Yg-1; Wed, 04 Dec 2024 07:55:15 -0500 X-MC-Unique: 9ZIaFoszPSCRWYNSfx69Yg-1 X-Mimecast-MFC-AGG-ID: 9ZIaFoszPSCRWYNSfx69Yg Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-434a51e44d0so55173095e9.3 for ; Wed, 04 Dec 2024 04:55:14 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316914; x=1733921714; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=na4vd6mThSkzeb6NVT06w3pd7mJ97fz8U44/x2n2hr0=; b=vUb1P2n8wZUh1Cm3seI4R+4sXnvb+7MdEmpWt2PKWxI8BFITlOBa6k073ynDqmmQmq BbJWjaf2oibln0Sgu9dUkGGF0ImBc4ylqaHJviPPyjs14oUal3/H9LjV7OpZXqHjkRqk xd+r7u712mMzlBPAF2lRNn+eUUOmvLqmV0mfwGxTMEJfjyEwlSk4HZMJOMEgwixPiOjM gw7xlTeWVYWT1RsTxpDORNQLvtVWigiMom7yI9mcOv5DmUZYLkWJ0euOTHI90yBQKzOj DLhLZjcUqbkmCtYjmRMBPaLUpgVVfFu1hfx7nwSxrJiUygsAnyqnfXbr0Y7li2Uu4+8t 2a7Q== X-Gm-Message-State: AOJu0YwuYidj6Fm5QvCa1beis4NUUl6hNJTJop2cv2Apzr1QgX6W5Kl5 yVFcO87RFEBr/oqp4ER0w+zExSz8QAF6GDZvbFruprBQcjnnARt+nqcrmEW2PAhtB+j+/o7Ijqe lfZ16BvJSEVVQopGARDHLvN7sc5ScS851owEedzGVed1R6YP7lIdyjC5UCpf+omk94J93MhStOl kfpY6nmLlO4dBRS6Vnsk8mPnBfI3BIBA1vgeSBynJTdbnD X-Gm-Gg: ASbGnctewteizsfKLSRNWhlR8oDW0QwbHpzg37L8jnqUE0lO0OkmvZ5MLdhZ5t1kBpn 33WAhoOcwPXwyiemMr/ghRjIk5i9KnSkcJCr/cXLtIzcBWjvY6DD9HkNN7LBzUOiMTjZx/zFRlE iBzz0pL27NfeIQ9apJjJPhSddBBiGQWGjijifQjHsQY0vFBEmNYRHeWncRIACL06LDiItkTb2Qc PursoyBCvBkMHzOGQmO2JW+Qz0E+Pg3R0UrdusJV0QnHNmgZNXJ13s81lkrXli0wIg+xc/+VSNs MKJ6eILBJBTr+q/bVguDz8ZJRHfvJPhwdXQ= X-Received: by 2002:a05:600c:3550:b0:434:a781:f5d5 with SMTP id 5b1f17b1804b1-434d0a15047mr62644425e9.30.1733316913778; Wed, 04 Dec 2024 04:55:13 -0800 (PST) X-Google-Smtp-Source: AGHT+IHdVB6YFjtubaQuZKYqVl7K3swrZVKNM9mWRen9YVYSXicgBrRTJ3zdugRU4fK2CCWYQJl/Fg== X-Received: by 2002:a05:600c:3550:b0:434:a781:f5d5 with SMTP id 5b1f17b1804b1-434d0a15047mr62643915e9.30.1733316913375; Wed, 04 Dec 2024 04:55:13 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-385df488559sm15210226f8f.63.2024.12.04.04.55.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:55:12 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 09/12] virtio-mem: mark device ready before registering callbacks in kdump mode Date: Wed, 4 Dec 2024 13:54:40 +0100 Message-ID: <20241204125444.1734652-10-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" After the callbacks are registered we may immediately get a callback. So mark the device ready before registering the callbacks. Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- drivers/virtio/virtio_mem.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/virtio/virtio_mem.c b/drivers/virtio/virtio_mem.c index b0b871441578..126f1d669bb0 100644 --- a/drivers/virtio/virtio_mem.c +++ b/drivers/virtio/virtio_mem.c @@ -2648,6 +2648,7 @@ static int virtio_mem_init_hotplug(struct virtio_mem = *vm) if (rc) goto out_unreg_pm; =20 + virtio_device_ready(vm->vdev); return 0; out_unreg_pm: unregister_pm_notifier(&vm->pm_notifier); @@ -2729,6 +2730,8 @@ static bool virtio_mem_vmcore_pfn_is_ram(struct vmcor= e_cb *cb, =20 static int virtio_mem_init_kdump(struct virtio_mem *vm) { + /* We must be prepared to receive a callback immediately. */ + virtio_device_ready(vm->vdev); #ifdef CONFIG_PROC_VMCORE dev_info(&vm->vdev->dev, "memory hot(un)plug disabled in kdump kernel\n"); vm->vmcore_cb.pfn_is_ram =3D virtio_mem_vmcore_pfn_is_ram; @@ -2870,8 +2873,6 @@ static int virtio_mem_probe(struct virtio_device *vde= v) if (rc) goto out_del_vq; =20 - virtio_device_ready(vdev); - /* trigger a config update to start processing the requested_size */ if (!vm->in_kdump) { atomic_set(&vm->config_changed, 1); --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82D6E209F53 for ; Wed, 4 Dec 2024 12:55:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316921; cv=none; b=PC2+PiAhNyeaP6qDH6JldTcFpGD+S4T34/dx4cyEq4P6ETZUoqWyfjGJgYVXN0RbNw8np7Ux8uTjHxhSLK82z2lyQylXCHK/tH10/s/uFkq4P9Ly8v6zRC+lWTKNypwWHhpqOhmlvETb3B6P6oqjy3yTjecXsbh/C87y0CAd+E8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316921; c=relaxed/simple; bh=saVx3j66yQi6SYE+wOeyLCRXDHSMKU0oWoMw4xOdqbM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AomUow5eGwiEg8PqGDDo048LHvFEC9phJ4IINkHA4NsbV9c502emIC9HujvI7fPRDmQ4iC/gCulfx/920Km2NnugG/MIdU1b/VlpS/61/giqdVgkKMqXKq3fkcC1xj6g4Z0Y0lrnYJ3zlIJQX1Fi2Ij/ShVwPhMh2MzX2bG+n0M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=dSRvqY32; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="dSRvqY32" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316918; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8qWcPvM3uPJNBlH29eIda0Org6XNMptmimUFcDc8wZo=; b=dSRvqY32SWKGnp+Ac6bqQ6v8EVxPe4dnD6G/WvcZj7YUdCB8w4mQ9SDrHbooEcRA8AMeYM tkKOUDjyl/BBw34BAbh6QL+o0zCkjIEgvawigXMHrOja3WxFsmAFerj5lmknN3kMcPG+mQ JAs3yhNuKIMf/StXDn//oW3cJ00div4= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-259-c7zab5PVNOqKCZitjbTZZQ-1; Wed, 04 Dec 2024 07:55:17 -0500 X-MC-Unique: c7zab5PVNOqKCZitjbTZZQ-1 X-Mimecast-MFC-AGG-ID: c7zab5PVNOqKCZitjbTZZQ Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4349fd2965fso62450015e9.1 for ; Wed, 04 Dec 2024 04:55:17 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316916; x=1733921716; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8qWcPvM3uPJNBlH29eIda0Org6XNMptmimUFcDc8wZo=; b=quGGcOBsCrBaQiQU23PbSBGzH2XFavjaqxK13kJdySI7B2YuwAaB+G8iPs9m1MLJtn H1FbIEXyOeR1W7lL6bbRxRp6vy2zzc27pjTYAk/oXZdodUiqBna0v6TPBIkCEFOUFmPd iKLCUeQ6QUnqFX6b0gh4HqioZPwfa7XDY0PoQM8IZJl4EXiKl2rVuLHlbrYaAVStIUpj PW6AylAsC4TZkC1wagwBNY0oGV5FM++1dj2XWiGUUfJxRYFPy2ji4LThp4EsaIvrOuM3 8TqNYHZbz1frTBjUWsQvoxpyx8zMavWgf6IpZXErvDgnRt0WOlwR4KdnAgzdLPl/gVM0 i+Gg== X-Gm-Message-State: AOJu0YyNbz1cD1mujP6GnPC0H9dbk4bzw15qZjzJcnhyUEwQTTxiE6GJ J83KLXpTvRA6J80ijr5DRawDmoZy4V494n1nIKTPBNOSskPFrZUX2fCnz519n/yFQZlPZNU29pO 25gid2eP2ZvQneGnA+BD9aHpNU2cbnQv0fkd+bqAF15xq8Mx8BhP/oTt/1Vx9QOGTx7IFeluOAA fVMUjiOFarKOJ4ZAXr/bJxyABcG+geP4TzHnvO43DiqoYt X-Gm-Gg: ASbGncuYP7QRtvel0qmsuLAStlAu5O3BU3lhsQEwOzJg+/AkspwtK04uR/gSKp0J1n7 lAPSTGoa/n/98rKPtQDLJ9HKeWJzT9DTTxsMDTEuPB5F3hn0P/U7tRxbhdJesSbFFPBqLcBBpFC CMmMz/Izdc0edEPLAd9tVtHeWJNOX0p6PbzEPI4Z6LiKQG0Tcy1A5kxw1AKJcAe4IZ5BwWLDgoU IdzIQ77qWxHN8B8y593D01hGIaDSJhS1OCAfbw5QoBWTkAzWMZirGOXBzY8b5Ek6IiUYzi57xTB ck5xvsFAx63K1Y5YdKAsY3SShnzoGSvXQzM= X-Received: by 2002:a05:600c:4fc9:b0:434:a986:11cf with SMTP id 5b1f17b1804b1-434d09c0faamr58500055e9.8.1733316916588; Wed, 04 Dec 2024 04:55:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IH0Ukl1ZPphCA+wOQqYI2PG+9UegKLtZCsee5cNCt9biGs2cCCF0gJFsDeKmcsipWxLJl404A== X-Received: by 2002:a05:600c:4fc9:b0:434:a986:11cf with SMTP id 5b1f17b1804b1-434d09c0faamr58499655e9.8.1733316916209; Wed, 04 Dec 2024 04:55:16 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-434d52a3139sm24274545e9.28.2024.12.04.04.55.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:55:14 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 10/12] virtio-mem: remember usable region size Date: Wed, 4 Dec 2024 13:54:41 +0100 Message-ID: <20241204125444.1734652-11-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Let's remember the usable region size, which will be helpful in kdump mode next. Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- drivers/virtio/virtio_mem.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/virtio/virtio_mem.c b/drivers/virtio/virtio_mem.c index 126f1d669bb0..73477d5b79cf 100644 --- a/drivers/virtio/virtio_mem.c +++ b/drivers/virtio/virtio_mem.c @@ -133,6 +133,8 @@ struct virtio_mem { uint64_t addr; /* Maximum region size in bytes. */ uint64_t region_size; + /* Usable region size in bytes. */ + uint64_t usable_region_size; =20 /* The parent resource for all memory added via this device. */ struct resource *parent_resource; @@ -2368,7 +2370,7 @@ static int virtio_mem_cleanup_pending_mb(struct virti= o_mem *vm) static void virtio_mem_refresh_config(struct virtio_mem *vm) { const struct range pluggable_range =3D mhp_get_pluggable_range(true); - uint64_t new_plugged_size, usable_region_size, end_addr; + uint64_t new_plugged_size, end_addr; =20 /* the plugged_size is just a reflection of what _we_ did previously */ virtio_cread_le(vm->vdev, struct virtio_mem_config, plugged_size, @@ -2378,8 +2380,8 @@ static void virtio_mem_refresh_config(struct virtio_m= em *vm) =20 /* calculate the last usable memory block id */ virtio_cread_le(vm->vdev, struct virtio_mem_config, - usable_region_size, &usable_region_size); - end_addr =3D min(vm->addr + usable_region_size - 1, + usable_region_size, &vm->usable_region_size); + end_addr =3D min(vm->addr + vm->usable_region_size - 1, pluggable_range.end); =20 if (vm->in_sbm) { @@ -2763,6 +2765,8 @@ static int virtio_mem_init(struct virtio_mem *vm) virtio_cread_le(vm->vdev, struct virtio_mem_config, addr, &vm->addr); virtio_cread_le(vm->vdev, struct virtio_mem_config, region_size, &vm->region_size); + virtio_cread_le(vm->vdev, struct virtio_mem_config, usable_region_size, + &vm->usable_region_size); =20 /* Determine the nid for the device based on the lowest address. */ if (vm->nid =3D=3D NUMA_NO_NODE) --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD73120B21A for ; Wed, 4 Dec 2024 12:55:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316926; cv=none; b=OosZeezPCuy7jsQpv2nHqxht2Y0WyF6tTAJC66JdlNPyliatronRTgda32BI0KH7ddS6a7ODfIuXbRpFMmb+Zjz3bUtpCaa0yF4612j0i5OewbaCzMFfhDOrhhvaTHWipBbCRXltiI8j83TAU0bfxcEZbRmgjBTlFlPPSSw17qQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316926; c=relaxed/simple; bh=N+omNMBxmCIiBaT6aoDaJz2BLDTJK2NT8K0YRXJ+Was=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Y/dtU+y4N7sW145jo+nFhz9fQatubcX5Ef3m5lfXHVGcxKvc8Y0lrVrtsjEFaD+oI8DbEiHF6ZQ1Plav9tIiNpeOrMs4AE3t9zJYF8nqpRCNpxJnnmbvYk0iofEmA3z1drGuHvWr5zHT1lVxqaPuf5sOF80atSI+Q+dsq275G90= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=K06GoZ5r; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="K06GoZ5r" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316922; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GxsrWUisM+4YkdsHUV4TP4AYDbO5CJkwL1nd2GKtk5k=; b=K06GoZ5rr3R/W2L2FHfsfoQiTojEtr86CwiQuqvyllogryALBF52oqIhMyc42BdokMdHwo /XyOI4FOE2e8DPx2J9thMVnNPkz//5jzXyRuyePXP5RYB0+n9BLuCbOp8ZhpfU/uIssfh6 qmId0FsrRE+YyYqidld09CCGs6wfutc= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-393-zkovl8b7OceWFxTLdeewgg-1; Wed, 04 Dec 2024 07:55:22 -0500 X-MC-Unique: zkovl8b7OceWFxTLdeewgg-1 X-Mimecast-MFC-AGG-ID: zkovl8b7OceWFxTLdeewgg Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4349cbf726cso49760945e9.3 for ; Wed, 04 Dec 2024 04:55:21 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316921; x=1733921721; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GxsrWUisM+4YkdsHUV4TP4AYDbO5CJkwL1nd2GKtk5k=; b=kPuQ7D0To70e8NCNkcIafNdDIThu0yJJvbZWgjnTuBCbhGtvUOgIZIhgS4ksdLJYMv PQAwaXO1SYmoPL6yadeTyO3nCwFkyErdMmOw2Fc7XW+RzdQtxowAzCTgfGy8uU6EItOT qk/4Ote1UhwoeEhMLs/yB1WTAaGsS72ZL8CiBDUxa89kQf3SYE9P5J15SvyAvdAnvke0 KfJHnXRx1hTFmmPJGo8DPWXkJVaIqZZJ6ap6ZoXa3gyk52depl4fyVYFB7tlY9ZRmJ6S HIbaYRtZfU7LXU/a9vDZYAVwSrOdAGUcZQEZw+Tmifom3lYb4NjXT8/wOayVZU0yzx5D 9S4g== X-Gm-Message-State: AOJu0YyP8QsuW5YwdHZ6Ykr1sBB3v+5346UcDuJ0zkRLOuWZtdOyzDSY VQMHCF+dgLtRltrbtGz4yWuKNXv8654eOCejCOxAZFmL1HUVbeYaERwts1QVyD3pk0dOEhF8yjl lWt2yxSP2gUnc7qC3mEtaT99Ilcp7zvwM5WZYsY959DfpKKn0Vs5jEYQSBSxRUoqIF89GSZy1KA Bxz+U0UugUD6zOg0qkk73C7kLpRt/imYNODWJCzeF54Cub X-Gm-Gg: ASbGnctnjnRhkR757XHjq+T3Tzz30yBwumO2oRuNrNjf5Wm9v35kjqujVp7zvTEs9LH L0dnBVUeKypovirMVydt+mkMYCNzvN+SmBic9WnaIVBWukot4l4vSMMAyRh8VZyQ+aJWc8dfcWe okax9tmC662/O7RRNEAjI0m4gdhzGEOJldNA9H357Viscky81HPONROkZgOe3W7PtS9EocNcOib Tckxa8iD4MvLWayFsCffM+/TsMBIT6wUtMWLTFiOTffpsG1NmlRBpktwFzk5HT+kqUo54Z9asqO hdjA3vAWPaLiVbPJt9zHpPegMCNwRMndgLM= X-Received: by 2002:a5d:5986:0:b0:382:4115:1ccb with SMTP id ffacd0b85a97d-385fd3cd078mr5363661f8f.7.1733316920851; Wed, 04 Dec 2024 04:55:20 -0800 (PST) X-Google-Smtp-Source: AGHT+IHVrn7snw7RGTPCk/ImHOMtvIc2Zo//ldD8UcsohYWGwkye1iFqtEVkXPmZASBRCfdSRO6pnw== X-Received: by 2002:a5d:5986:0:b0:382:4115:1ccb with SMTP id ffacd0b85a97d-385fd3cd078mr5363620f8f.7.1733316920347; Wed, 04 Dec 2024 04:55:20 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-434d52c0bc7sm23529155e9.35.2024.12.04.04.55.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:55:19 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 11/12] virtio-mem: support CONFIG_PROC_VMCORE_DEVICE_RAM Date: Wed, 4 Dec 2024 13:54:42 +0100 Message-ID: <20241204125444.1734652-12-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Let's implement the get_device_ram() vmcore callback, so architectures that select NEED_PROC_VMCORE_NEED_DEVICE_RAM, like s390 soon, can include that memory in a crash dump. Merge ranges, and process ranges that might contain a mixture of plugged and unplugged, to reduce the total number of ranges. Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- drivers/virtio/virtio_mem.c | 88 +++++++++++++++++++++++++++++++++++++ fs/proc/Kconfig | 1 + 2 files changed, 89 insertions(+) diff --git a/drivers/virtio/virtio_mem.c b/drivers/virtio/virtio_mem.c index 73477d5b79cf..8a294b9cbcf6 100644 --- a/drivers/virtio/virtio_mem.c +++ b/drivers/virtio/virtio_mem.c @@ -2728,6 +2728,91 @@ static bool virtio_mem_vmcore_pfn_is_ram(struct vmco= re_cb *cb, mutex_unlock(&vm->hotplug_mutex); return is_ram; } + +#ifdef CONFIG_PROC_VMCORE_DEVICE_RAM +static int virtio_mem_vmcore_add_device_ram(struct virtio_mem *vm, + struct list_head *list, uint64_t start, uint64_t end) +{ + int rc; + + rc =3D vmcore_alloc_add_range(list, start, end - start); + if (rc) + dev_err(&vm->vdev->dev, + "Error adding device RAM range: %d\n", rc); + return rc; +} + +static int virtio_mem_vmcore_get_device_ram(struct vmcore_cb *cb, + struct list_head *list) +{ + struct virtio_mem *vm =3D container_of(cb, struct virtio_mem, + vmcore_cb); + const uint64_t device_start =3D vm->addr; + const uint64_t device_end =3D vm->addr + vm->usable_region_size; + uint64_t chunk_size, cur_start, cur_end, plugged_range_start =3D 0; + LIST_HEAD(tmp_list); + int rc; + + if (!vm->plugged_size) + return 0; + + /* Process memory sections, unless the device block size is bigger. */ + chunk_size =3D max_t(uint64_t, PFN_PHYS(PAGES_PER_SECTION), + vm->device_block_size); + + mutex_lock(&vm->hotplug_mutex); + + /* + * We process larger chunks and indicate the complete chunk if any + * block in there is plugged. This reduces the number of pfn_is_ram() + * callbacks and mimic what is effectively being done when the old + * kernel would add complete memory sections/blocks to the elfcore hdr. + */ + cur_start =3D device_start; + for (cur_start =3D device_start; cur_start < device_end; cur_start =3D cu= r_end) { + cur_end =3D ALIGN_DOWN(cur_start + chunk_size, chunk_size); + cur_end =3D min_t(uint64_t, cur_end, device_end); + + rc =3D virtio_mem_send_state_request(vm, cur_start, + cur_end - cur_start); + + if (rc < 0) { + dev_err(&vm->vdev->dev, + "Error querying block states: %d\n", rc); + goto out; + } else if (rc !=3D VIRTIO_MEM_STATE_UNPLUGGED) { + /* Merge ranges with plugged memory. */ + if (!plugged_range_start) + plugged_range_start =3D cur_start; + continue; + } + + /* Flush any plugged range. */ + if (plugged_range_start) { + rc =3D virtio_mem_vmcore_add_device_ram(vm, &tmp_list, + plugged_range_start, + cur_start); + if (rc) + goto out; + plugged_range_start =3D 0; + } + } + + /* Flush any plugged range. */ + if (plugged_range_start) + rc =3D virtio_mem_vmcore_add_device_ram(vm, &tmp_list, + plugged_range_start, + cur_start); +out: + mutex_unlock(&vm->hotplug_mutex); + if (rc < 0) { + vmcore_free_ranges(&tmp_list); + return rc; + } + list_splice_tail(&tmp_list, list); + return 0; +} +#endif /* CONFIG_PROC_VMCORE_DEVICE_RAM */ #endif /* CONFIG_PROC_VMCORE */ =20 static int virtio_mem_init_kdump(struct virtio_mem *vm) @@ -2737,6 +2822,9 @@ static int virtio_mem_init_kdump(struct virtio_mem *v= m) #ifdef CONFIG_PROC_VMCORE dev_info(&vm->vdev->dev, "memory hot(un)plug disabled in kdump kernel\n"); vm->vmcore_cb.pfn_is_ram =3D virtio_mem_vmcore_pfn_is_ram; +#ifdef CONFIG_PROC_VMCORE_DEVICE_RAM + vm->vmcore_cb.get_device_ram =3D virtio_mem_vmcore_get_device_ram; +#endif /* CONFIG_PROC_VMCORE_DEVICE_RAM */ register_vmcore_cb(&vm->vmcore_cb); return 0; #else /* CONFIG_PROC_VMCORE */ diff --git a/fs/proc/Kconfig b/fs/proc/Kconfig index 5668620ab34d..6ae966c561e7 100644 --- a/fs/proc/Kconfig +++ b/fs/proc/Kconfig @@ -67,6 +67,7 @@ config NEED_PROC_VMCORE_DEVICE_RAM config PROC_VMCORE_DEVICE_RAM def_bool y depends on PROC_VMCORE && NEED_PROC_VMCORE_DEVICE_RAM + depends on VIRTIO_MEM help If the elfcore hdr is allocated and prepared by the dump kernel ("2nd kernel") instead of the crashed kernel, RAM provided by memory --=20 2.47.1 From nobody Thu Dec 18 21:32:32 2025 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B80420C002 for ; Wed, 4 Dec 2024 12:55:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316929; cv=none; b=OQX1GzlrLOrs0dT6YQiPGWQNp7nikuqnnN33bEIYNNB+Vxz2YLzZ81YQG74k3RpfnHz+UpKBmV0VGXmxlqn4svG6xHT2F0w7mrg8BQw3HKjkkW0LQThiZ7yv3Hfvb8kE0efKY1VMfqIhzUQ3tF6SuqPYEeH7DizFqNmk4y8CdzM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733316929; c=relaxed/simple; bh=uRjaOZTjHUvybJWAv9vGsJi33hCxx6hpGz/B8OQ605Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jnTQgitynwSkECW810x4yanGuXvCsnsqF8DY+EB2uQJI4NQHoUILURu54nMCDkegLEf7TVSm4KfUT5ccK4irWpz16Dl7pV9Xe4N5H2ZLUfAS7ldUco3C1zhSZNRO4f2cxrK1x9/LSeZ942j+LQNviqXbmuuuuSbSAw2Kubcj8qI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=T9D+TN+y; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="T9D+TN+y" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1733316927; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QMLpjiP43p31BywTFNffjh3NzCBHssnVGTYWU2BwGcs=; b=T9D+TN+y7duHdT4O6/BdTN0Q7c1DaPX9YpL7IHUOMg0adAYYIAILjwx3ErMs9HujfQsV99 vUqZV0/TJHqPyW3LUFU42YYbO6FmkYLbm9vfJDgecaChKEzK5uFnP5kr934A63lX+nOiOf 6lf2a/PmZSlv9QaLG09v29vMT9LC7v0= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-461-VShdZC6WN0qrAMr8sQQP_Q-1; Wed, 04 Dec 2024 07:55:25 -0500 X-MC-Unique: VShdZC6WN0qrAMr8sQQP_Q-1 X-Mimecast-MFC-AGG-ID: VShdZC6WN0qrAMr8sQQP_Q Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4349f32c9a6so55271035e9.3 for ; Wed, 04 Dec 2024 04:55:25 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733316924; x=1733921724; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QMLpjiP43p31BywTFNffjh3NzCBHssnVGTYWU2BwGcs=; b=jV7XJOIotPO+UrbFrqzr7B8H6q2ZbRY9aI63upR17DI7qPnZ7+H3ib6dBidygQSLIa 1elQ1BNx/+pKdXDxR0VwbygW7UyM7wi3nP6Akiosa6VO16qMQ52GmqLAHSawU5xqKQtS NS2FtraWUnzTmzqeHfJXva+SAayBqtkIbd4WtVnhHofTCLYPtPY2SMxjACNBYp9naFP5 i2mJK7UQpOZTGNQHcxmIDwRYETLb0o3W3lbxRQ7/Zq1v9Qyt3mDpQu7mpBJu1hNhlnvv ZVSNuqSidugdHyCTTzUfo5qLb5otj32yzPDfvjkiLSNn7+LV+6qjEHf9WIzSA/bkrDLW aOVw== X-Gm-Message-State: AOJu0YwN5khX8uXF66Y/AOoKrQ9mnRCBEuQT4OkxoZiSUwlmVCn+tZaV u1Nj8yx7DTorUdxOPTFnaa5nBx6MEm5V4jNk4PvDh2j+eRm2xXrTH5/VOl5sMETC+AAdr9r7v1T 41bZ+VQerAq3SvHGEcpwQ7CAjGXWoFSc0F2d4PcdTdQEKUdy7hep7m/4+LRRt32UkL2dVN0KSev AievTwU3cHQPXlkXZy/gwsweesYErXuULBNzYRHBFvJHr1 X-Gm-Gg: ASbGncsYRvh4Grul/I/HjjlU2Eps9lIoPipLxxlzEpxjPgUrDFNLxFcIR63cUfQUSaD a5Rz+b2eKX/ECdLfSd/MH7hBb2byDQAnoZIaiWc6EBnoNy35Mp2m4hYZb2nwNb0uPlfiScq5Mwb 3gcyrHKUnY9+hCnsGD1paN2TWqmNcg2aN55AbZdT9wluHvcezZVQwDQ6d9IgPINtvH7bVPaYiVs 2z3FHWtLOjEyNU3zbyY2bfBuK0JLU6H/3nv8Wu4KBLfnFhy8N7OGmtqT418eSsbu/q2VFRTuU6r qA0dx4qs4KuKl1JQkveKIsoFAJd2HBRdrv8= X-Received: by 2002:a05:600c:1910:b0:434:a962:2aa2 with SMTP id 5b1f17b1804b1-434d0a178d4mr49286725e9.33.1733316924515; Wed, 04 Dec 2024 04:55:24 -0800 (PST) X-Google-Smtp-Source: AGHT+IFFzA2SYKI5zve6AhLcTcIqYEQR+M/xeFfejA5VMHPdifDyO5ycBtXVIAK8EC4IQe7u0N0Ewg== X-Received: by 2002:a05:600c:1910:b0:434:a962:2aa2 with SMTP id 5b1f17b1804b1-434d0a178d4mr49286335e9.33.1733316924087; Wed, 04 Dec 2024 04:55:24 -0800 (PST) Received: from localhost (p200300cbc70be10038d68aa111b0a20a.dip0.t-ipconnect.de. [2003:cb:c70b:e100:38d6:8aa1:11b0:a20a]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-434d52c0bc7sm23531055e9.35.2024.12.04.04.55.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 04 Dec 2024 04:55:22 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org, linux-s390@vger.kernel.org, virtualization@lists.linux.dev, kvm@vger.kernel.org, linux-fsdevel@vger.kernel.org, kexec@lists.infradead.org, David Hildenbrand , Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , "Michael S. Tsirkin" , Jason Wang , Xuan Zhuo , =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Baoquan He , Vivek Goyal , Dave Young , Thomas Huth , Cornelia Huck , Janosch Frank , Claudio Imbrenda , Eric Farman , Andrew Morton Subject: [PATCH v2 12/12] s390/kdump: virtio-mem kdump support (CONFIG_PROC_VMCORE_DEVICE_RAM) Date: Wed, 4 Dec 2024 13:54:43 +0100 Message-ID: <20241204125444.1734652-13-david@redhat.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20241204125444.1734652-1-david@redhat.com> References: <20241204125444.1734652-1-david@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Let's add support for including virtio-mem device RAM in the crash dump, setting NEED_PROC_VMCORE_DEVICE_RAM, and implementing elfcorehdr_fill_device_ram_ptload_elf64(). To avoid code duplication, factor out the code to fill a PT_LOAD entry. Signed-off-by: David Hildenbrand Acked-by: Heiko Carstens # s390 Acked-by: Michael S. Tsirkin --- arch/s390/Kconfig | 1 + arch/s390/kernel/crash_dump.c | 39 ++++++++++++++++++++++++++++------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 0077969170e8..c230bad7f5cc 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -240,6 +240,7 @@ config S390 select MODULES_USE_ELF_RELA select NEED_DMA_MAP_STATE if PCI select NEED_PER_CPU_EMBED_FIRST_CHUNK + select NEED_PROC_VMCORE_DEVICE_RAM if PROC_VMCORE select NEED_SG_DMA_LENGTH if PCI select OLD_SIGACTION select OLD_SIGSUSPEND3 diff --git a/arch/s390/kernel/crash_dump.c b/arch/s390/kernel/crash_dump.c index cd0c93a8fb8b..f699df2a2b11 100644 --- a/arch/s390/kernel/crash_dump.c +++ b/arch/s390/kernel/crash_dump.c @@ -508,6 +508,19 @@ static int get_mem_chunk_cnt(void) return cnt; } =20 +static void fill_ptload(Elf64_Phdr *phdr, unsigned long paddr, + unsigned long vaddr, unsigned long size) +{ + phdr->p_type =3D PT_LOAD; + phdr->p_vaddr =3D vaddr; + phdr->p_offset =3D paddr; + phdr->p_paddr =3D paddr; + phdr->p_filesz =3D size; + phdr->p_memsz =3D size; + phdr->p_flags =3D PF_R | PF_W | PF_X; + phdr->p_align =3D PAGE_SIZE; +} + /* * Initialize ELF loads (new kernel) */ @@ -520,14 +533,8 @@ static void loads_init(Elf64_Phdr *phdr, bool os_info_= has_vm) if (os_info_has_vm) old_identity_base =3D os_info_old_value(OS_INFO_IDENTITY_BASE); for_each_physmem_range(idx, &oldmem_type, &start, &end) { - phdr->p_type =3D PT_LOAD; - phdr->p_vaddr =3D old_identity_base + start; - phdr->p_offset =3D start; - phdr->p_paddr =3D start; - phdr->p_filesz =3D end - start; - phdr->p_memsz =3D end - start; - phdr->p_flags =3D PF_R | PF_W | PF_X; - phdr->p_align =3D PAGE_SIZE; + fill_ptload(phdr, start, old_identity_base + start, + end - start); phdr++; } } @@ -537,6 +544,22 @@ static bool os_info_has_vm(void) return os_info_old_value(OS_INFO_KASLR_OFFSET); } =20 +#ifdef CONFIG_PROC_VMCORE_DEVICE_RAM +/* + * Fill PT_LOAD for a physical memory range owned by a device and detected= by + * its device driver. + */ +void elfcorehdr_fill_device_ram_ptload_elf64(Elf64_Phdr *phdr, + unsigned long long paddr, unsigned long long size) +{ + unsigned long old_identity_base =3D 0; + + if (os_info_has_vm()) + old_identity_base =3D os_info_old_value(OS_INFO_IDENTITY_BASE); + fill_ptload(phdr, paddr, old_identity_base + paddr, size); +} +#endif + /* * Prepare PT_LOAD type program header for kernel image region */ --=20 2.47.1