All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Chen, Gong" <gong.chen@linux.intel.com>
To: Levente Kurusa <levex@linux.com>
Cc: Borislav Petkov <bp@alien8.de>, Ingo Molnar <mingo@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Tony Luck <tony.luck@intel.com>, "H. Peter Anvin" <hpa@zytor.com>,
	x86@kernel.org, EDAC <linux-edac@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] x86: mcheck: call put_device on device_register failure
Date: Wed, 4 Dec 2013 21:57:41 -0500	[thread overview]
Message-ID: <20131205025741.GA26999@gchen.bj.intel.com> (raw)
In-Reply-To: <529F76CB.8080601@linux.com>

[-- Attachment #1: Type: text/plain, Size: 3568 bytes --]

On Wed, Dec 04, 2013 at 07:39:07PM +0100, Levente Kurusa wrote:
> Date:	Wed, 04 Dec 2013 19:39:07 +0100
> From: Levente Kurusa <levex@linux.com>
> To: Borislav Petkov <bp@alien8.de>, Ingo Molnar <mingo@kernel.org>, Thomas
>  Gleixner <tglx@linutronix.de>, Tony Luck <tony.luck@intel.com>, "H. Peter
>  Anvin" <hpa@zytor.com>, x86@kernel.org, EDAC <linux-edac@vger.kernel.org>,
>  LKML <linux-kernel@vger.kernel.org>
> Subject: Re: [PATCH] x86: mcheck: call put_device on device_register failure
> User-Agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101
>  Thunderbird/24.1.0
> 
> 2013-12-04 08:38, Chen, Gong:
> > On Tue, Dec 03, 2013 at 06:01:50PM +0100, Borislav Petkov wrote:
> >> Date: Tue, 3 Dec 2013 18:01:50 +0100
> >> From: Borislav Petkov <bp@alien8.de>
> >> To: "Chen, Gong" <gong.chen@linux.intel.com>
> >> Cc: Levente Kurusa <levex@linux.com>, Ingo Molnar <mingo@kernel.org>,
> >>  Thomas Gleixner <tglx@linutronix.de>, Tony Luck <tony.luck@intel.com>, "H.
> >>  Peter Anvin" <hpa@zytor.com>, x86@kernel.org, EDAC
> >>  <linux-edac@vger.kernel.org>, LKML <linux-kernel@vger.kernel.org>
> >> Subject: Re: [PATCH] x86: mcheck: call put_device on device_register failure
> >> User-Agent: Mutt/1.5.21 (2010-09-15)
> >>
> >> Can you please fix your
> >>
> >> Mail-Followup-To:
> >>
> >> header? It is impossible to reply to your emails without fiddling with
> >> the To: and Cc: by hand which gets very annoying over time.
> > 
> > I add some configs in my muttrc. Hope it works.
> > 
> >>
> >> On Mon, Dec 02, 2013 at 09:23:30PM -0500, Chen, Gong wrote:
> >>> I have some concerns about it. if device_register is failed, it will
> >>> backtraces all kinds of conditions automatically, including put_device
> >>> definately. So do we really need an extra put_device when it returns
> >>> failure?
> >>
> >> Do you mean the "done:" label in device_add() which does put_device()
> >> and which gets called by device_register()?
> >>
> > 
> > Not only. I noticed that another put_device under label "Error:".
> > 
> 
> That label is called when we failed to add the kobject to its parent.
> It just puts the parent of the device. I don't think it has anything
> to do with us put_device()-ing the actual device too.
> 
OK, you are right. I read some kobject related codes and get:

static inline void kref_init(struct kref *kref)
{
        atomic_set(&kref->refcount, 1);
}

The init refcount is 1, which means even if we meet an error and put_device
in device_add, we still need an extra put_device to make refcount = 0
and then release the dev object.

BTW, from the comments of device_register:

"NOTE: _Never_ directly free @dev after calling this function, even
 if it returned an error! Always use put_device() to give up the
 reference initialized in this function instead. "

Many caller don't follow this logic. For example:
in arch/arm/common/locomo.c
locomo_init_one_child
...
        ret = device_register(&dev->dev);
        if (ret) {
out:
                kfree(dev);
        }
...
 
in arch/parisc/kernel/drivers.c
create_tree_node
...
        if (device_register(&dev->dev)) {
                kfree(dev);
                return NULL;
        }
...

etc.

Maybe we need one more patch to fix them all. :-)
> -- 
> Regards,
> Levente Kurusa
> --
> To unsubscribe from this list: send the line "unsubscribe linux-edac" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

  reply	other threads:[~2013-12-05  3:15 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-29 20:28 [PATCH] x86: mcheck: call put_device on device_register failure Levente Kurusa
2013-11-29 20:56 ` Borislav Petkov
2013-11-30  7:30   ` Levente Kurusa
2013-11-30 11:12     ` Borislav Petkov
2013-11-30 11:25       ` Levente Kurusa
2013-11-30 11:32         ` Borislav Petkov
2013-11-30 11:44           ` Levente Kurusa
2013-11-30 12:08             ` Borislav Petkov
2013-11-30 12:37               ` Levente Kurusa
2013-12-03  2:23       ` Chen, Gong
2013-12-03 17:01         ` Borislav Petkov
2013-12-04  7:38           ` Chen, Gong
2013-12-04 18:39             ` Levente Kurusa
2013-12-05  2:57               ` Chen, Gong [this message]
2013-12-05 11:18                 ` Levente Kurusa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131205025741.GA26999@gchen.bj.intel.com \
    --to=gong.chen@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=levex@linux.com \
    --cc=linux-edac@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.