public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Uwe Kleine-König" <Uwe.Kleine-Koenig@digi.com>
To: "Hans J. Koch" <hjk@linutronix.de>
Cc: Greg Kroah-Hartman <gregkh@suse.de>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/4] [RFC] UIO: generic platform driver
Date: Fri, 11 Apr 2008 08:21:06 +0200	[thread overview]
Message-ID: <20080411062106.GA18096@digi.com> (raw)
In-Reply-To: <20080410224804.GI3193@local>

Hello Hans,

Hans J. Koch wrote:
> > +/* XXX: I thought there already exists something like STRINGIFY, but I could not
> > + * find it ...
> > + */
> 
> Why do you want that macro? You only use it once. The macro definition and the
> comment above are more than you can ever expect to save with it.
See below.
BTW, I found it, it's in linux/stringify.h.  And there are several
possible users:

	ukleinek@zentaur:~/gsrc/linux-2.6$ git ls-files -z | xargs -0 perl -n -e 'print "$ARGV\n" if (/define\s+\w+\((\w+)\)\s*#\s*$1/)'
	arch/arm/vfp/vfpinstr.h
	arch/cris/arch-v10/boot/tools/build.c
	arch/m68k/lib/checksum.c
	arch/mips/kernel/unaligned.c
	arch/powerpc/boot/reg.h
	arch/um/drivers/mconsole_user.c
	arch/um/include/sysdep-i386/kernel-offsets.h
	arch/um/include/sysdep-x86_64/kernel-offsets.h
	arch/x86/kernel/machine_kexec_32.c
	drivers/atm/ambassador.c
	drivers/media/video/cpia2/cpia2_v4l.c
	drivers/mtd/maps/amd76xrom.c
	drivers/mtd/maps/ichxrom.c
	drivers/s390/cio/qdio.h
	drivers/scsi/aacraid/aacraid.h
	drivers/scsi/aacraid/linit.c
	drivers/scsi/arm/acornscsi.c
	drivers/scsi/g_NCR5380.h
	drivers/uio/uio_pdrv.c
	drivers/usb/serial/garmin_gps.c
	include/asm-cris/arch-v10/irq.h
	include/asm-cris/arch-v32/hwregs/supp_reg.h
	include/asm-cris/arch-v32/irq.h
	include/asm-m32r/assembler.h
	include/asm-m68k/entry.h
	include/asm-mips/mipsregs.h
	include/asm-mips/sim.h
	include/asm-sh/cpu-sh5/registers.h
	include/asm-v850/macrology.h
	include/linux/stringify.h
	include/sound/core.h
	sound/core/memalloc.c
	usr/gen_init_cpio.c

