Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp633453pxk; Wed, 23 Sep 2020 11:51:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxEvcvT6iqoukjcKAV6PAe0LhcRr0XclFLoC/JCvHyO9TkMnfp96Qw+bNuUQ5u0QdmwPsbU X-Received: by 2002:a50:dec7:: with SMTP id d7mr763580edl.212.1600887073721; Wed, 23 Sep 2020 11:51:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600887073; cv=none; d=google.com; s=arc-20160816; b=NTW7MhKoJRHII4O7F6/YvjArPe45cbVoc/ObAY2RpAQBE9Dv0aLt+C7N2WvOy4UzS2 BAv+c7JBgowB7u9Zyb7irPqgXu/kuv6zsZpPKjbAlDgUJTynMOGBX5qmdzearPvBlSYl 6BcWZF5zTPmpRuKwktQmqYYON1NU2Oe/fV1Qv7nl8jMRc3rb6Bpap8UIkMmsN3stmeo8 TDlR6XByK0UQRq86XyDkgZUaA9cMRz4WBGk/z+MutcukiXn8q0bP7JXsRp4mZHrFb6iQ nhpymTBerCBtyiwcxG2WskiDLT5Yevz1jQI2bG/M7EeL5ZepLEi6ET6L/uJo3nIsA0ac 2n5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=clfNaB8UkkgArFU3FBCUDQHUwa8mxL5tla6J98XB+6k=; b=M275VRX2gFwY4rB/iDwH/PDho73z9b6oWCtmFwpD6YzNfO8D1avWHgOU2YfMh4sQvy H+2MBSmBlXf/W8BZgRJcv5eLmLpqHF3x1FZuGOdMUtD+0H6FQ3cLKdDW54g3GULV1/B5 eMbMGpJvwWesEaG4V7w/n1gN21i+fW7ORdwwgOwRIBO8GXsiMqjLcecpam2AZ9rIMofx WTjeMF1fBtV+AoXt4XEc0r6/6hYm15pPEQUobgtmPKWRRNl5vEBhoPLDHYsnRQ2oYC32 TAPNOpCtdPNiQjtPhrUQwIe0CRJp3hrnHcQl66+KJvwRuasXcrZ3ewf/Pxbmz+VLz4K8 oHpA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=m0VyAyBw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b4si481492edt.521.2020.09.23.11.50.50; Wed, 23 Sep 2020 11:51:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=m0VyAyBw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726699AbgIWSrw (ORCPT + 99 others); Wed, 23 Sep 2020 14:47:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:40844 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726422AbgIWSrv (ORCPT ); Wed, 23 Sep 2020 14:47:51 -0400 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 36E7C20637; Wed, 23 Sep 2020 18:47:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1600886870; bh=lITuSNDF8g6ohhE2JO6SxXuIW45a/6sOfc0+p3we/Z0=; h=From:To:Cc:Subject:Date:From; b=m0VyAyBwqMaGh00o9GFG69Lur1gU7A7ZaVQvrVeKa3mAJgCwhOB6x2OvByUm5IVu4 ioMv2LRn6+NRMz+4WpqRAEAAg+uhiPhlBjs9gKjEQMnUerWBSvVQp0svk6subYgGwE ixZ/+t1ongVuuzNsJDpJUaeTlDtcel0GEm9PFvMI= From: Greg Kroah-Hartman To: rajneesh.bhardwaj@intel.com, vishwanath.somayaji@intel.com Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Darren Hart , Andy Shevchenko , Rajat Jain , Maximilian Luz Subject: [PATCH] platform/x86: intel_pmc_core: do not create a static struct device Date: Wed, 23 Sep 2020 20:48:03 +0200 Message-Id: <20200923184803.192265-1-gregkh@linuxfoundation.org> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A struct device is a dynamic structure, with reference counting. "Tricking" the kernel to make a dynamic structure static, by working around the driver core release detection logic, is not nice. Because of this, this code has been used as an example for others on "how to do things", which is just about the worst thing possible to have happen. Fix this all up by making the platform device dynamic and providing a real release function. Cc: Rajneesh Bhardwaj Cc: Vishwanath Somayaji Cc: Darren Hart Cc: Andy Shevchenko Cc: Rajat Jain Cc: platform-driver-x86@vger.kernel.org Cc: linux-kernel@vger.kernel.org Reported-by: Maximilian Luz Fixes: b02f6a2ef0a1 ("platform/x86: intel_pmc_core: Attach using APCI HID "INT33A1"") Signed-off-by: Greg Kroah-Hartman --- drivers/platform/x86/intel_pmc_core_pltdrv.c | 26 +++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/platform/x86/intel_pmc_core_pltdrv.c b/drivers/platform/x86/intel_pmc_core_pltdrv.c index 731281855cc8..73797680b895 100644 --- a/drivers/platform/x86/intel_pmc_core_pltdrv.c +++ b/drivers/platform/x86/intel_pmc_core_pltdrv.c @@ -20,15 +20,10 @@ static void intel_pmc_core_release(struct device *dev) { - /* Nothing to do. */ + kfree(dev); } -static struct platform_device pmc_core_device = { - .name = "intel_pmc_core", - .dev = { - .release = intel_pmc_core_release, - }, -}; +static struct platform_device *pmc_core_device; /* * intel_pmc_core_platform_ids is the list of platforms where we want to @@ -52,6 +47,8 @@ MODULE_DEVICE_TABLE(x86cpu, intel_pmc_core_platform_ids); static int __init pmc_core_platform_init(void) { + int retval; + /* Skip creating the platform device if ACPI already has a device */ if (acpi_dev_present("INT33A1", NULL, -1)) return -ENODEV; @@ -59,12 +56,23 @@ static int __init pmc_core_platform_init(void) if (!x86_match_cpu(intel_pmc_core_platform_ids)) return -ENODEV; - return platform_device_register(&pmc_core_device); + pmc_core_device = kzalloc(sizeof(*pmc_core_device), GFP_KERNEL); + if (!pmc_core_device) + return -ENOMEM; + + pmc_core_device->name = "intel_pmc_core"; + pmc_core_device->dev.release = intel_pmc_core_release; + + retval = platform_device_register(pmc_core_device); + if (retval) + kfree(pmc_core_device); + + return retval; } static void __exit pmc_core_platform_exit(void) { - platform_device_unregister(&pmc_core_device); + platform_device_unregister(pmc_core_device); } module_init(pmc_core_platform_init); -- 2.28.0