From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH 1/6] driver-core: platform: Provide helpers for multi-driver modules Date: Mon, 28 Sep 2015 09:37:37 +0300 Message-ID: <877fnbm4lq.fsf@intel.com> References: <1443114161-7965-1-git-send-email-thierry.reding@gmail.com> <87wpven69b.fsf@intel.com> <20150925151543.GC22463@ulmo> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id BFE206E5AF for ; Sun, 27 Sep 2015 23:34:18 -0700 (PDT) In-Reply-To: <20150925151543.GC22463@ulmo> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Thierry Reding Cc: Greg Kroah-Hartman , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCAyNSBTZXAgMjAxNSwgVGhpZXJyeSBSZWRpbmcgPHRoaWVycnkucmVkaW5nQGdtYWls LmNvbT4gd3JvdGU6Cj4gT24gRnJpLCBTZXAgMjUsIDIwMTUgYXQgMDE6Mjc6MjhQTSArMDMwMCwg SmFuaSBOaWt1bGEgd3JvdGU6Cj4+IE9uIFRodSwgMjQgU2VwIDIwMTUsIFRoaWVycnkgUmVkaW5n IDx0aGllcnJ5LnJlZGluZ0BnbWFpbC5jb20+IHdyb3RlOgo+IFsuLi5dCj4+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKPiBb Li4uXQo+PiA+ICsvKioKPj4gPiArICogcGxhdGZvcm1fcmVnaXN0ZXJfZHJpdmVycyAtIHJlZ2lz dGVyIGFuIGFycmF5IG9mIHBsYXRmb3JtIGRyaXZlcnMKPj4gPiArICogQGRyaXZlcnM6IGFuIGFy cmF5IG9mIGRyaXZlcnMgdG8gcmVnaXN0ZXIKPj4gPiArICogQGNvdW50OiB0aGUgbnVtYmVyIG9m IGRyaXZlcnMgdG8gcmVnaXN0ZXIKPj4gPiArICoKPj4gPiArICogUmVnaXN0ZXJzIHBsYXRmb3Jt IGRyaXZlcnMgc3BlY2lmaWVkIGJ5IGFuIGFycmF5LiBPbiBmYWlsdXJlIHRvIHJlZ2lzdGVyIGEK Pj4gPiArICogZHJpdmVyLCBhbGwgcHJldmlvdXNseSByZWdpc3RlcmVkIGRyaXZlcnMgd2lsbCBi ZSB1bnJlZ2lzdGVyZWQuIENhbGxlcnMgb2YKPj4gPiArICogdGhpcyBBUEkgc2hvdWxkIHVzZSBw bGF0Zm9ybV91bnJlZ2lzdGVyX2RyaXZlcnMoKSB0byB1bnJlZ2lzdGVyIGRyaXZlcnMgaW4KPj4g PiArICogdGhlIHJldmVyc2Ugb3JkZXIuCj4+ID4gKyAqCj4+ID4gKyAqIFJldHVybnM6IDAgb24g c3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPj4gPiArICovCj4+ ID4gK2ludCBwbGF0Zm9ybV9yZWdpc3Rlcl9kcml2ZXJzKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg KiBjb25zdCAqZHJpdmVycywKPj4gPiArCQkJICAgICAgdW5zaWduZWQgaW50IGNvdW50KQo+PiA+ ICt7Cj4+ID4gKwl1bnNpZ25lZCBpbnQgaTsKPj4gPiArCWludCBlcnI7Cj4+ID4gKwo+PiA+ICsJ Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKPj4gPiArCQlwcl9kZWJ1ZygicmVnaXN0ZXJp bmcgcGxhdGZvcm0gZHJpdmVyICVwc1xuIiwgZHJpdmVyc1tpXSk7Cj4+ID4gKwo+PiA+ICsJCWVy ciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcihkcml2ZXJzW2ldKTsKPj4gPiArCQlpZiAoZXJy IDwgMCkgewo+PiA+ICsJCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBwbGF0Zm9ybSBkcml2 ZXIgJXBzOiAlZFxuIiwKPj4gPiArCQkJICAgICAgIGRyaXZlcnNbaV0sIGVycik7Cj4+ID4gKwkJ CWdvdG8gZXJyb3I7Cj4+ID4gKwkJfQo+PiA+ICsJfQo+PiA+ICsKPj4gPiArCXJldHVybiAwOwo+ PiA+ICsKPj4gPiArZXJyb3I6Cj4+ID4gKwl3aGlsZSAoaS0tKSB7Cj4+ID4gKwkJcHJfZGVidWco InVucmVnaXN0ZXJpbmcgcGxhdGZvcm0gZHJpdmVyICVwc1xuIiwgZHJpdmVyc1tpXSk7Cj4+ID4g KwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoZHJpdmVyc1tpXSk7Cj4+ID4gKwl9Cj4+IAo+ PiBUaGlzIHdpbGwgY2FsbCBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigpIG9uIHRoZSBkcml2 ZXIgdGhhdCBmYWlsZWQsCj4+IGJ1dCBub3QgdGhlIGZpcnN0IGRyaXZlci4KPj4gCj4+IFlvdSBz aG91bGQgcHJvYmFibHkgbWFrZSBpIGFuIGludCwgYW5kIHVzZSB3aGlsZSAoLS1pID49IDApLgo+ Cj4gQWN0dWFsbHkgaXQgd29uJ3QuIEkgd2FzIGVzcGVjaWFsbHkgY2FyZWZ1bCBhbmQgZXZlbiB0 ZXN0ZWQgdGhpcyB3aXRoCj4gb25lIGRyaXZlciBieSBpbnN0cnVtZW50aW5nIHBsYXRmb3JtX2Ry aXZlcl9yZWdpc3RlcigpIHRvIHJldHVybiBmYWlsdXJlCj4gYXQgdmFyaW91cyBwb2ludHMgaW4g dGhlIHNlcXVlbmNlLgo+Cj4gVGhpcyB3b3JrcyBmaW5lLgoKWW91IGFyZSByaWdodCwgb2YgY291 cnNlLiBXaGF0IHdhcyBJIHRoaW5raW5nLiBNeSBraW5nZG9tIGZvciBhbiBleGN1c2UhCgpCUiwK SmFuaS4KCgoKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBD ZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752988AbbI1GeT (ORCPT ); Mon, 28 Sep 2015 02:34:19 -0400 Received: from mga14.intel.com ([192.55.52.115]:54735 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751010AbbI1GeS (ORCPT ); Mon, 28 Sep 2015 02:34:18 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,601,1437462000"; d="scan'208";a="814280969" From: Jani Nikula To: Thierry Reding Cc: dri-devel@lists.freedesktop.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/6] driver-core: platform: Provide helpers for multi-driver modules In-Reply-To: <20150925151543.GC22463@ulmo> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <1443114161-7965-1-git-send-email-thierry.reding@gmail.com> <87wpven69b.fsf@intel.com> <20150925151543.GC22463@ulmo> User-Agent: Notmuch/0.20.2+58~g39779b9 (http://notmuchmail.org) Emacs/24.4.1 (x86_64-pc-linux-gnu) Date: Mon, 28 Sep 2015 09:37:37 +0300 Message-ID: <877fnbm4lq.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 25 Sep 2015, Thierry Reding wrote: > On Fri, Sep 25, 2015 at 01:27:28PM +0300, Jani Nikula wrote: >> On Thu, 24 Sep 2015, Thierry Reding wrote: > [...] >> > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > [...] >> > +/** >> > + * platform_register_drivers - register an array of platform drivers >> > + * @drivers: an array of drivers to register >> > + * @count: the number of drivers to register >> > + * >> > + * Registers platform drivers specified by an array. On failure to register a >> > + * driver, all previously registered drivers will be unregistered. Callers of >> > + * this API should use platform_unregister_drivers() to unregister drivers in >> > + * the reverse order. >> > + * >> > + * Returns: 0 on success or a negative error code on failure. >> > + */ >> > +int platform_register_drivers(struct platform_driver * const *drivers, >> > + unsigned int count) >> > +{ >> > + unsigned int i; >> > + int err; >> > + >> > + for (i = 0; i < count; i++) { >> > + pr_debug("registering platform driver %ps\n", drivers[i]); >> > + >> > + err = platform_driver_register(drivers[i]); >> > + if (err < 0) { >> > + pr_err("failed to register platform driver %ps: %d\n", >> > + drivers[i], err); >> > + goto error; >> > + } >> > + } >> > + >> > + return 0; >> > + >> > +error: >> > + while (i--) { >> > + pr_debug("unregistering platform driver %ps\n", drivers[i]); >> > + platform_driver_unregister(drivers[i]); >> > + } >> >> This will call platform_driver_unregister() on the driver that failed, >> but not the first driver. >> >> You should probably make i an int, and use while (--i >= 0). > > Actually it won't. I was especially careful and even tested this with > one driver by instrumenting platform_driver_register() to return failure > at various points in the sequence. > > This works fine. You are right, of course. What was I thinking. My kingdom for an excuse! BR, Jani. -- Jani Nikula, Intel Open Source Technology Center