Problem with mol on 7024-E30
Samuel Rydh
mol-general@lists.maconlinux.org
Tue, 15 Oct 2002 18:19:24 +0200 (MEST)
> This is definitely due to the copying of the non-existent OF
> device tree (I appreciate the symbolic backtrace, thanks).
>
OK... here is the fix. Unfortunately, I can't push to the BK
tree at the moment (I don't have access to the SSH keys
after having shut down my desktop computer remotely by mistake).
/Samuel
===== src/kmod/Linux/misc.c 1.28 vs 1.29 =====
--- 1.28/src/kmod/Linux/misc.c Sun Aug 18 21:06:41 2002
+++ 1.29/src/kmod/Linux/misc.c Tue Oct 15 17:45:55 2002
@@ -1,6 +1,6 @@
/*
* Creation Date: <97/05/26 02:10:43 samuel>
- * Time-stamp: <2002/08/17 18:41:06 samuel>
+ * Time-stamp: <2002/10/15 17:34:11 samuel>
*
* <misc.c>
*
@@ -112,10 +112,11 @@
struct device_node *dn;
int tsize=0;
- dn = get_prom_root();
- if(!src) {
+ if( !(dn=get_prom_root()) )
+ return -ENOTSUPP;
+ if( !src )
src = dn;
- } else {
+ else {
for( ; dn && dn!=src ; dn=dn->allnext )
;
if( !dn )
@@ -180,8 +181,7 @@
if( verify_area(VERIFY_WRITE, dest, bufsize) )
return -EFAULT;
- ret = do_prom_copy_node(NULL, dn);
- if( ret < 0 || ret > bufsize )
+ if( (ret=do_prom_copy_node(NULL, dn)) > bufsize || ret < 0 )
return -EFAULT;
do_prom_copy_node( dest, dn );
===== src/main/promif.c 1.15 vs 1.16 =====
--- 1.15/src/main/promif.c Sun Aug 4 02:09:50 2002
+++ 1.16/src/main/promif.c Tue Oct 15 17:45:55 2002
@@ -1,6 +1,6 @@
/*
* Creation Date: <97/07/03 13:43:50 samuel>
- * Time-stamp: <2002/08/04 01:00:05 samuel>
+ * Time-stamp: <2002/10/15 17:43:52 samuel>
*
* <promif.c>
*
@@ -1066,19 +1066,19 @@
copy_node( mol_device_node_t *kernel_node )
{
mol_device_node_t *node, *sib;
- size_t size;
+ ssize_t size;
if( !kernel_node )
- return 0;
+ return NULL;
/* check if root */
if( kernel_node == (mol_device_node_t*)1 )
kernel_node = 0;
/* copy node */
- if( (size = _prom_get_node_size( kernel_node )) < 0 )
- printm("Error while obtaining OF device node size!\n");
-
+ if( (size=_prom_get_node_size( kernel_node )) <= 0 )
+ return NULL;
+
node = obstack_alloc( &hw_tree->stack, size );
memset( node, 0, size );