linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
@ 2003-06-07 15:24 Adrian Bunk
  2003-06-07 15:58 ` Sam Ravnborg
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Adrian Bunk @ 2003-06-07 15:24 UTC (permalink / raw)
  To: Jean Tourrilhes, linux-net; +Cc: linux-kernel, trivial

I got the following compile error with !CONFIG_PROC_FS:

<--  snip  -->

...
  CC      drivers/net/irda/vlsi_ir.o
drivers/net/irda/vlsi_ir.c: In function `vlsi_irda_probe':
drivers/net/irda/vlsi_ir.c:1826: warning: label `out_unregister' defined but not used
drivers/net/irda/vlsi_ir.c: In function `vlsi_mod_exit':
drivers/net/irda/vlsi_ir.c:2047: `PROC_DIR' undeclared (first use in this function)
drivers/net/irda/vlsi_ir.c:2047: (Each undeclared identifier is reported only once
drivers/net/irda/vlsi_ir.c:2047: for each function it appears in.)
make[3]: *** [drivers/net/irda/vlsi_ir.o] Error 1

<--  snip  -->


The following patch fixes it:


--- linux-2.5.70-mm5/drivers/net/irda/vlsi_ir.c.old	2003-06-07 17:01:26.000000000 +0200
+++ linux-2.5.70-mm5/drivers/net/irda/vlsi_ir.c	2003-06-07 17:02:25.000000000 +0200
@@ -2044,7 +2044,11 @@
 static void __exit vlsi_mod_exit(void)
 {
 	pci_unregister_driver(&vlsi_irda_driver);
+
+#ifdef CONFIG_PROC_FS
 	remove_proc_entry(PROC_DIR, 0);
+#endif
+
 }
 
 module_init(vlsi_mod_init);



cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
  2003-06-07 15:24 [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS Adrian Bunk
@ 2003-06-07 15:58 ` Sam Ravnborg
  2003-06-07 16:13   ` Adrian Bunk
  2003-06-08  9:43   ` Martin Diehl
  2003-06-07 16:22 ` Bartlomiej Zolnierkiewicz
  2003-06-08  9:40 ` Martin Diehl
  2 siblings, 2 replies; 10+ messages in thread
From: Sam Ravnborg @ 2003-06-07 15:58 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: Jean Tourrilhes, linux-net, linux-kernel, trivial

On Sat, Jun 07, 2003 at 05:24:34PM +0200, Adrian Bunk wrote:
> I got the following compile error with !CONFIG_PROC_FS:
>   CC      drivers/net/irda/vlsi_ir.o
> drivers/net/irda/vlsi_ir.c:2047: `PROC_DIR' undeclared (first use in this function)
> The following patch fixes it:
> 

[snip]

I prefer the following patch:
Get rid of one ifdef/endif pair.

	Sam

===== drivers/net/irda/vlsi_ir.c 1.16 vs edited =====
--- 1.16/drivers/net/irda/vlsi_ir.c	Thu Apr 24 14:17:12 2003
+++ edited/drivers/net/irda/vlsi_ir.c	Sat Jun  7 17:55:29 2003
@@ -1993,9 +1993,7 @@
 #endif
 };
 
-#ifdef CONFIG_PROC_FS
 #define PROC_DIR ("driver/" DRIVER_NAME)
-#endif
 
 static int __init vlsi_mod_init(void)
 {

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
  2003-06-07 15:58 ` Sam Ravnborg
@ 2003-06-07 16:13   ` Adrian Bunk
  2003-06-08  9:43   ` Martin Diehl
  1 sibling, 0 replies; 10+ messages in thread
From: Adrian Bunk @ 2003-06-07 16:13 UTC (permalink / raw)
  To: Jean Tourrilhes, linux-net, linux-kernel, trivial

