Message ID | 2024020145-junior-outnumber-3e76@gregkh |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel+bounces-49112-ouuuleilei=gmail.com@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:9bc1:b0:106:209c:c626 with SMTP id op1csp169529dyc; Thu, 1 Feb 2024 18:45:06 -0800 (PST) X-Google-Smtp-Source: AGHT+IElPec20CrFgJDZe2NMw/te95d259f6lXOWCGzXTB+ztAv/RpBs15heK4LjlH9jYJ4hVPWc X-Received: by 2002:a05:6870:b14a:b0:219:127c:f6f0 with SMTP id a10-20020a056870b14a00b00219127cf6f0mr670750oal.16.1706841906005; Thu, 01 Feb 2024 18:45:06 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1706841905; cv=pass; d=google.com; s=arc-20160816; b=NFHpuYRPR60S/X0yCxgDkNnvOYa1mIApKoVlT3dR4+I36UashBVKXOTbqK74aJhZaP 8xWm40UbfLaHnQFepcfiAi3Rq5eYddwAXqtyv8QRFJiCJT/ZyMThwjt9ON3wYnK8udzN pVSZwTXXi77nypxHkyDj0KNjxIKM9KFpyqNPJs9mT87JP1sKIWEwrmcZweLdAYuChEZt slavUjvhJhau6fMZ9vlThnY1iU6UuZNNekwNUTkk2rSjkoJiRbKIvhI7m46ylZNTHHpM iL+Jsh682J7TuatqR8xEzTkGSBuHXe09+eCHsSHWgr5AZbfd0GwCFe39TMBlbl3PV/pr ut3w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:lines:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=PxmUY85i1YusQzfaW6GpQXjO/89xHZwI4/MkrDINs64=; fh=UH434iyiJP8hI8pCQkr81rdsM7A8ua2iQvu7+ByYq98=; b=YJVwF2+p53WHaLgkqd9OlHc0KAliTbDjSWIE2xLLPD+MXaKFo209QacVbkHXaP7mCW IZc0PhSgGWy3FrR4TCcPCpSX4W8eUnJjDQEz4MciojHyuOY+WgjDFL4h5fTKdw1wAsUq O4iwaMT5SVG15j3tux7JlZvMzj5V4MP4vaMUeR0Rx77whFgnYOcnfbQgzwU/jpjBAKuV htYKMighC6rAA9VJP93vMJvI8/IBc7nnpOuS7567vgoRvSGBQvujE7oyU4PyzOS/9tG7 13+zkDgQLsNcvBkdViD3YekKFBHVd58E5QqDG9wWMsEL6/Wen4pR50sXM6DlEHf/p8EQ U7bQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=2goiYu98; arc=pass (i=1 dkim=pass dkdomain=linuxfoundation.org); spf=pass (google.com: domain of linux-kernel+bounces-49112-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-49112-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org X-Forwarded-Encrypted: i=1; AJvYcCXjxI0GYItN2k1EE8d+tMo6LxoZgeL4VIUKExH8WjdG0Xf87wa/N0+qPBzU+6bJB0i0Yl/u2m58M1cjnWh6hb2XXe9Wcg== Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id h9-20020a63c009000000b005d6bcde1358si781653pgg.464.2024.02.01.18.45.05 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Feb 2024 18:45:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-49112-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=2goiYu98; arc=pass (i=1 dkim=pass dkdomain=linuxfoundation.org); spf=pass (google.com: domain of linux-kernel+bounces-49112-ouuuleilei=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-49112-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id BD85E28DE6D for <ouuuleilei@gmail.com>; Fri, 2 Feb 2024 02:45:05 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id ABE97D275; Fri, 2 Feb 2024 02:44:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="2goiYu98" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E7D87C14E; Fri, 2 Feb 2024 02:44:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706841890; cv=none; b=i0P/L1rpXZARq2RrZF26QQjZ4yWIZZLPDXK0cOQL3k1XxHNMTYfMHYSOg9/ZzEn0Ywf5CF9SWQh5PQc9PNUckIQwAdPidgn0izshXOIJrhbx2GOPGUZLgbHRkFlHJGAL8fHTtf6ZT5y06QUvRPI9H3Bph8ycFbfiYlVsEdmdzms= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706841890; c=relaxed/simple; bh=UxYhGOC3xGtEqwmfDbPKpEHtugDzcWDIdIzgloJyoj4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=ZXcv6NFhDlvUWEZ+rpgEgM3HwhSuZtINQcpjiRt615pOBBUU6G0nzbp6j7fMk3XNr0U7ENFW7z2zNvHGyYMC/Fjkl09XbJ8Kv+G6yru5L394X4K/WNC8LOrhq4LNRcgDFAkPtz0s1OaZLWZj+Y04py5/6VzuceWQ1wHibhFtAYM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=2goiYu98; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4FED2C433C7; Fri, 2 Feb 2024 02:44:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1706841889; bh=UxYhGOC3xGtEqwmfDbPKpEHtugDzcWDIdIzgloJyoj4=; h=From:To:Cc:Subject:Date:From; b=2goiYu98felbKd5KISw9FnvrmutZFoQa+GKyAQur7cZdCfbtDbhmseIPSY7YvxWWg 5RM4+4kPghag+iU+Tp/U7gNXJbCMuV+/F0Bh0x+VVwgtp7T4V72Nde6BlHRIvgYH7L PS7TVsQs9jkwCKs9FfEa3r2kkuepqDILGA3KmIsM= From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> To: naveenkrishna.chatradhi@amd.com Cc: linux-kernel@vger.kernel.org, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Carlos Bilbao <carlos.bilbao@amd.com>, Hans de Goede <hdegoede@redhat.com>, =?utf-8?q?Ilpo_J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>, platform-driver-x86@vger.kernel.org Subject: [PATCH v2] platform/x86/amd/hsmp: switch to use device_add_groups() Date: Thu, 1 Feb 2024 18:44:46 -0800 Message-ID: <2024020145-junior-outnumber-3e76@gregkh> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Lines: 36 X-Developer-Signature: v=1; a=openpgp-sha256; l=1411; i=gregkh@linuxfoundation.org; h=from:subject:message-id; bh=UxYhGOC3xGtEqwmfDbPKpEHtugDzcWDIdIzgloJyoj4=; b=owGbwMvMwCRo6H6F97bub03G02pJDKl7wmU91nxoz5Q+LvJuvuWflDex+1nj5i39HPA3Yrqyh pX3B4E9HbEsDIJMDLJiiixftvEc3V9xSNHL0PY0zBxWJpAhDFycAjCR0D0M89RDXZfPZrK/qf5/ /cOcpLl/w3g5Wxjmmey4deHWqopb7FecLy9tXNF+O/v4DwA= X-Developer-Key: i=gregkh@linuxfoundation.org; a=openpgp; fpr=F4B60CC5BF78C2214A313DCB3147D40DDB2DFB29 Content-Transfer-Encoding: 8bit X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1789361605503877993 X-GMAIL-MSGID: 1789753458432486507 |
Series |
[v2] platform/x86/amd/hsmp: switch to use device_add_groups()
|
|
Commit Message
Greg KH
Feb. 2, 2024, 2:44 a.m. UTC
The use of devm_*() functions works properly for when the device
structure itself is dynamic, but the hsmp driver is attempting to have a
local, static, struct device and then calls devm_() functions attaching
memory to the device that will never be freed.
The logic of having a static struct device is almost never a wise
choice, but for now, just remove the use of devm_device_add_groups() in
this driver as it obviously is not needed.
Cc: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com>
Cc: Carlos Bilbao <carlos.bilbao@amd.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Cc: platform-driver-x86@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
v2: rebased against platform/for-next
drivers/platform/x86/amd/hsmp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
Hi Greg, On 2/2/24 03:44, Greg Kroah-Hartman wrote: > The use of devm_*() functions works properly for when the device > structure itself is dynamic, but the hsmp driver is attempting to have a > local, static, struct device and then calls devm_() functions attaching > memory to the device that will never be freed. As I mentioned in my reply to v1, this is not correct. There is a global data struct, but that holds a struct device pointer, not the device struct. The device itself is created with platform_device_alloc() + platform_device_add() from module-init and it is removed on module-exit by calling platform_device_unregister() So AFAICT this should keep using the devm_ variant to properly cleanup the sysfs attributes. But what this really needs is to be converted to using amd_hsmp_driver.driver.dev_groups rather then manually calling devm_device_add_groups() I have already asked Suma Hegde (AMD) to take a look at this. Regards, Hans > > The logic of having a static struct device is almost never a wise > choice, but for now, just remove the use of devm_device_add_groups() in > this driver as it obviously is not needed. > > Cc: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com> > Cc: Carlos Bilbao <carlos.bilbao@amd.com> > Cc: Hans de Goede <hdegoede@redhat.com> > Cc: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com> > Cc: platform-driver-x86@vger.kernel.org > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > --- > v2: rebased against platform/for-next > > drivers/platform/x86/amd/hsmp.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/platform/x86/amd/hsmp.c b/drivers/platform/x86/amd/hsmp.c > index 1927be901108..d84ea66eecc6 100644 > --- a/drivers/platform/x86/amd/hsmp.c > +++ b/drivers/platform/x86/amd/hsmp.c > @@ -693,7 +693,7 @@ static int hsmp_create_non_acpi_sysfs_if(struct device *dev) > hsmp_create_attr_list(attr_grp, dev, i); > } > > - return devm_device_add_groups(dev, hsmp_attr_grps); > + return device_add_groups(dev, hsmp_attr_grps); > } > > static int hsmp_create_acpi_sysfs_if(struct device *dev)
On Fri, Feb 02, 2024 at 08:49:39AM +0100, Hans de Goede wrote: > Hi Greg, > > On 2/2/24 03:44, Greg Kroah-Hartman wrote: > > The use of devm_*() functions works properly for when the device > > structure itself is dynamic, but the hsmp driver is attempting to have a > > local, static, struct device and then calls devm_() functions attaching > > memory to the device that will never be freed. > > As I mentioned in my reply to v1, this is not correct. > > There is a global data struct, but that holds a struct device > pointer, not the device struct. Ooops, I misread that: static struct hsmp_plat_device plat_dev; was not the actual device struct anymore. > The device itself is created with platform_device_alloc() + > platform_device_add() from module-init and it is removed > on module-exit by calling platform_device_unregister() Ok, much better. > So AFAICT this should keep using the devm_ variant to properly > cleanup the sysfs attributes. This devm_ variant is odd, and should never have been created as the sysfs core always cleans up the sysfs attributes when a device is removed, there is no need for it (i.e. they do the same thing.) That's why I want to get rid of it, it's pointless :) > But what this really needs is to be converted to using > amd_hsmp_driver.driver.dev_groups rather then manually > calling devm_device_add_groups() I have already asked > Suma Hegde (AMD) to take a look at this. The initial issue I saw with this is that these attributes are being created dynamically, so using dev_groups can be a bit harder. The code paths here are twisty and not obvious as it seems to want to support devices of multiple types in the same codebase at the same time. But yes, using dev_groups is ideal, and if that happens, I'm happy. It's just that there are now only 2 in-kernel users of devm_device_add_groups() and I have a patch series to get rid of the other one, and so this would be the last, hence my attention to this. Again, moving from devm_device_add_groups() to device_add_groups() is a no-op from a functional standpoint, so this should be fine. thanks, greg k-h
On Fri, 2 Feb 2024, Greg Kroah-Hartman wrote: > On Fri, Feb 02, 2024 at 08:49:39AM +0100, Hans de Goede wrote: > > Hi Greg, > > > > On 2/2/24 03:44, Greg Kroah-Hartman wrote: > > > The use of devm_*() functions works properly for when the device > > > structure itself is dynamic, but the hsmp driver is attempting to have a > > > local, static, struct device and then calls devm_() functions attaching > > > memory to the device that will never be freed. > > > > As I mentioned in my reply to v1, this is not correct. > > > > There is a global data struct, but that holds a struct device > > pointer, not the device struct. > > Ooops, I misread that: > static struct hsmp_plat_device plat_dev; > was not the actual device struct anymore. > > > The device itself is created with platform_device_alloc() + > > platform_device_add() from module-init and it is removed > > on module-exit by calling platform_device_unregister() > > Ok, much better. > > > So AFAICT this should keep using the devm_ variant to properly > > cleanup the sysfs attributes. > > This devm_ variant is odd, and should never have been created as the > sysfs core always cleans up the sysfs attributes when a device is > removed, there is no need for it (i.e. they do the same thing.) > > That's why I want to get rid of it, it's pointless :) > > > But what this really needs is to be converted to using > > amd_hsmp_driver.driver.dev_groups rather then manually > > calling devm_device_add_groups() I have already asked > > Suma Hegde (AMD) to take a look at this. > > The initial issue I saw with this is that these attributes are being > created dynamically, so using dev_groups can be a bit harder. The code > paths here are twisty and not obvious as it seems to want to support > devices of multiple types in the same codebase at the same time. It wants to provide metrics for each socket. The ACPI part was a recent addition (as you've now probably discovered) and works slighty differently because the discovered structure is different but it's not really that different otherwise.
Hi, On 2/2/24 16:32, Greg Kroah-Hartman wrote: > On Fri, Feb 02, 2024 at 08:49:39AM +0100, Hans de Goede wrote: >> Hi Greg, >> >> On 2/2/24 03:44, Greg Kroah-Hartman wrote: >>> The use of devm_*() functions works properly for when the device >>> structure itself is dynamic, but the hsmp driver is attempting to have a >>> local, static, struct device and then calls devm_() functions attaching >>> memory to the device that will never be freed. >> >> As I mentioned in my reply to v1, this is not correct. >> >> There is a global data struct, but that holds a struct device >> pointer, not the device struct. > > Ooops, I misread that: > static struct hsmp_plat_device plat_dev; > was not the actual device struct anymore. > >> The device itself is created with platform_device_alloc() + >> platform_device_add() from module-init and it is removed >> on module-exit by calling platform_device_unregister() > > Ok, much better. > >> So AFAICT this should keep using the devm_ variant to properly >> cleanup the sysfs attributes. > > This devm_ variant is odd, and should never have been created as the > sysfs core always cleans up the sysfs attributes when a device is > removed, there is no need for it (i.e. they do the same thing.) > > That's why I want to get rid of it, it's pointless :) > >> But what this really needs is to be converted to using >> amd_hsmp_driver.driver.dev_groups rather then manually >> calling devm_device_add_groups() I have already asked >> Suma Hegde (AMD) to take a look at this. > > The initial issue I saw with this is that these attributes are being > created dynamically, so using dev_groups can be a bit harder. The code > paths here are twisty and not obvious as it seems to want to support > devices of multiple types in the same codebase at the same time. > > But yes, using dev_groups is ideal, and if that happens, I'm happy. > It's just that there are now only 2 in-kernel users of > devm_device_add_groups() and I have a patch series to get rid of the > other one, and so this would be the last, hence my attention to this. > > Again, moving from devm_device_add_groups() to device_add_groups() is a > no-op from a functional standpoint, so this should be fine. Ok, I was not aware that the core automatically cleans up all the attributes anyways. In that case this fine with me and I agree with merging this so that you can entirely remove the devm_ variant: Reviewed-by: Hans de Goede <hdegoede@redhat.com> Regards, Hans
On Fri, 2 Feb 2024, Hans de Goede wrote: > On 2/2/24 16:32, Greg Kroah-Hartman wrote: > > On Fri, Feb 02, 2024 at 08:49:39AM +0100, Hans de Goede wrote: > >> Hi Greg, > >> > >> On 2/2/24 03:44, Greg Kroah-Hartman wrote: > >>> The use of devm_*() functions works properly for when the device > >>> structure itself is dynamic, but the hsmp driver is attempting to have a > >>> local, static, struct device and then calls devm_() functions attaching > >>> memory to the device that will never be freed. > >> > >> As I mentioned in my reply to v1, this is not correct. > >> > >> There is a global data struct, but that holds a struct device > >> pointer, not the device struct. > > > > Ooops, I misread that: > > static struct hsmp_plat_device plat_dev; > > was not the actual device struct anymore. > > > >> The device itself is created with platform_device_alloc() + > >> platform_device_add() from module-init and it is removed > >> on module-exit by calling platform_device_unregister() > > > > Ok, much better. > > > >> So AFAICT this should keep using the devm_ variant to properly > >> cleanup the sysfs attributes. > > > > This devm_ variant is odd, and should never have been created as the > > sysfs core always cleans up the sysfs attributes when a device is > > removed, there is no need for it (i.e. they do the same thing.) > > > > That's why I want to get rid of it, it's pointless :) > > > >> But what this really needs is to be converted to using > >> amd_hsmp_driver.driver.dev_groups rather then manually > >> calling devm_device_add_groups() I have already asked > >> Suma Hegde (AMD) to take a look at this. > > > > The initial issue I saw with this is that these attributes are being > > created dynamically, so using dev_groups can be a bit harder. The code > > paths here are twisty and not obvious as it seems to want to support > > devices of multiple types in the same codebase at the same time. > > > > But yes, using dev_groups is ideal, and if that happens, I'm happy. > > It's just that there are now only 2 in-kernel users of > > devm_device_add_groups() and I have a patch series to get rid of the > > other one, and so this would be the last, hence my attention to this. > > > > Again, moving from devm_device_add_groups() to device_add_groups() is a > > no-op from a functional standpoint, so this should be fine. > > Ok, I was not aware that the core automatically cleans up > all the attributes anyways. > > In that case this fine with me and I agree with merging this > so that you can entirely remove the devm_ variant: > > Reviewed-by: Hans de Goede <hdegoede@redhat.com> Greg, Does this same stuff apply to devm_device_add_group() which was added along the ACPI changes? And the changelog is quite misleading as is, it should be changed to match the real motivation.
On Mon, Feb 05, 2024 at 12:27:24PM +0200, Ilpo Järvinen wrote: > On Fri, 2 Feb 2024, Hans de Goede wrote: > > On 2/2/24 16:32, Greg Kroah-Hartman wrote: > > > On Fri, Feb 02, 2024 at 08:49:39AM +0100, Hans de Goede wrote: > > >> Hi Greg, > > >> > > >> On 2/2/24 03:44, Greg Kroah-Hartman wrote: > > >>> The use of devm_*() functions works properly for when the device > > >>> structure itself is dynamic, but the hsmp driver is attempting to have a > > >>> local, static, struct device and then calls devm_() functions attaching > > >>> memory to the device that will never be freed. > > >> > > >> As I mentioned in my reply to v1, this is not correct. > > >> > > >> There is a global data struct, but that holds a struct device > > >> pointer, not the device struct. > > > > > > Ooops, I misread that: > > > static struct hsmp_plat_device plat_dev; > > > was not the actual device struct anymore. > > > > > >> The device itself is created with platform_device_alloc() + > > >> platform_device_add() from module-init and it is removed > > >> on module-exit by calling platform_device_unregister() > > > > > > Ok, much better. > > > > > >> So AFAICT this should keep using the devm_ variant to properly > > >> cleanup the sysfs attributes. > > > > > > This devm_ variant is odd, and should never have been created as the > > > sysfs core always cleans up the sysfs attributes when a device is > > > removed, there is no need for it (i.e. they do the same thing.) > > > > > > That's why I want to get rid of it, it's pointless :) > > > > > >> But what this really needs is to be converted to using > > >> amd_hsmp_driver.driver.dev_groups rather then manually > > >> calling devm_device_add_groups() I have already asked > > >> Suma Hegde (AMD) to take a look at this. > > > > > > The initial issue I saw with this is that these attributes are being > > > created dynamically, so using dev_groups can be a bit harder. The code > > > paths here are twisty and not obvious as it seems to want to support > > > devices of multiple types in the same codebase at the same time. > > > > > > But yes, using dev_groups is ideal, and if that happens, I'm happy. > > > It's just that there are now only 2 in-kernel users of > > > devm_device_add_groups() and I have a patch series to get rid of the > > > other one, and so this would be the last, hence my attention to this. > > > > > > Again, moving from devm_device_add_groups() to device_add_groups() is a > > > no-op from a functional standpoint, so this should be fine. > > > > Ok, I was not aware that the core automatically cleans up > > all the attributes anyways. > > > > In that case this fine with me and I agree with merging this > > so that you can entirely remove the devm_ variant: > > > > Reviewed-by: Hans de Goede <hdegoede@redhat.com> > > Greg, > > Does this same stuff apply to devm_device_add_group() which was added > along the ACPI changes? Probably, I haven't looked at that yet. > And the changelog is quite misleading as is, it should be changed to > match the real motivation. "Motivation" isn't always needed in a changelog text, I was trying to describe why this specific instance was not needed, not the overall pointlessness of the function :) I got the text wrong about this being a static variable (but one is still in there, so it's confusing.) I'll be glad to reword this if needed to just say "This function is pointless, does nothing, and is about to be removed from the kernel so stop using it", or something along those lines... thanks, greg k-h
On Mon, 5 Feb 2024, Greg Kroah-Hartman wrote: > On Mon, Feb 05, 2024 at 12:27:24PM +0200, Ilpo Järvinen wrote: > > On Fri, 2 Feb 2024, Hans de Goede wrote: > > > On 2/2/24 16:32, Greg Kroah-Hartman wrote: > > > > On Fri, Feb 02, 2024 at 08:49:39AM +0100, Hans de Goede wrote: > > > >> Hi Greg, > > > >> > > > >> On 2/2/24 03:44, Greg Kroah-Hartman wrote: > > > >>> The use of devm_*() functions works properly for when the device > > > >>> structure itself is dynamic, but the hsmp driver is attempting to have a > > > >>> local, static, struct device and then calls devm_() functions attaching > > > >>> memory to the device that will never be freed. > > > >> > > > >> As I mentioned in my reply to v1, this is not correct. > > > >> > > > >> There is a global data struct, but that holds a struct device > > > >> pointer, not the device struct. > > > > > > > > Ooops, I misread that: > > > > static struct hsmp_plat_device plat_dev; > > > > was not the actual device struct anymore. > > > > > > > >> The device itself is created with platform_device_alloc() + > > > >> platform_device_add() from module-init and it is removed > > > >> on module-exit by calling platform_device_unregister() > > > > > > > > Ok, much better. > > > > > > > >> So AFAICT this should keep using the devm_ variant to properly > > > >> cleanup the sysfs attributes. > > > > > > > > This devm_ variant is odd, and should never have been created as the > > > > sysfs core always cleans up the sysfs attributes when a device is > > > > removed, there is no need for it (i.e. they do the same thing.) > > > > > > > > That's why I want to get rid of it, it's pointless :) > > > > > > > >> But what this really needs is to be converted to using > > > >> amd_hsmp_driver.driver.dev_groups rather then manually > > > >> calling devm_device_add_groups() I have already asked > > > >> Suma Hegde (AMD) to take a look at this. > > > > > > > > The initial issue I saw with this is that these attributes are being > > > > created dynamically, so using dev_groups can be a bit harder. The code > > > > paths here are twisty and not obvious as it seems to want to support > > > > devices of multiple types in the same codebase at the same time. > > > > > > > > But yes, using dev_groups is ideal, and if that happens, I'm happy. > > > > It's just that there are now only 2 in-kernel users of > > > > devm_device_add_groups() and I have a patch series to get rid of the > > > > other one, and so this would be the last, hence my attention to this. > > > > > > > > Again, moving from devm_device_add_groups() to device_add_groups() is a > > > > no-op from a functional standpoint, so this should be fine. > > > > > > Ok, I was not aware that the core automatically cleans up > > > all the attributes anyways. > > > > > > In that case this fine with me and I agree with merging this > > > so that you can entirely remove the devm_ variant: > > > > > > Reviewed-by: Hans de Goede <hdegoede@redhat.com> > > > > Greg, > > > > Does this same stuff apply to devm_device_add_group() which was added > > along the ACPI changes? > > Probably, I haven't looked at that yet. > > > And the changelog is quite misleading as is, it should be changed to > > match the real motivation. > > "Motivation" isn't always needed in a changelog text, I was trying to > describe why this specific instance was not needed, not the overall > pointlessness of the function :) > > I got the text wrong about this being a static variable (but one is > still in there, so it's confusing.) Yes, I mainly meant the not-dynamic part is no longer true so I don't want to apply it as is and you likely want to extend the patch to include the newly introduced devm_device_add_group() call conversion. > I'll be glad to reword this if needed to just say "This function is > pointless, does nothing, and is about to be removed from the kernel so > stop using it", or something along those lines... Given that it wasn't obvious to either me nor Hans, it would have been useful to mention it. The current wording had a different undertone so after the driver got changed it looked as if the patch become obsolete. ...But that turned out was not the case because of motivation outside of the one given in the commit message, so yes, if we look this from a reviewer perspective, it would be useful information to tell the function is pointless and does nothing useful on top of the other function.
diff --git a/drivers/platform/x86/amd/hsmp.c b/drivers/platform/x86/amd/hsmp.c index 1927be901108..d84ea66eecc6 100644 --- a/drivers/platform/x86/amd/hsmp.c +++ b/drivers/platform/x86/amd/hsmp.c @@ -693,7 +693,7 @@ static int hsmp_create_non_acpi_sysfs_if(struct device *dev) hsmp_create_attr_list(attr_grp, dev, i); } - return devm_device_add_groups(dev, hsmp_attr_grps); + return device_add_groups(dev, hsmp_attr_grps); } static int hsmp_create_acpi_sysfs_if(struct device *dev)