Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753959AbbK0Hc5 (ORCPT ); Fri, 27 Nov 2015 02:32:57 -0500 Received: from dgate10.ts.fujitsu.com ([80.70.172.49]:48011 "EHLO dgate10.ts.fujitsu.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753855AbbK0Hcz (ORCPT ); Fri, 27 Nov 2015 02:32:55 -0500 DomainKey-Signature: s=s1536a; d=ts.fujitsu.com; c=nofws; q=dns; h=X-SBRSScore:Received:Received:From:To:CC:Date:Subject: Thread-Topic:Thread-Index:Message-ID:References: In-Reply-To:Accept-Language:Content-Language: X-MS-Has-Attach:X-MS-TNEF-Correlator:acceptlanguage: Content-Type:Content-Transfer-Encoding:MIME-Version; b=H7sP40B7DIN/K/LUKTWVXU21mL97xnkyKXVHlVlIIdBGUgQU4eBkv1gu F2g+Oa7BORuKV+swvXVq2tHnRGW2VoYsie4Kytq7gJ4woUhb5aCPnRZ1D NPn0gLflmSHM1C3hUqvbaH17gnL75dfP8mewHfpGqTt7Fvk4A3pzk/WwI fwckJZ3P001IkYojZYSpoQe2g2TykjhydiR6OF2oHXyB5VOzBUxorUWHc OvZhcfK4dOoN0zqWK2vLch6dqO6LM; X-SBRSScore: None From: "Wilck, Martin" To: Jason Gunthorpe CC: "gregkh@linuxfoundation.org" , "linux-kernel@vger.kernel.org" , "tpmdd-devel@lists.sourceforge.net" , "u.kleine-koenig@pengutronix.de" Date: Fri, 27 Nov 2015 08:32:52 +0100 Subject: Re: [tpmdd-devel] [PATCH] base/platform: fix panic when probe function is NULL Thread-Topic: [tpmdd-devel] [PATCH] base/platform: fix panic when probe function is NULL Thread-Index: AdEo5dLy+w0pgAsyQmiA2GY0nFRt/g== Message-ID: References: <1448564494-23218-1-git-send-email-martin.wilck@ts.fujitsu.com> <20151126203031.GA1139@obsidianresearch.com> In-Reply-To: <20151126203031.GA1139@obsidianresearch.com> Accept-Language: de-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: acceptlanguage: de-DE, en-US Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id tAR7X2MP006945 Content-Length: 2253 Lines: 46 On Do, 2015-11-26 at 13:30 -0700, Jason Gunthorpe wrote: > On Thu, Nov 26, 2015 at 08:01:34PM +0100, martin.wilck@ts.fujitsu.com wrote: > > From: Martin Wilck > > > > Since b8b2c7d845d5, platform_drv_probe() is called for all platform > > devices. If drv->probe is NULL, and dev_pm_domain_attach() fails, > > platform_drv_probe() will return the error code from dev_pm_domain_attach(). > > > > This causes real_probe() to enter the "probe_failed" path and set > > dev->driver to NULL. Before b8b2c7d845d5, real_probe() would assume > > success if both dev->bus->probe and drv->probe are missing. > > > > This may cause a panic later. For example, inserting the tpm_tis > > driver with parameter "force=1" (i.e. registering tpm_tis as a platform > > driver) will panic in tpmm_chip_alloc() because dev->driver is NULL: > > > > chip->cdev.owner = chip->pdev->driver->owner; > > Is this happening because tpm_tis is not creating the platform device > properly? ie it just calls platform_device_register_simple and then > force initializes it via tpm_tis_init, which expects to be called from > a probe function with an attached driver. > > Instead we should setup a proper platform device with the default > IO range for x86 and let the driver core call tpm_tis_init via > tis_drv.probe. > > Would changing things in this way fix the problem you've observed? I think so. Nonetheless, patch b8b2c7d845d5 introduced a change in the way platform device registration behaves. The platform device code seems to be prepared for cases where platform_driver->probe == NULL, so that case should be handled gracefully. Otherwise, failure should occur earlier, e.g. when platform_driver_register() is called with platform_driver->probe == NULL. tpm_tis may not be the only driver that uses platform_device_register_simple() in this way. > I have some patches to do this that are part of my OF enablement > series, but I can make something simpler that would deal with this > fairly quickly if you can test. Let's first wait what the platform guys say. Martin ????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?