On Sat, Jun 07, 2003 at 05:58:27PM +0200, Sam Ravnborg wrote:
> On Sat, Jun 07, 2003 at 05:24:34PM +0200, Adrian Bunk wrote:
> > I got the following compile error with !CONFIG_PROC_FS:
> >   CC      drivers/net/irda/vlsi_ir.o
> > drivers/net/irda/vlsi_ir.c:2047: `PROC_DIR' undeclared (first use in this function)
> > The following patch fixes it:
> > 
> 
> [snip]
> 
> I prefer the following patch:
> Get rid of one ifdef/endif pair.


Yup, I agree, your patch is better.


> 	Sam
> 
> ===== drivers/net/irda/vlsi_ir.c 1.16 vs edited =====
> --- 1.16/drivers/net/irda/vlsi_ir.c	Thu Apr 24 14:17:12 2003
> +++ edited/drivers/net/irda/vlsi_ir.c	Sat Jun  7 17:55:29 2003
> @@ -1993,9 +1993,7 @@
>  #endif
>  };
>  
> -#ifdef CONFIG_PROC_FS
>  #define PROC_DIR ("driver/" DRIVER_NAME)
> -#endif
>  
>  static int __init vlsi_mod_init(void)
>  {

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
  2003-06-07 15:24 [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS Adrian Bunk
  2003-06-07 15:58 ` Sam Ravnborg
@ 2003-06-07 16:22 ` Bartlomiej Zolnierkiewicz
  2003-06-07 16:59   ` Adrian Bunk
                     ` (2 more replies)
  2003-06-08  9:40 ` Martin Diehl
  2 siblings, 3 replies; 10+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2003-06-07 16:22 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: Jean Tourrilhes, linux-net, linux-kernel, trivial


Apply something like this:

--- linux-2.5.70-bk11/include/proc_fs.h	Fri Jun  6 18:43:49 2003
+++ linux/include/proc_fs.h	Sat Jun  7 18:11:22 2003
@@ -205,7 +205,7 @@
 static inline struct proc_dir_entry *create_proc_entry(const char *name,
 	mode_t mode, struct proc_dir_entry *parent) { return NULL; }

-static inline void remove_proc_entry(const char *name, struct proc_dir_entry *parent) {};
+#define remove_proc_entry(name, parent)	/* nothing */
 static inline struct proc_dir_entry *proc_symlink(const char *name,
 		struct proc_dir_entry *parent,char *dest) {return NULL;}
 static inline struct proc_dir_entry *proc_mknod(const char *name,mode_t mode,

And you wil not have to readd #ifdef/#endif pair.

I've seen Sam's mail but this is generic solution to quiet compiler
and will work for any remove_proc_entry() user.

Thanks,
--
Bartlomiej

On Sat, 7 Jun 2003, Adrian Bunk wrote:

> I got the following compile error with !CONFIG_PROC_FS:
>
> <--  snip  -->
>
> ...
>   CC      drivers/net/irda/vlsi_ir.o
> drivers/net/irda/vlsi_ir.c: In function `vlsi_irda_probe':
> drivers/net/irda/vlsi_ir.c:1826: warning: label `out_unregister' defined but not used
> drivers/net/irda/vlsi_ir.c: In function `vlsi_mod_exit':
> drivers/net/irda/vlsi_ir.c:2047: `PROC_DIR' undeclared (first use in this function)
> drivers/net/irda/vlsi_ir.c:2047: (Each undeclared identifier is reported only once
> drivers/net/irda/vlsi_ir.c:2047: for each function it appears in.)
> make[3]: *** [drivers/net/irda/vlsi_ir.o] Error 1
>
> <--  snip  -->
>
>
> The following patch fixes it:
>
>
> --- linux-2.5.70-mm5/drivers/net/irda/vlsi_ir.c.old	2003-06-07 17:01:26.000000000 +0200
> +++ linux-2.5.70-mm5/drivers/net/irda/vlsi_ir.c	2003-06-07 17:02:25.000000000 +0200
> @@ -2044,7 +2044,11 @@
>  static void __exit vlsi_mod_exit(void)
>  {
>  	pci_unregister_driver(&vlsi_irda_driver);
> +
> +#ifdef CONFIG_PROC_FS
>  	remove_proc_entry(PROC_DIR, 0);
> +#endif
> +
>  }
>
>  module_init(vlsi_mod_init);


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
  2003-06-07 16:22 ` Bartlomiej Zolnierkiewicz
@ 2003-06-07 16:59   ` Adrian Bunk
  2003-06-07 17:09     ` Sam Ravnborg
  2003-06-07 20:09   ` Andrew Morton
  2003-06-09  6:00   ` Rusty Russell
  2 siblings, 1 reply; 10+ messages in thread
From: Adrian Bunk @ 2003-06-07 16:59 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz, bcollins, linux1394-devel
  Cc: Jean Tourrilhes, linux-net, linux-kernel, trivial

On Sat, Jun 07, 2003 at 06:22:39PM +0200, Bartlomiej Zolnierkiewicz wrote:
> 
> Apply something like this:
> 
> --- linux-2.5.70-bk11/include/proc_fs.h	Fri Jun  6 18:43:49 2003
> +++ linux/include/proc_fs.h	Sat Jun  7 18:11:22 2003
> @@ -205,7 +205,7 @@
>  static inline struct proc_dir_entry *create_proc_entry(const char *name,
>  	mode_t mode, struct proc_dir_entry *parent) { return NULL; }
> 
> -static inline void remove_proc_entry(const char *name, struct proc_dir_entry *parent) {};
> +#define remove_proc_entry(name, parent)	/* nothing */
>  static inline struct proc_dir_entry *proc_symlink(const char *name,
>  		struct proc_dir_entry *parent,char *dest) {return NULL;}
>  static inline struct proc_dir_entry *proc_mknod(const char *name,mode_t mode,
> 
> And you wil not have to readd #ifdef/#endif pair.
> 
> I've seen Sam's mail but this is generic solution to quiet compiler
> and will work for any remove_proc_entry() user.

Yup, for this specific error Sam's solution is the best one, but your 
patch e.g. solves the ieee1394_core.c compile error I reported, too.

> Thanks,
> --
> Bartlomiej

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
  2003-06-07 16:59   ` Adrian Bunk
@ 2003-06-07 17:09     ` Sam Ravnborg
  0 siblings, 0 replies; 10+ messages in thread
From: Sam Ravnborg @ 2003-06-07 17:09 UTC (permalink / raw)
  To: Adrian Bunk
  Cc: Bartlomiej Zolnierkiewicz, bcollins, linux1394-devel,
	Jean Tourrilhes, linux-net, linux-kernel, trivial

On Sat, Jun 07, 2003 at 06:59:51PM +0200, Adrian Bunk wrote:
> > 
> > I've seen Sam's mail but this is generic solution to quiet compiler
> > and will work for any remove_proc_entry() user.
> 
> Yup, for this specific error Sam's solution is the best one, but your 
> patch e.g. solves the ieee1394_core.c compile error I reported, too.

Actually both should be applied.
The ifdef/endif pair is redundant when Bartlomiej's patch is applied.

	Sam

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
  2003-06-07 16:22 ` Bartlomiej Zolnierkiewicz
  2003-06-07 16:59   ` Adrian Bunk
@ 2003-06-07 20:09   ` Andrew Morton
  2003-06-09  6:00   ` Rusty Russell
  2 siblings, 0 replies; 10+ messages in thread
From: Andrew Morton @ 2003-06-07 20:09 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz; +Cc: bunk, jt, linux-net, linux-kernel, trivial

Bartlomiej Zolnierkiewicz <B.Zolnierkiewicz@elka.pw.edu.pl> wrote:
>
> -static inline void remove_proc_entry(const char *name, struct proc_dir_entry *parent) {};
>  +#define remove_proc_entry(name, parent)	/* nothing */

oh, OK.

--- 25/include/linux/proc_fs.h~remove_proc_entry-fix	2003-06-07 13:07:46.000000000 -0700
+++ 25-akpm/include/linux/proc_fs.h	2003-06-07 13:08:51.000000000 -0700
@@ -205,7 +205,8 @@ static inline void proc_pid_flush(struct
 static inline struct proc_dir_entry *create_proc_entry(const char *name,
 	mode_t mode, struct proc_dir_entry *parent) { return NULL; }
 
-static inline void remove_proc_entry(const char *name, struct proc_dir_entry *parent) {};
+#define remove_proc_entry(name, parent) do {} while (0)
+
 static inline struct proc_dir_entry *proc_symlink(const char *name,
 		struct proc_dir_entry *parent,char *dest) {return NULL;}
 static inline struct proc_dir_entry *proc_mknod(const char *name,mode_t mode,

_


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
  2003-06-07 15:24 [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS Adrian Bunk
  2003-06-07 15:58 ` Sam Ravnborg
  2003-06-07 16:22 ` Bartlomiej Zolnierkiewicz
@ 2003-06-08  9:40 ` Martin Diehl
  2 siblings, 0 replies; 10+ messages in thread
From: Martin Diehl @ 2003-06-08  9:40 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: Jean Tourrilhes, linux-net, linux-kernel, trivial

On Sat, 7 Jun 2003, Adrian Bunk wrote:

> drivers/net/irda/vlsi_ir.c: In function `vlsi_mod_exit':
> drivers/net/irda/vlsi_ir.c:2047: `PROC_DIR' undeclared (first use in this function)

Thank you for finding this! Actually, I had something similar to your 
patch

> +#ifdef CONFIG_PROC_FS
>  	remove_proc_entry(PROC_DIR, 0);
> +#endif

already pending here, but the proc-stuff in vlsi_ir needs some more 
fixing. Patch will follow.

Martin


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
  2003-06-07 15:58 ` Sam Ravnborg
  2003-06-07 16:13   ` Adrian Bunk
@ 2003-06-08  9:43   ` Martin Diehl
  1 sibling, 0 replies; 10+ messages in thread
From: Martin Diehl @ 2003-06-08  9:43 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Adrian Bunk, Jean Tourrilhes, linux-net, linux-kernel, trivial

On Sat, 7 Jun 2003, Sam Ravnborg wrote:

> On Sat, Jun 07, 2003 at 05:24:34PM +0200, Adrian Bunk wrote:
> > I got the following compile error with !CONFIG_PROC_FS:
> >   CC      drivers/net/irda/vlsi_ir.o
> > drivers/net/irda/vlsi_ir.c:2047: `PROC_DIR' undeclared (first use in this function)
> > The following patch fixes it:
> 
> I prefer the following patch:
> Get rid of one ifdef/endif pair.
> 
> -#ifdef CONFIG_PROC_FS
>  #define PROC_DIR ("driver/" DRIVER_NAME)
> -#endif

Yes, Thanks. In fact walking over the proc-stuff in vlsi_ir, there are 
some more places which need cleanup and fixing.

Jean, please apply the patch below - ChangeLog:

* make it compile without CONFIG_PROC_FS (problem reported by Adrian Bunk, 
  original patch by Sam Ravnborg)
* get rid of a number of unneeded ifdef/endif CONFIG_PROC_FS (also 
  removing an "unused label" warning)
* use proc entry's owner field to protect against module removal racing
  with proc entry access.

Martin

------------------------

--- linux-2.5.70/include/net/irda/vlsi_ir.h	Mon Apr  7 19:31:51 2003
+++ v2.5.70/include/net/irda/vlsi_ir.h	Sun Jun  8 11:33:40 2003
@@ -730,9 +730,7 @@ typedef struct vlsi_irda_dev {
 
 	u32			cfg_space[64/sizeof(u32)];
 	u8			resume_ok;	
-#ifdef CONFIG_PROC_FS
 	struct proc_dir_entry	*proc_entry;
-#endif
 
 } vlsi_irda_dev_t;
 
--- linux-2.5.70/drivers/net/irda/vlsi_ir.c	Wed May  7 09:13:39 2003
+++ v2.5.70/drivers/net/irda/vlsi_ir.c	Sun Jun  8 11:33:34 2003
@@ -149,6 +149,9 @@ static void vlsi_ring_debug(struct vlsi_
 
 /********************************************************/
 
+/* needed regardless of CONFIG_PROC_FS */
+static struct proc_dir_entry *vlsi_proc_root = NULL;
+
 #ifdef CONFIG_PROC_FS
 
 static int vlsi_proc_pdev(struct pci_dev *pdev, char *buf, int len)
@@ -394,8 +397,6 @@ static int vlsi_proc_print(struct net_de
 	return out - buf;
 }
 
-static struct proc_dir_entry *vlsi_proc_root = NULL;
-
 struct vlsi_proc_data {
 	int size;
 	char *data;
@@ -499,6 +500,11 @@ static struct file_operations vlsi_proc_
 	.read		= vlsi_proc_read,
 	.release	= vlsi_proc_release,
 };
+
+#define VLSI_PROC_FOPS		(&vlsi_proc_fops)
+
+#else	/* CONFIG_PROC_FS */
+#define VLSI_PROC_FOPS		NULL
 #endif
 
 /********************************************************/
@@ -1800,8 +1806,7 @@ vlsi_irda_probe(struct pci_dev *pdev, co
 		goto out_freedev;
 	}
 
-#ifdef CONFIG_PROC_FS
-	{
+	if (vlsi_proc_root != NULL) {
 		struct proc_dir_entry *ent;
 
 		ent = create_proc_entry(ndev->name, S_IFREG|S_IRUGO, vlsi_proc_root);
@@ -1810,11 +1815,11 @@ vlsi_irda_probe(struct pci_dev *pdev, co
 			goto out_unregister;
 		}
 		ent->data = ndev;
-		ent->proc_fops = &vlsi_proc_fops;
+		ent->proc_fops = VLSI_PROC_FOPS;
 		ent->size = 0;
 		idev->proc_entry = ent;
-	}
-#endif
+	} else
+		idev->proc_entry = NULL;
 
 	printk(KERN_INFO "%s: registered device %s\n", drivername, ndev->name);
 
@@ -1851,12 +1856,10 @@ static void __devexit vlsi_irda_remove(s
 	down(&idev->sem);
 	pci_set_drvdata(pdev, NULL);
 	pci_disable_device(pdev);
-#ifdef CONFIG_PROC_FS
 	if (idev->proc_entry) {
 		remove_proc_entry(ndev->name, vlsi_proc_root);
 		idev->proc_entry = NULL;
 	}
-#endif
 	up(&idev->sem);
 
 	unregister_netdev(ndev);
@@ -1993,9 +1996,7 @@ static struct pci_driver vlsi_irda_drive
 #endif
 };
 
-#ifdef CONFIG_PROC_FS
 #define PROC_DIR ("driver/" DRIVER_NAME)
-#endif
 
 static int __init vlsi_mod_init(void)
 {
@@ -2025,18 +2026,16 @@ static int __init vlsi_mod_init(void)
 
 	sirpulse = !!sirpulse;
 
-#ifdef CONFIG_PROC_FS
 	vlsi_proc_root = create_proc_entry(PROC_DIR, S_IFDIR, 0);
 	if (!vlsi_proc_root)
 		return -ENOMEM;
-#endif
+	/* protect registered procdir against module removal */
+	vlsi_proc_root->owner = THIS_MODULE;
 
 	ret = pci_module_init(&vlsi_irda_driver);
 
-#ifdef CONFIG_PROC_FS
 	if (ret)
 		remove_proc_entry(PROC_DIR, 0);
-#endif
 	return ret;
 
 }




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS
  2003-06-07 16:22 ` Bartlomiej Zolnierkiewicz
  2003-06-07 16:59   ` Adrian Bunk
  2003-06-07 20:09   ` Andrew Morton
@ 2003-06-09  6:00   ` Rusty Russell
  2 siblings, 0 replies; 10+ messages in thread
From: Rusty Russell @ 2003-06-09  6:00 UTC (permalink / raw)
  To: Bartlomiej Zolnierkiewicz
  Cc: Jean Tourrilhes, linux-net, linux-kernel, Adrian Bunk

In message <Pine.SOL.4.30.0306071815120.6449-100000@mion.elka.pw.edu.pl> you write:
> -static inline void remove_proc_entry(const char *name, struct proc_dir_entry *parent) {};
> +#define remove_proc_entry(name, parent)	/* nothing */

> And you wil not have to readd #ifdef/#endif pair.
> 
> I've seen Sam's mail but this is generic solution to quiet compiler
> and will work for any remove_proc_entry() user.

And it'll leave unused warnings all over the place, meaning you have
to add __unused to all the callers.  Now gcc 3.3 will actually discard
those unused functions, this might be worth considering.

But if you're going to do that, make create_proc_entry etc *not*
return NULL if !CONFIG_PROC_FS, otherwise you need the #ifdef anyway.
This has been noted before.

Good luck!
Rusty.
--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2003-06-09  7:20 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-07 15:24 [patch] fix vlsi_ir.c compile if !CONFIG_PROC_FS Adrian Bunk
2003-06-07 15:58 ` Sam Ravnborg
2003-06-07 16:13   ` Adrian Bunk
2003-06-08  9:43   ` Martin Diehl
2003-06-07 16:22 ` Bartlomiej Zolnierkiewicz
2003-06-07 16:59   ` Adrian Bunk
2003-06-07 17:09     ` Sam Ravnborg
2003-06-07 20:09   ` Andrew Morton
2003-06-09  6:00   ` Rusty Russell
2003-06-08  9:40 ` Martin Diehl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).