[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1153477839.9489.25.camel@hemera>
Date: Fri, 21 Jul 2006 12:30:39 +0200
From: Panagiotis Issaris <takis@....org>
To: Rolf Eike Beer <eike-kernel@...tec.de>
Cc: Panagiotis Issaris <takis@...umba.uhasselt.be>,
linux-kernel@...r.kernel.org, len.brown@...el.com,
chas@....nrl.navy.mil, miquel@...uba.ar, kkeil@...e.de,
benh@...nel.crashing.org, video4linux-list@...hat.com,
rmk+mmc@....linux.org.uk, Neela.Kolli@...enio.com,
jgarzik@...ox.com, vandrove@...cvut.cz, adaplas@....net,
thomas@...ischhofer.net, weissg@...nna.at, philb@....org,
linux-pcmcia@...ts.infradead.org, jkmaline@...hut.fi,
paulus@...ba.org
Subject: Re: [PATCH] drivers: Conversions from kmalloc+memset to
k(z|c)alloc.
Hi,
On vr, 2006-07-21 at 08:50 +0200, Rolf Eike Beer wrote:
>[...]
> Space after comma.
>[...]
> sizeof(*ltp)?
>
> [more of this snipped]
>
> > @@ -443,12 +442,11 @@ int con_clear_unimap(struct vc_data *vc,
> > p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
> > if (p && p->readonly) return -EIO;
> > if (!p || --p->refcount) {
> > - q = (struct uni_pagedir *)kmalloc(sizeof(*p), GFP_KERNEL);
> > + q = kzalloc(sizeof(*p), GFP_KERNEL);
> > if (!q) {
> > if (p) p->refcount++;
> > return -ENOMEM;
> > }
> > - memset(q, 0, sizeof(*q));
> > q->refcount=1;
> > *vc->vc_uni_pagedir_loc = (unsigned long)q;
> > } else {
>
> This one still changes the way the code works. Before your patch *p will be
> always zeroed out. Now if p is there before it will keep it's contents.
Hmm. I do not really see the functional change here: If the memory
allocation failed, then in both cases, q will be zero and the function
will return. If the memory allocation succeeds, then in both cases a
memset will occur. Is it more subtle than that?
Before change:
if (!p || --p->refcount) {
q = kmalloc(sizeof(*p), GFP_KERNEL);
if (!q) {
if (p)
p->refcount++;
return -ENOMEM;
}
memset(q, 0, sizeof(*q));
q->refcount=1;
*vc->vc_uni_pagedir_loc = (unsigned long)q;
}
After change:
if (!p || --p->refcount) {
q = kzalloc(sizeof(*p), GFP_KERNEL);
if (!q) {
if (p)
p->refcount++;
return -ENOMEM;
}
q->refcount=1;
*vc->vc_uni_pagedir_loc = (unsigned long)q;
}
If !p then in both cases, q will be assigned some memory,
and if that succeeds, the block of memory will be cleared,
if it fails, it will not be cleared and the function will
exit.
If p then if --p->refcount<>0, a new block will be allocated
and if the allocation succeeds, it will be cleared in both cases.
If --p->refcount==0, nothing will be allocated nor cleared, in both
cases.
With friendly regards,
Takis
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists