Re: [uml-devel] Re: [PATCH 2.6] 4/7 replace uml_strdup by kstrdup
Blaisorblade wrote: [...] For UML, you should probably add the prototype to a good header inside arch/um/include (those headers are in the searchpath for every file under arch/um) - probably the one which declared uml_strdup. Yes, we have had to duplicate prototypes for many functions... for inlines, we've had to provide in many case a non-inline version. Thanks for the tip. I'll have to read the code more carefully to understand better where the userspace ends and the kernel begins, so that I don't do similar mistakes in the future. I'll redo the patch and post it for review, probably during next week. I don't think there is much hurry, because, even if this gets accepted, it should go in only in 2.6.12-rc1-mm1 or something like that, so there is still time to review this more carefully. Thanks for reviewing the patch, -- Paulo Marques - www.grupopie.com All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke (1729 - 1797) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [uml-devel] Re: [PATCH 2.6] 4/7 replace uml_strdup by kstrdup
Blaisorblade wrote: [...] For UML, you should probably add the prototype to a good header inside arch/um/include (those headers are in the searchpath for every file under arch/um) - probably the one which declared uml_strdup. Yes, we have had to duplicate prototypes for many functions... for inlines, we've had to provide in many case a non-inline version. Thanks for the tip. I'll have to read the code more carefully to understand better where the userspace ends and the kernel begins, so that I don't do similar mistakes in the future. I'll redo the patch and post it for review, probably during next week. I don't think there is much hurry, because, even if this gets accepted, it should go in only in 2.6.12-rc1-mm1 or something like that, so there is still time to review this more carefully. Thanks for reviewing the patch, -- Paulo Marques - www.grupopie.com All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke (1729 - 1797) - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [uml-devel] Re: [PATCH 2.6] 4/7 replace uml_strdup by kstrdup
On Wednesday 02 February 2005 12:55, you wrote: > Pekka Enberg wrote: > > On Tue, 1 Feb 2005 03:28:31 +, [EMAIL PROTECTED] > > > > <[EMAIL PROTECTED]> wrote: > >>diff -buprN -X dontdiff > >> vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c > >> linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c --- > >> vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c > >> 2004-12-24 21:35:40.0 + +++ > >> linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2005-01-31 > >> 20:39:08.591154025 + > > > > [snip] > > > >>- pri->dev_name = uml_strdup(buffer); > >>+ pri->dev_name = kstrdup(buffer); > > > > Please compile-test before submitting. > > I'm really sorry about this... > > I've compiled with an allyesconfig to validate the changes, but that > doesn't build the UML parts :( Well, the answer is to do add a "ARCH=um" to the build commands... you could maybe use a "make defconfig ARCH=um" however because UML itself, sometimes, does not build with allyesconfig /allmodconfig... However, that said, there are bigger problems for UML. Since of its particular nature, it contains some code which is compiled against userspace headers. For instance cow_user.c (the list includes *_user.c and everything that is explicitly listed in USER_OBJS inside the Makefiles) So, for cow_user.c, when you add to cow_user.c, you are actually making it include /usr/include/linux/string.h... For UML, you should probably add the prototype to a good header inside arch/um/include (those headers are in the searchpath for every file under arch/um) - probably the one which declared uml_strdup. Yes, we have had to duplicate prototypes for many functions... for inlines, we've had to provide in many case a non-inline version. > Anyway, thanks for pointing this out. I still haven't got feedback > regarding the acceptance of these patches. If there is a chance they're > accepted, maybe the best thing to do is to post the series again with > this correction and the sound patch corrections. -- Paolo Giarrusso, aka Blaisorblade Linux registered user n. 292729 http://www.user-mode-linux.org/~blaisorblade - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [uml-devel] Re: [PATCH 2.6] 4/7 replace uml_strdup by kstrdup
On Wednesday 02 February 2005 12:55, you wrote: Pekka Enberg wrote: On Tue, 1 Feb 2005 03:28:31 +, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c --- vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2004-12-24 21:35:40.0 + +++ linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2005-01-31 20:39:08.591154025 + [snip] - pri-dev_name = uml_strdup(buffer); + pri-dev_name = kstrdup(buffer); Please compile-test before submitting. I'm really sorry about this... I've compiled with an allyesconfig to validate the changes, but that doesn't build the UML parts :( Well, the answer is to do add a ARCH=um to the build commands... you could maybe use a make defconfig ARCH=um however because UML itself, sometimes, does not build with allyesconfig /allmodconfig... However, that said, there are bigger problems for UML. Since of its particular nature, it contains some code which is compiled against userspace headers. For instance cow_user.c (the list includes *_user.c and everything that is explicitly listed in USER_OBJS inside the Makefiles) So, for cow_user.c, when you add linux/string.h to cow_user.c, you are actually making it include /usr/include/linux/string.h... For UML, you should probably add the prototype to a good header inside arch/um/include (those headers are in the searchpath for every file under arch/um) - probably the one which declared uml_strdup. Yes, we have had to duplicate prototypes for many functions... for inlines, we've had to provide in many case a non-inline version. Anyway, thanks for pointing this out. I still haven't got feedback regarding the acceptance of these patches. If there is a chance they're accepted, maybe the best thing to do is to post the series again with this correction and the sound patch corrections. -- Paolo Giarrusso, aka Blaisorblade Linux registered user n. 292729 http://www.user-mode-linux.org/~blaisorblade - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2.6] 4/7 replace uml_strdup by kstrdup
Pekka Enberg wrote: On Tue, 1 Feb 2005 03:28:31 +, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c --- vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2004-12-24 21:35:40.0 + +++ linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2005-01-31 20:39:08.591154025 + [snip] - pri->dev_name = uml_strdup(buffer); + pri->dev_name = kstrdup(buffer); Please compile-test before submitting. I'm really sorry about this... I've compiled with an allyesconfig to validate the changes, but that doesn't build the UML parts :( Anyway, thanks for pointing this out. I still haven't got feedback regarding the acceptance of these patches. If there is a chance they're accepted, maybe the best thing to do is to post the series again with this correction and the sound patch corrections. -- Paulo Marques - www.grupopie.com All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke (1729 - 1797) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2.6] 4/7 replace uml_strdup by kstrdup
Pekka Enberg wrote: On Tue, 1 Feb 2005 03:28:31 +, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c --- vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2004-12-24 21:35:40.0 + +++ linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2005-01-31 20:39:08.591154025 + [snip] - pri-dev_name = uml_strdup(buffer); + pri-dev_name = kstrdup(buffer); Please compile-test before submitting. I'm really sorry about this... I've compiled with an allyesconfig to validate the changes, but that doesn't build the UML parts :( Anyway, thanks for pointing this out. I still haven't got feedback regarding the acceptance of these patches. If there is a chance they're accepted, maybe the best thing to do is to post the series again with this correction and the sound patch corrections. -- Paulo Marques - www.grupopie.com All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke (1729 - 1797) - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2.6] 4/7 replace uml_strdup by kstrdup
On Tue, 1 Feb 2005 03:28:31 +, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > diff -buprN -X dontdiff > vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c > linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c > --- vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c > 2004-12-24 21:35:40.0 + > +++ linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2005-01-31 > 20:39:08.591154025 + [snip] > - pri->dev_name = uml_strdup(buffer); > + pri->dev_name = kstrdup(buffer); Please compile-test before submitting. Pekka - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2.6] 4/7 replace uml_strdup by kstrdup
On Tue, 1 Feb 2005 03:28:31 +, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c --- vanilla-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2004-12-24 21:35:40.0 + +++ linux-2.6.11-rc2-bk9/arch/um/os-Linux/drivers/tuntap_user.c 2005-01-31 20:39:08.591154025 + [snip] - pri-dev_name = uml_strdup(buffer); + pri-dev_name = kstrdup(buffer); Please compile-test before submitting. Pekka - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 2.6] 4/7 replace uml_strdup by kstrdup
This patch removes the strdup implementation in the UML architecture (uml_strdup), and updates it to use the kstrdup library function. Signed-off-by: Paulo Marques <[EMAIL PROTECTED]> -- Paulo Marques - www.grupopie.com All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke (1729 - 1797) diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/cow_sys.h linux-2.6.11-rc2-bk9/arch/um/drivers/cow_sys.h --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/cow_sys.h 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/cow_sys.h 2005-01-31 20:40:01.713782823 + @@ -18,11 +18,6 @@ static inline void cow_free(void *ptr) #define cow_printf printk -static inline char *cow_strdup(char *str) -{ - return(uml_strdup(str)); -} - static inline int cow_seek_file(int fd, unsigned long long offset) { return(os_seek_file(fd, offset)); diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/cow_user.c linux-2.6.11-rc2-bk9/arch/um/drivers/cow_user.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/cow_user.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/cow_user.c 2005-01-31 20:39:08.587154730 + @@ -7,6 +7,7 @@ #include #include #include +#include #include "os.h" @@ -313,7 +314,7 @@ int read_cow_header(int (*reader)(__u64, goto out; } err = -ENOMEM; - *backing_file_out = cow_strdup(file); + *backing_file_out = kstrdup(file, GFP_KERNEL); if(*backing_file_out == NULL){ cow_printf("read_cow_header - failed to allocate backing " "file\n"); diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/line.c linux-2.6.11-rc2-bk9/arch/um/drivers/line.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/line.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/line.c 2005-01-31 20:39:08.587154730 + @@ -9,6 +9,7 @@ #include "linux/kd.h" #include "linux/interrupt.h" #include "linux/devfs_fs_kernel.h" +#include "linux/string.h" #include "asm/uaccess.h" #include "chan_kern.h" #include "irq_user.h" @@ -445,10 +446,10 @@ int line_setup(struct line *lines, int n int line_config(struct line *lines, int num, char *str) { - char *new = uml_strdup(str); + char *new = kstrdup(str, GFP_KERNEL); if(new == NULL){ - printk("line_config - uml_strdup failed\n"); + printk("line_config - kstrdup failed\n"); return(-ENOMEM); } return(!line_setup(lines, num, new, 0)); @@ -555,9 +556,9 @@ void lines_init(struct line *lines, int INIT_LIST_HEAD(>chan_list); sema_init(>sem, 1); if(line->init_str != NULL){ - line->init_str = uml_strdup(line->init_str); + line->init_str = kstrdup(line->init_str, GFP_KERNEL); if(line->init_str == NULL) -printk("lines_init - uml_strdup returned " +printk("lines_init - kstrdup returned " "NULL\n"); } } diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/mconsole_kern.c linux-2.6.11-rc2-bk9/arch/um/drivers/mconsole_kern.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/mconsole_kern.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/mconsole_kern.c 2005-01-31 20:39:08.588154554 + @@ -20,6 +20,7 @@ #include "linux/namei.h" #include "linux/proc_fs.h" #include "linux/syscalls.h" +#include "linux/string.h" #include "asm/irq.h" #include "asm/uaccess.h" #include "user_util.h" @@ -483,7 +484,7 @@ int mconsole_init(void) } if(notify_socket != NULL){ - notify_socket = uml_strdup(notify_socket); + notify_socket = kstrdup(notify_socket, GFP_KERNEL); if(notify_socket != NULL) mconsole_notify(notify_socket, MCONSOLE_SOCKET, mconsole_socket_name, diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/net_kern.c linux-2.6.11-rc2-bk9/arch/um/drivers/net_kern.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/net_kern.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/net_kern.c 2005-01-31 20:39:08.589154377 + @@ -20,6 +20,7 @@ #include "linux/ctype.h" #include "linux/bootmem.h" #include "linux/ethtool.h" +#include "linux/string.h" #include "asm/uaccess.h" #include "user_util.h" #include "kern_util.h" @@ -602,7 +603,7 @@ static int net_config(char *str) err = eth_parse(str, , ); if(err) return(err); - str = uml_strdup(str); + str = kstrdup(str, GFP_KERNEL); if(str == NULL){ printk(KERN_ERR "net_config failed to strdup string\n"); return(-1); diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/ubd_kern.c linux-2.6.11-rc2-bk9/arch/um/drivers/ubd_kern.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/ubd_kern.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/ubd_kern.c 2005-01-31 20:39:08.589154377 + @@ -35,6 +35,7 @@ #include "linux/blkpg.h" #include "linux/genhd.h" #include "linux/spinlock.h" +#include "linux/string.h" #include "asm/segment.h" #include "asm/uaccess.h" #include "asm/irq.h" @@ -722,7 +723,7 @@ static int ubd_config(char *str) { int n, err; - str
[PATCH 2.6] 4/7 replace uml_strdup by kstrdup
This patch removes the strdup implementation in the UML architecture (uml_strdup), and updates it to use the kstrdup library function. Signed-off-by: Paulo Marques [EMAIL PROTECTED] -- Paulo Marques - www.grupopie.com All that is necessary for the triumph of evil is that good men do nothing. Edmund Burke (1729 - 1797) diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/cow_sys.h linux-2.6.11-rc2-bk9/arch/um/drivers/cow_sys.h --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/cow_sys.h 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/cow_sys.h 2005-01-31 20:40:01.713782823 + @@ -18,11 +18,6 @@ static inline void cow_free(void *ptr) #define cow_printf printk -static inline char *cow_strdup(char *str) -{ - return(uml_strdup(str)); -} - static inline int cow_seek_file(int fd, unsigned long long offset) { return(os_seek_file(fd, offset)); diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/cow_user.c linux-2.6.11-rc2-bk9/arch/um/drivers/cow_user.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/cow_user.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/cow_user.c 2005-01-31 20:39:08.587154730 + @@ -7,6 +7,7 @@ #include sys/param.h #include sys/user.h #include netinet/in.h +#include linux/string.h #include os.h @@ -313,7 +314,7 @@ int read_cow_header(int (*reader)(__u64, goto out; } err = -ENOMEM; - *backing_file_out = cow_strdup(file); + *backing_file_out = kstrdup(file, GFP_KERNEL); if(*backing_file_out == NULL){ cow_printf(read_cow_header - failed to allocate backing file\n); diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/line.c linux-2.6.11-rc2-bk9/arch/um/drivers/line.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/line.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/line.c 2005-01-31 20:39:08.587154730 + @@ -9,6 +9,7 @@ #include linux/kd.h #include linux/interrupt.h #include linux/devfs_fs_kernel.h +#include linux/string.h #include asm/uaccess.h #include chan_kern.h #include irq_user.h @@ -445,10 +446,10 @@ int line_setup(struct line *lines, int n int line_config(struct line *lines, int num, char *str) { - char *new = uml_strdup(str); + char *new = kstrdup(str, GFP_KERNEL); if(new == NULL){ - printk(line_config - uml_strdup failed\n); + printk(line_config - kstrdup failed\n); return(-ENOMEM); } return(!line_setup(lines, num, new, 0)); @@ -555,9 +556,9 @@ void lines_init(struct line *lines, int INIT_LIST_HEAD(line-chan_list); sema_init(line-sem, 1); if(line-init_str != NULL){ - line-init_str = uml_strdup(line-init_str); + line-init_str = kstrdup(line-init_str, GFP_KERNEL); if(line-init_str == NULL) -printk(lines_init - uml_strdup returned +printk(lines_init - kstrdup returned NULL\n); } } diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/mconsole_kern.c linux-2.6.11-rc2-bk9/arch/um/drivers/mconsole_kern.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/mconsole_kern.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/mconsole_kern.c 2005-01-31 20:39:08.588154554 + @@ -20,6 +20,7 @@ #include linux/namei.h #include linux/proc_fs.h #include linux/syscalls.h +#include linux/string.h #include asm/irq.h #include asm/uaccess.h #include user_util.h @@ -483,7 +484,7 @@ int mconsole_init(void) } if(notify_socket != NULL){ - notify_socket = uml_strdup(notify_socket); + notify_socket = kstrdup(notify_socket, GFP_KERNEL); if(notify_socket != NULL) mconsole_notify(notify_socket, MCONSOLE_SOCKET, mconsole_socket_name, diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/net_kern.c linux-2.6.11-rc2-bk9/arch/um/drivers/net_kern.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/net_kern.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/net_kern.c 2005-01-31 20:39:08.589154377 + @@ -20,6 +20,7 @@ #include linux/ctype.h #include linux/bootmem.h #include linux/ethtool.h +#include linux/string.h #include asm/uaccess.h #include user_util.h #include kern_util.h @@ -602,7 +603,7 @@ static int net_config(char *str) err = eth_parse(str, n, str); if(err) return(err); - str = uml_strdup(str); + str = kstrdup(str, GFP_KERNEL); if(str == NULL){ printk(KERN_ERR net_config failed to strdup string\n); return(-1); diff -buprN -X dontdiff vanilla-2.6.11-rc2-bk9/arch/um/drivers/ubd_kern.c linux-2.6.11-rc2-bk9/arch/um/drivers/ubd_kern.c --- vanilla-2.6.11-rc2-bk9/arch/um/drivers/ubd_kern.c 2005-01-31 20:05:17.0 + +++ linux-2.6.11-rc2-bk9/arch/um/drivers/ubd_kern.c 2005-01-31 20:39:08.589154377 + @@ -35,6 +35,7 @@ #include linux/blkpg.h #include linux/genhd.h #include linux/spinlock.h +#include linux/string.h #include asm/segment.h #include asm/uaccess.h #include asm/irq.h @@ -722,7 +723,7 @@ static int ubd_config(char *str) { int n, err; - str = uml_strdup(str); +