Add in my little patch for 2.4.x to make sysinfo binary compatable (again)
-Erik
This commit is contained in:
		
							
								
								
									
										77
									
								
								examples/kernel-patches/2.4.x-revert-sysinfo.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								examples/kernel-patches/2.4.x-revert-sysinfo.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| I have a version of free I wrote for BusyBox that uses sysinfo (rather then | ||||
| /proc) to get its information.  Under 2.2.x it reports normal stuff, i.e. | ||||
|     [andersen@dillweed busybox]$ ./free | ||||
|                   total         used         free       shared      buffers | ||||
|       Mem:       127800       124268         3532        16956         7544 | ||||
|      Swap:       128516        13584       114932 | ||||
|     Total:       256316       137852       118464 | ||||
|  | ||||
| while under 2.2.0-test1-ac7 it reports wierd numbers (~ #/4096) | ||||
|     [andersen@dillweed busybox]$ ./free | ||||
|                   total         used         free       shared      buffers | ||||
|       Mem:           30           11           19            0            1 | ||||
|      Swap:           31            0           31 | ||||
|     Total:           61           11           50 | ||||
|  | ||||
| After investigating the problem, it turns out that somewhere during 2.3.x the | ||||
| values for memory stored in struct sysinfo changed from being stored as bytes | ||||
| to being units of PAGE_SIZE, but kernel/info.c was never updated to reflect | ||||
| this change in definition. | ||||
|  | ||||
| Breaking free isn't that big of a deal, but I also use sysinfo in init to check | ||||
| that the box has enough ram from within the init process (and no, mounting | ||||
| /proc from within init and reading /proc/meminfo is not a good solution. | ||||
| BusyBox is often used in embedded systems where /proc is not compiled in). | ||||
|  | ||||
| The following patch reinstates the traditional sysinfo(2) interface by | ||||
| returning bytes (not units of PAGE_SIZE) for memory values. | ||||
|  | ||||
| An additional patch suggestion (not included here) would be to eliminate the | ||||
| supurfluous "mem_unit" variable from struct_sysinfo in include/linux/kernel.h | ||||
| and arch/*/mm/init.c. | ||||
|  | ||||
|  -Erik | ||||
|  | ||||
| -- | ||||
| Erik B. Andersen   Web:    http://www.xmission.com/~andersen/ | ||||
|                    email:  andersee@debian.org | ||||
| --This message was written using 73% post-consumer electrons-- | ||||
|  | ||||
| --- linux/kernel/info.c.orig    Mon Aug 23 12:15:53 1999 | ||||
| +++ linux/kernel/info.c Sun Jun  4 01:13:11 2000 | ||||
| @@ -2,6 +2,8 @@ | ||||
|   * linux/kernel/info.c | ||||
|   * | ||||
|   * Copyright (C) 1992 Darren Senn | ||||
| + * Fixed to once again return bytes instead of page counts, | ||||
| + * June 2000, by Erik Andersen <andersee@debian.org> | ||||
|   */ | ||||
|  | ||||
|  /* This implements the sysinfo() system call */ | ||||
| @@ -10,7 +12,6 @@ | ||||
|  #include <linux/unistd.h> | ||||
|  #include <linux/swap.h> | ||||
|  #include <linux/smp_lock.h> | ||||
| - | ||||
|  #include <asm/uaccess.h> | ||||
|  | ||||
|  asmlinkage long sys_sysinfo(struct sysinfo *info) | ||||
| @@ -31,6 +32,17 @@ | ||||
|  | ||||
|         si_meminfo(&val); | ||||
|         si_swapinfo(&val); | ||||
| + | ||||
| +       /* These are in units of PAGE_SIZE, but this interface | ||||
| +        * has always returned bytes.  Make it return bytes */ | ||||
| +       val.totalram*=PAGE_SIZE; | ||||
| +       val.freeram*=PAGE_SIZE; | ||||
| +       val.sharedram*=PAGE_SIZE; | ||||
| +       val.bufferram*=PAGE_SIZE; | ||||
| +       val.totalswap*=PAGE_SIZE; | ||||
| +       val.freeswap*=PAGE_SIZE; | ||||
| +       val.totalhigh*=PAGE_SIZE; | ||||
| +       val.freehigh*=PAGE_SIZE; | ||||
|  | ||||
|         if (copy_to_user(info, &val, sizeof(struct sysinfo))) | ||||
|                 return -EFAULT; | ||||
|  | ||||
| @@ -1,3 +1,14 @@ | ||||
| I have been asked several times whether the devps patch will go into the | ||||
| mainline Linux kernel.  The following emails from Alan Cox and Linux Torvalds | ||||
| make it clear that it is not going to happen.  This does not mean this patch | ||||
| had no value -- it does.  It just means that those that like it get to apply it | ||||
| themselves... | ||||
|  | ||||
|  -Erik | ||||
|  | ||||
|  | ||||
| ------------------------------- | ||||
|  | ||||
| From alan@lxorguk.ukuu.org.uk  Thu Apr 13 08:07:22 2000 | ||||
| Return-Path: <alan@lxorguk.ukuu.org.uk> | ||||
| Delivered-To: andersen@dillweed.dsl.xmission.com | ||||
|   | ||||
		Reference in New Issue
	
	Block a user