From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: linuxppc-dev@ozlabs.org
Subject: [PATCH 02/11] powerpc/nvram: More flexible nvram_create_partition()
Date: Mon, 2 Aug 2010 10:55:13 +1000 [thread overview]
Message-ID: <1280710522-6362-3-git-send-email-benh@kernel.crashing.org> (raw)
In-Reply-To: <1280710522-6362-2-git-send-email-benh@kernel.crashing.org>
Replace nvram_create_os_partition() with a variant that takes
the partition name, signature and size as arguments.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
arch/powerpc/kernel/nvram_64.c | 46 +++++++++++++++++++------------
arch/powerpc/platforms/pseries/nvram.c | 6 ++--
2 files changed, 31 insertions(+), 21 deletions(-)
diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c
index a8154f1..974b3ec 100644
--- a/arch/powerpc/kernel/nvram_64.c
+++ b/arch/powerpc/kernel/nvram_64.c
@@ -307,13 +307,15 @@ static int __init nvram_remove_os_partition(void)
return 0;
}
-/* nvram_create_os_partition
- *
- * Create a OS linux partition to buffer error logs.
- * Will create a partition starting at the first free
- * space found if space has enough room.
+/**
+ * nvram_create_partition - Create a partition in nvram
+ * @name: name of the partition to create
+ * @sig: signature of the partition to create
+ * @req_size: size to allocate preferrably
+ * @min_size: minimum acceptable size (0 means req_size)
*/
-static int __init nvram_create_os_partition(void)
+static int __init nvram_create_partition(const char *name, int sig,
+ int req_size, int min_size)
{
struct nvram_partition *part;
struct nvram_partition *new_part;
@@ -322,20 +324,27 @@ static int __init nvram_create_os_partition(void)
loff_t tmp_index;
long size = 0;
int rc;
-
+
+ /* If no minimum size specified, make it the same as the
+ * requested size
+ */
+ if (min_size == 0)
+ min_size = req_size;
+
/* Find a free partition that will give us the maximum needed size
If can't find one that will give us the minimum size needed */
list_for_each_entry(part, &nvram_part->partition, partition) {
if (part->header.signature != NVRAM_SIG_FREE)
continue;
- if (part->header.length >= NVRAM_MAX_REQ) {
- size = NVRAM_MAX_REQ;
+ if (part->header.length >= req_size) {
+ size = req_size;
free_part = part;
break;
}
- if (!size && part->header.length >= NVRAM_MIN_REQ) {
- size = NVRAM_MIN_REQ;
+ if (part->header.length > size &&
+ part->header.length >= min_size) {
+ size = part->header.length;
free_part = part;
}
}
@@ -350,9 +359,9 @@ static int __init nvram_create_os_partition(void)
}
new_part->index = free_part->index;
- new_part->header.signature = NVRAM_SIG_OS;
+ new_part->header.signature = sig;
new_part->header.length = size;
- strcpy(new_part->header.name, "ppc64,linux");
+ strncpy(new_part->header.name, name, 12);
new_part->header.checksum = nvram_checksum(&new_part->header);
rc = nvram_write_header(new_part);
@@ -451,10 +460,10 @@ static int __init nvram_setup_partition(void)
}
/* try creating a partition with the free space we have */
- rc = nvram_create_partition("ppc64,linux", );
- if (!rc) {
+ rc = nvram_create_partition("ppc64,linux", NVRAM_SIG_OS,
+ NVRAM_MIN_REQ, NVRAM_MAX_REQ);
+ if (!rc)
return 0;
- }
/* need to free up some space */
rc = nvram_remove_os_partition();
@@ -463,9 +472,10 @@ static int __init nvram_setup_partition(void)
}
/* create a partition in this new space */
- rc = nvram_create_os_partition();
+ rc = nvram_create_partition("ppc64,linux", NVRAM_SIG_OS,
+ NVRAM_MIN_REQ, NVRAM_MAX_REQ);
if (rc) {
- printk(KERN_ERR "nvram_create_os_partition: Could not find a "
+ printk(KERN_ERR "nvram_create_partition: Could not find a "
"NVRAM partition large enough\n");
return rc;
}
diff --git a/arch/powerpc/platforms/pseries/nvram.c b/arch/powerpc/platforms/pseries/nvram.c
index f4e4c06..2a1ef5c 100644
--- a/arch/powerpc/platforms/pseries/nvram.c
+++ b/arch/powerpc/platforms/pseries/nvram.c
@@ -22,14 +22,14 @@
#include <asm/prom.h>
#include <asm/machdep.h>
+/* Max bytes to read/write in one go */
+#define NVRW_CNT 0x20
+
static unsigned int nvram_size;
static int nvram_fetch, nvram_store;
static char nvram_buf[NVRW_CNT]; /* assume this is in the first 4GB */
static DEFINE_SPINLOCK(nvram_lock);
-/* Max bytes to read/write in one go */
-#define NVRW_CNT 0x20
-
static ssize_t pSeries_nvram_read(char *buf, size_t count, loff_t *index)
{
unsigned int i;
--
1.6.3.3
next prev parent reply other threads:[~2010-08-02 0:55 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-02 0:55 [RFC] Clean up ppc64 nvram code Benjamin Herrenschmidt
2010-08-02 0:55 ` [PATCH 01/11] powerpc/nvram: Move things out of asm/nvram.h Benjamin Herrenschmidt
2010-08-02 0:55 ` Benjamin Herrenschmidt [this message]
2010-08-02 0:55 ` [PATCH 03/11] powerpc/nvram: nvram_create_partitions() now uses bytes Benjamin Herrenschmidt
2010-08-02 0:55 ` [PATCH 04/11] powerpc/nvram: Ensure that the partition header/block size is right Benjamin Herrenschmidt
2010-08-02 0:55 ` [PATCH 05/11] powerpc/nvram: Completely clear a new partition Benjamin Herrenschmidt
2010-08-02 0:55 ` [PATCH 06/11] powerpc/nvram: Shuffle code around in nvram_create_partition() Benjamin Herrenschmidt
2010-08-02 0:55 ` [PATCH 07/11] powerpc/nvram: Improve partition removal Benjamin Herrenschmidt
2010-08-02 0:55 ` [PATCH 08/11] powerpc/nvram: Add nvram_find_partition() Benjamin Herrenschmidt
2010-08-02 0:55 ` [PATCH 09/11] powerpc/nvram: Change nvram_setup_partition() to use new helper Benjamin Herrenschmidt
2010-08-02 0:55 ` [PATCH 10/11] powerpc/nvram: Move the log partition stuff to pseries Benjamin Herrenschmidt
2010-08-02 0:55 ` [PATCH 11/11] powerpc/nvram: Rename ppc64, linux partition to ibm, rtas-log Benjamin Herrenschmidt
2010-08-02 1:40 ` [PATCH 10/11] powerpc/nvram: Move the log partition stuff to pseries Benjamin Herrenschmidt
2010-08-02 3:50 ` [PATCH 05/11] powerpc/nvram: Completely clear a new partition Michael Ellerman
2010-08-02 3:47 ` [PATCH 03/11] powerpc/nvram: nvram_create_partitions() now uses bytes Michael Ellerman
2010-08-02 3:43 ` [PATCH 02/11] powerpc/nvram: More flexible nvram_create_partition() Michael Ellerman
2010-08-02 3:54 ` Benjamin Herrenschmidt
2010-08-02 7:02 ` Benjamin Herrenschmidt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1280710522-6362-3-git-send-email-benh@kernel.crashing.org \
--to=benh@kernel.crashing.org \
--cc=linuxppc-dev@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.