Whoops did not cc the list.  Try again.

-------- Original Message --------
Subject:        Re: [Fastboot] [PATCH]ppc64 kexec tools rm platform fix
Date:   Mon, 10 Apr 2006 14:50:00 -0700
From:   David Wilder <[EMAIL PROTECTED]>
To:     David Wilder <[EMAIL PROTECTED]>, [EMAIL PROTECTED]
References:     <[EMAIL PROTECTED]>



I lost Michael's reply on the list.
Here it is with my response..

Michael wrote:

/ -                               continue;
/>/ -                       }
/>/                         memset(fname, 0, sizeof(fname));
/>/                         strcpy(fname, device_tree);
/>/                         strcat(fname, dentry->d_name);
/>/                         strcat(fname, "/linux,htab-base");
/>/                         if ((file = fopen(fname, "r")) == NULL) {
/>/ -                               perror(fname);
/>/                                 closedir(cdir);
/>/ +                               if (errno == ENOENT) {
/>/ +                                       /* Non LPAR */
/>/ +                                       errno = 0;
/>/ +                                       continue;
/>/ +                                }
/>/ +                               perror(fname);
/>/                                 closedir(dir);
/>/                                 return -1;
/
I don't think you want to do the closedir() before the if. You certainly
don't need to do it twice?



The two closedir() calls are not closing the same thing.

David Wilder wrote:

This patch was discussed earlier on this list. (see posting by Haren Myneni <[EMAIL PROTECTED]>). In recent kernels, the platform property is removed from the /proc/device-tree.This property is used to determine whether the platform is LPAR or non-lpar, and reads htab-* and tce-* properties based on the platform. Fixed this issue such that read these properties if exists, otherwise continue instead of exiting with an error message.

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


- In recent kernels, the plaform property is removed from the 
/proc/device-tree.This property is used to determine whether the platform is 
LPAR or non-lpar, and reads htab-* and tce-* properties based on the platform. 
Fixed this issue such that read these properties if exists, otherwise continue 
instead of exiting with an error message.

Signed-off-by: David Wilder <[EMAIL PROTECTED]>
Signed-off-by: Haren Myneni <[EMAIL PROTECTED]>

--- kexec-tools-1.101/kexec/arch/ppc64/kexec-ppc64.c.orig       2006-04-08 
16:09:20.000000000 -0700
+++ kexec-tools-1.101/kexec/arch/ppc64/kexec-ppc64.c    2006-04-08 
16:23:26.000000000 -0700
@@ -34,13 +34,8 @@
#include "crashdump-ppc64.h"
#include <arch/options.h>

-/* Platforms supported by kexec on PPC64 */
-#define PLATFORM_PSERIES       0x0100
-#define PLATFORM_PSERIES_LPAR  0x0101
-
static struct exclude_range exclude_range[MAX_MEMORY_RANGES];
static unsigned long long rmo_top;
-static unsigned int platform;
static struct memory_range memory_range[MAX_MEMORY_RANGES];
static struct memory_range base_memory_range[MAX_MEMORY_RANGES];
unsigned long long memory_max = 0;
@@ -201,26 +196,6 @@ static int get_devtree_details(unsigned }

                if (strncmp(dentry->d_name, "chosen", 6) == 0) {
-                       /* get platform details from /chosen node */
-                       strcat(fname, "/linux,platform");
-                       if ((file = fopen(fname, "r")) == NULL) {
-                               perror(fname);
-                               closedir(cdir);
-                               closedir(dir);
-                               return -1;
-                       }
-                       if (fread(&platform, sizeof(int), 1, file) != 1) {
-                               perror(fname);
-                               fclose(file);
-                               closedir(cdir);
-                               closedir(dir);
-                               return -1;
-                       }
-                       fclose(file);
-
-                       memset(fname, 0, sizeof(fname));
-                       strcpy(fname, device_tree);
-                       strcat(fname, dentry->d_name);
                        strcat(fname, "/linux,kernel-end");
                        if ((file = fopen(fname, "r")) == NULL) {
                                perror(fname);
@@ -291,18 +266,18 @@ static int get_devtree_details(unsigned reserve(KDUMP_BACKUP_LIMIT, crash_base-KDUMP_BACKUP_LIMIT);
                        }

-                       /* if LPAR, no need to read any more from /chosen */
-                       if (platform != PLATFORM_PSERIES) {
-                               closedir(cdir);
-                               continue;
-                       }
                        memset(fname, 0, sizeof(fname));
                        strcpy(fname, device_tree);
                        strcat(fname, dentry->d_name);
                        strcat(fname, "/linux,htab-base");
                        if ((file = fopen(fname, "r")) == NULL) {
-                               perror(fname);
                                closedir(cdir);
+                               if (errno == ENOENT) {
+                                       /* Non LPAR */
+                                       errno = 0;
+                                       continue;
+                                }
+                               perror(fname);
                                closedir(dir);
                                return -1;
                        }
@@ -394,23 +369,23 @@ static int get_devtree_details(unsigned }
                        rmo_base = ((unsigned long long *)buf)[0];
                        rmo_top = rmo_base + ((unsigned long long *)buf)[1];
-                       if (platform == PLATFORM_PSERIES) {
-                               if (rmo_top > 0x30000000UL)
-                                       rmo_top = 0x30000000UL;
-                       }
+                       if (rmo_top > 0x30000000UL)
+                               rmo_top = 0x30000000UL;
+
                        fclose(file);
                        closedir(cdir);
                } /* memory */

                if (strncmp(dentry->d_name, "pci@", 4) == 0) {
-                       if (platform != PLATFORM_PSERIES) {
-                               closedir(cdir);
-                               continue;
-                       }
                        strcat(fname, "/linux,tce-base");
                        if ((file = fopen(fname, "r")) == NULL) {
-                               perror(fname);
                                closedir(cdir);
+                               if (errno == ENOENT) {
+                                       /* Non LPAR */
+                                       errno = 0;
+                                       continue;
+                               }
+                               perror(fname);
                                closedir(dir);
                                return -1;
                        }
------------------------------------------------------------------------

_______________________________________________
fastboot mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/fastboot


--
David Wilder
IBM Linux Technology Center
Beaverton, Oregon, USA [EMAIL PROTECTED]
(503)578-3789



--
David Wilder
IBM Linux Technology Center
Beaverton, Oregon, USA [EMAIL PROTECTED]
(503)578-3789

_______________________________________________
fastboot mailing list
[email protected]
https://lists.osdl.org/mailman/listinfo/fastboot

Reply via email to