From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932547AbcGHRF5 (ORCPT ); Fri, 8 Jul 2016 13:05:57 -0400 Received: from mail-wm0-f46.google.com ([74.125.82.46]:38706 "EHLO mail-wm0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755226AbcGHRFs (ORCPT ); Fri, 8 Jul 2016 13:05:48 -0400 Message-ID: <1467997545.17253.143.camel@nexus-software.ie> Subject: Re: [RESEND RFC PATCH 1/5] platform: x86: add driver for UP Board I/O CPLD From: "Bryan O'Donoghue" To: "Dan O'Donovan" , platform-driver-x86@vger.kernel.org, dvhart@infradead.org Cc: lee.jones@linaro.org, andriy.shevchenko@linux.intel.com, mika.westerberg@linux.intel.com, linux-kernel@vger.kernel.org Date: Fri, 08 Jul 2016 18:05:45 +0100 In-Reply-To: <1467648434-29080-2-git-send-email-dan@emutex.com> References: <1465762392-9205-1-git-send-email-dan@emutex.com> <1467648434-29080-1-git-send-email-dan@emutex.com> <1467648434-29080-2-git-send-email-dan@emutex.com> Organization: Nexus Software Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.18.5.2-0ubuntu1 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2016-07-04 at 17:07 +0100, Dan O'Donovan wrote: > + cpld->pinctrl_pdev = > + platform_device_register_data(dev, "up-board- > pinctrl", > +       PLATFORM_DEVID_NONE, > +       &up_board_pinctrl_pdat > a, > +       sizeof(up_board_pinctr > l_pdata)); > + if (IS_ERR(cpld->pinctrl_pdev)) { > + ret = PTR_ERR(cpld->pinctrl_pdev); > + goto fail_register_pinctrl_pdev; > + } > + > + cpld->gpio_pdev = > + platform_device_register_data(dev, "up-board-gpio", > +       PLATFORM_DEVID_NONE, > +       &up_board_gpio_pdata, > +       sizeof(up_board_gpio_p > data)); > + if (IS_ERR(cpld->gpio_pdev)) { > + ret = PTR_ERR(cpld->gpio_pdev); > + goto fail_register_gpio_pdev; > + } > + > + cpld->leds_pdev = > + platform_device_register_data(dev, "up-board-leds", > +       PLATFORM_DEVID_NONE, > +       &up_board_leds_pdata, > +       sizeof(up_board_leds_p > data)); > + if (IS_ERR(cpld->leds_pdev)) { > + ret = PTR_ERR(cpld->leds_pdev); > + goto fail_register_leds_pdev; > + } > + > + return 0; > + > +fail_register_leds_pdev: > + platform_device_unregister(cpld->gpio_pdev); > +fail_register_gpio_pdev: > + platform_device_unregister(cpld->pinctrl_pdev); > +fail_register_pinctrl_pdev: Because the subordinate drivers don't have remove routines if any of these error paths are triggered you'll leak resources. Recommend adding cleanup exit routines to the subordinate drivers which should then be triggered on the failure jumps here. --- bod