> > +static int uio_pdrv_open(struct uio_info *info, struct inode *inode)
> > +{
> > +	struct uio_platdata *pdata = info->priv;
> > +	int ret;
> > +
> > +	BUG_ON(pdata->uioinfo != info);
> 
> How can this BUG ever be triggered?
I hope it cannot, that's why it is a bug if it happens. :-)  And one
should expect that no BUG_ON should ever be triggered.  I usually use
BUG_ON for "declaring" preconditions.
 
> > +	for (i = 0; i < pdev->num_resources; ++i) {
> > +		struct resource *r = &pdev->resource[i];
> 
> Please don't define new variables in the middle of a function.
This is a matter of taste.  In my eyes it's better to declare it here
because then it's easier to see where it's used.
 
> > +
> > +		if (r->flags != IORESOURCE_MEM)
> > +			continue;
> > +
> > +		if (uiomem >= &uioinfo->mem[MAX_UIO_MAPS]) {
> 
> I'd prefer this:
> 		if (i >= MAX_UIO_MAPS) {
> 		...
OK.

BTW would you be open to redefine uio_info as:

	struct uio_info {
		struct uio_device       *uio_dev;
		...
		size_t			num_memmaps;
		struct uio_mem		mem[];
	}

This allows to allocate exactly the number of members in the mem array
that are needed (for the cost of a size_t).  (You just do:

	uio_info uioinfo = kzalloc(sizeof(*uioinfo) + num_memmaps * sizeof(uioinfo->mem[0]), GFP_KERNEL);

it's still one chunk of memory and usage is similar---just with
MAX_UIO_MAPS substituted by uioinfo->num_memmaps.)
	
> > +			dev_warn(&pdev->dev, "device has more than "
> > +					STRINGIFY(MAX_UIO_MAPS)
> > +					" I/O memory resources.\n");
> 
> What about this:
> 
> 			dev_warn(&pdev->dev, "device has more than %d"
> 				" I/O memory resources.\n", MAX_UIO_MAPS);
> 
> would save the macro.
The macro is for free, using "%d" is not:

	ukleinek@zentaur:~/kbuild-ns921x$ size drivers/uio/uio_pdrv_with*
	   text    data     bss     dec     hex filename
	    808      72       0     880     370 drivers/uio/uio_pdrv_withoutstringify.o
	    800      72       0     872     368 drivers/uio/uio_pdrv_withstringify.o

You might consider that a bit over-engineered :-)

> > +	ret = uio_register_device(&pdev->dev, pdata->uioinfo);
> > +
> > +	if (ret) {
> > +		clk_put(pdata->clk);
> > +err_clk_get:
> > +
> > +		kfree(pdata);
> > +err_alloc_pdata:
> > +err_uioinfo:
> > +		return ret;
> > +	}
> 
> How I hate labels within blocks... OK, I admit, it looks good here...
> Well...
That's a matter of taste, too, I like it that way.  Probably it doesn't
matter for the compiler (I havn't tried), but this way it's one goto
less.  And if it doesn't matter for the compiler it's at least nice for
the reader.  Though obviously YMMV.

Best regards
Uwe

-- 
Uwe Kleine-König, Software Engineer
Digi International GmbH Branch Breisach, Küferstrasse 8, 79206 Breisach, Germany
Tax: 315/5781/0242 / VAT: DE153662976 / Reg. Amtsgericht Dortmund HRB 13962

  reply	other threads:[~2008-04-11  6:30 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-10 12:36 [PATCH 0/4] UIO: fixes, cleanups and a new driver Uwe Kleine-König
2008-04-10 12:37 ` [PATCH 1/4] UIO: hold a reference to the device's owner while the device is open Uwe Kleine-König
2008-04-10 12:37   ` [PATCH 2/4] UIO: use menuconfig Uwe Kleine-König
2008-04-10 12:37     ` [PATCH 3/4] UIO: wrap all uio drivers in "if UIO" and "endif" Uwe Kleine-König
2008-04-10 12:37       ` [PATCH 4/4] [RFC] UIO: generic platform driver Uwe Kleine-König
2008-04-10 19:54         ` Hans J. Koch
2008-04-10 20:08           ` Uwe Kleine-König
2008-04-10 21:17             ` Hans J. Koch
2008-04-11  1:34               ` Ben Nizette
2008-04-10 22:48         ` Hans J. Koch
2008-04-11  6:21           ` Uwe Kleine-König [this message]
2008-04-11  9:21             ` [PATCH 4/4 v2] " Uwe Kleine-König
2008-04-11 10:33               ` Hans J. Koch
2008-04-11 11:03                 ` Uwe Kleine-König
2008-04-11 11:17                   ` Hans J. Koch
2008-04-11 11:25                     ` Uwe Kleine-König
2008-04-12 13:16                       ` Russell King - ARM Linux
2008-04-14  7:48                         ` [PATCH] " Uwe Kleine-König
2008-04-14  9:37                           ` Russell King - ARM Linux
2008-04-14  9:54                             ` Uwe Kleine-König
2008-04-14 10:00                               ` Uwe Kleine-König
2008-04-14 10:17                               ` Russell King - ARM Linux
2008-04-14 11:20                                 ` Uwe Kleine-König
2008-04-14 11:37                                   ` Russell King - ARM Linux
2008-04-14 11:52                                     ` Hans J. Koch
2008-04-11 10:48               ` Uwe Kleine-König
2008-04-11 21:41                 ` Greg KH
2008-04-11 22:54                   ` Hans J. Koch
2008-04-11 23:06                     ` Greg KH
2008-04-11  9:24             ` [PATCH 4/4] " Hans J. Koch
2008-04-11 10:41               ` Uwe Kleine-König
2008-04-11 19:59                 ` Hans J. Koch
2008-04-10 19:45       ` [PATCH 3/4] UIO: wrap all uio drivers in "if UIO" and "endif" Hans J. Koch
2008-04-11 21:36         ` Greg KH
2008-04-10 19:39     ` [PATCH 2/4] UIO: use menuconfig Hans J. Koch
2008-04-11 21:36       ` Greg KH
2008-04-11 22:58         ` Hans J. Koch
2008-04-10 20:11   ` [PATCH 1/4] UIO: hold a reference to the device's owner while the device is open Uwe Kleine-König
2008-04-10 21:02   ` Hans J. Koch
2008-04-10 21:12     ` Greg KH
2008-04-10 21:23       ` Hans J. Koch
2008-04-11  6:50     ` Uwe Kleine-König
2008-04-11  8:44       ` Hans J. Koch
2008-04-11  9:07         ` [PATCH 1/4 v2] " Uwe Kleine-König
2008-04-11 11:39           ` Hans J. Koch
2008-04-22  9:47 ` [PATCH 0/3] UIO: cleanup and platform driver Uwe Kleine-König
2008-04-22  9:52   ` [PATCH 1/3] UIO: don't let UIO_CIF and UIO_SMX depend twice on UIO Uwe Kleine-König
2008-04-22  9:52     ` [PATCH 2/3] provide a dummy implementation of the clk API Uwe Kleine-König
2008-04-22  9:52       ` [PATCH 3/3] UIO: generic platform driver Uwe Kleine-König
2008-04-22 10:26         ` Ben Nizette
2008-04-22 13:35           ` Hans J. Koch
2008-04-23  8:56         ` Uwe Kleine-König
2008-04-27 17:12           ` Hans J. Koch
2008-05-20  9:23             ` Uwe Kleine-König
2008-05-20  9:24               ` [PATCH] UIO: don't let UIO_CIF and UIO_SMX depend twice on UIO Uwe Kleine-König
2008-05-20  9:24                 ` [PATCH] UIO: generic platform driver Uwe Kleine-König
2008-05-20 21:08                   ` Hans J. Koch
2008-05-26  5:58                     ` Uwe Kleine-König
2008-05-26  6:02                       ` Greg KH
2008-05-30  9:16                         ` Uwe Kleine-König
2008-05-30 16:35                           ` Greg KH
2008-06-03  7:21                             ` Uwe Kleine-König
2008-06-03  9:24                               ` Hans J. Koch
2008-05-20 21:12                 ` [PATCH] UIO: don't let UIO_CIF and UIO_SMX depend twice on UIO Hans J. Koch
2008-04-22 13:39   ` [PATCH 0/3] UIO: cleanup and platform driver Hans J. Koch

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=20080411062106.GA18096@digi.com \
    --to=uwe.kleine-koenig@digi.com \
    --cc=gregkh@suse.de \
    --cc=hjk@linutronix.de \
    --cc=linux-kernel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox