All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sparc64: boot performance improvements
@ 2015-10-06 17:39 Eric Snowberg
  2015-10-07  8:36 ` Andrei Borzenkov
  2015-10-09 12:54 ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 2 replies; 11+ messages in thread
From: Eric Snowberg @ 2015-10-06 17:39 UTC (permalink / raw)
  To: grub-devel; +Cc: Eric Snowberg

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 <eric.snowberg@oracle.com>
---
 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;
+
 \f
 
 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



^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-10-28 10:29 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-06 17:39 [PATCH] sparc64: boot performance improvements Eric Snowberg
2015-10-07  8:36 ` Andrei Borzenkov
2015-10-07 23:20   ` Eric Snowberg
2015-10-09  6:50     ` Andrei Borzenkov
2015-10-10  1:31       ` Eric Snowberg
2015-10-10  7:35         ` Vladimir 'phcoder' Serbinenko
2015-10-11 16:49           ` Eric Snowberg
2015-10-25 15:20             ` Vladimir 'φ-coder/phcoder' Serbinenko
2015-10-27 16:34               ` Eric Snowberg
2015-10-28 10:28                 ` Vladimir 'phcoder' Serbinenko
2015-10-09 12:54 ` Vladimir 'φ-coder/phcoder' Serbinenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.