[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] sparc64: boot performance improvements
From: |
Eric Snowberg |
Subject: |
[PATCH] sparc64: boot performance improvements |
Date: |
Tue, 6 Oct 2015 13:39:44 -0400 |
Keep of devices open. This can save 6 - 7 seconds per open call and
can decrease boot times from over 10 minutes to 29 seconds on
larger SPARC systems. The open/close calls with some vendors'
SAS controllers cause the entire card to be reinitialized after
each close.
Signed-off-by: Eric Snowberg <address@hidden>
---
grub-core/kern/ieee1275/ieee1275.c | 39 ++++++++++++++++++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/grub-core/kern/ieee1275/ieee1275.c
b/grub-core/kern/ieee1275/ieee1275.c
index 9821702..30f973b 100644
--- a/grub-core/kern/ieee1275/ieee1275.c
+++ b/grub-core/kern/ieee1275/ieee1275.c
@@ -19,11 +19,24 @@
#include <grub/ieee1275/ieee1275.h>
#include <grub/types.h>
+#include <grub/misc.h>
+#include <grub/list.h>
+#include <grub/mm.h>
#define IEEE1275_PHANDLE_INVALID ((grub_ieee1275_cell_t) -1)
#define IEEE1275_IHANDLE_INVALID ((grub_ieee1275_cell_t) 0)
#define IEEE1275_CELL_INVALID ((grub_ieee1275_cell_t) -1)
+struct grub_of_opened_device
+{
+ struct grub_of_opened_device *next;
+ struct grub_of_opened_device **prev;
+ grub_ieee1275_ihandle_t ihandle;
+ char *path;
+};
+
+static struct grub_of_opened_device *grub_of_opened_devices;
+
int
@@ -452,6 +465,18 @@ grub_ieee1275_open (const char *path,
grub_ieee1275_ihandle_t *result)
}
args;
+ struct grub_of_opened_device *dev;
+
+ FOR_LIST_ELEMENTS(dev, grub_of_opened_devices)
+ if (grub_strcmp(dev->path, path) == 0)
+ break;
+
+ if (dev)
+ {
+ *result = dev->ihandle;
+ return 0;
+ }
+
INIT_IEEE1275_COMMON (&args.common, "open", 1, 1);
args.path = (grub_ieee1275_cell_t) path;
@@ -460,6 +485,11 @@ grub_ieee1275_open (const char *path,
grub_ieee1275_ihandle_t *result)
*result = args.result;
if (args.result == IEEE1275_IHANDLE_INVALID)
return -1;
+
+ dev = grub_zalloc(sizeof(struct grub_of_opened_device));
+ dev->path = grub_strdup(path);
+ dev->ihandle = args.result;
+ grub_list_push(GRUB_AS_LIST_P (&grub_of_opened_devices), GRUB_AS_LIST (dev));
return 0;
}
@@ -473,6 +503,15 @@ grub_ieee1275_close (grub_ieee1275_ihandle_t ihandle)
}
args;
+ struct grub_of_opened_device *dev;
+
+ FOR_LIST_ELEMENTS(dev, grub_of_opened_devices)
+ if (dev->ihandle == ihandle)
+ break;
+
+ if (dev)
+ return 0;
+
INIT_IEEE1275_COMMON (&args.common, "close", 1, 0);
args.ihandle = ihandle;
--
1.7.1
- [PATCH] sparc64: boot performance improvements,
Eric Snowberg <=
- Re: [PATCH] sparc64: boot performance improvements, Andrei Borzenkov, 2015/10/08
- Re: [PATCH] sparc64: boot performance improvements, Eric Snowberg, 2015/10/08
- Re: [PATCH] sparc64: boot performance improvements, Andrei Borzenkov, 2015/10/09
- Re: [PATCH] sparc64: boot performance improvements, Eric Snowberg, 2015/10/09
- Re: [PATCH] sparc64: boot performance improvements, Vladimir 'phcoder' Serbinenko, 2015/10/10
- Re: [PATCH] sparc64: boot performance improvements, Eric Snowberg, 2015/10/15
- Re: [PATCH] sparc64: boot performance improvements, Vladimir 'φ-coder/phcoder' Serbinenko, 2015/10/25
- Re: [PATCH] sparc64: boot performance improvements, Eric Snowberg, 2015/10/27
- Re: [PATCH] sparc64: boot performance improvements, Vladimir 'phcoder' Serbinenko, 2015/10/28
Re: [PATCH] sparc64: boot performance improvements, Vladimir 'φ-coder/phcoder' Serbinenko, 2015/10/10