[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20080604182952.c536f82f.akpm@linux-foundation.org>
Date: Wed, 4 Jun 2008 18:29:52 -0700
From: Andrew Morton <akpm@...ux-foundation.org>
To: Zhao Yakui <yakui.zhao@...el.com>
Cc: Akinobu Mita <akinobu.mita@...il.com>,
linux-kernel@...r.kernel.org, Len Brown <len.brown@...el.com>,
linux-acpi@...r.kernel.org
Subject: Re: [patch -v3 16/22] acpi: use memory_read_from_buffer
On Thu, 05 Jun 2008 09:21:26 +0800 Zhao Yakui <yakui.zhao@...el.com> wrote:
> On Wed, 2008-06-04 at 20:56 +0900, Akinobu Mita wrote:
> > plain text document attachment
> > (acpi-use-memory-read-from-buffer.patch)
> > Signed-off-by: Akinobu Mita <akinobu.mita@...il.com>
> > Cc: Len Brown <len.brown@...el.com>
> > Cc: linux-acpi@...r.kernel.org
> > ---
> > drivers/acpi/system.c | 15 ++-------------
> > 1 file changed, 2 insertions(+), 13 deletions(-)
> >
> > Index: 2.6-git/drivers/acpi/system.c
> > ===================================================================
> > --- 2.6-git.orig/drivers/acpi/system.c
> > +++ 2.6-git/drivers/acpi/system.c
> > @@ -77,7 +77,6 @@ static ssize_t acpi_table_show(struct ko
> > container_of(bin_attr, struct acpi_table_attr, attr);
> > struct acpi_table_header *table_header = NULL;
> > acpi_status status;
> > - ssize_t ret_count = count;
> >
> > status =
> > acpi_get_table(table_attr->name, table_attr->instance,
> > @@ -85,18 +84,8 @@ static ssize_t acpi_table_show(struct ko
> > if (ACPI_FAILURE(status))
> > return -ENODEV;
> >
> > - if (offset >= table_header->length) {
> > - ret_count = 0;
> > - goto end;
> > - }
> > -
> > - if (offset + ret_count > table_header->length)
> > - ret_count = table_header->length - offset;
> > -
> > - memcpy(buf, ((char *)table_header) + offset, ret_count);
> > -
> > - end:
> > - return ret_count;
> > + return memory_read_from_buffer(buf, count, &offset,
> > + table_header, table_header->length);
> > }
> it seems that there is no definition of memory_read_from_buffer.
> Where is the function of memory_read_from_buffer defined?
Earlier in the patch series. (The "16/22" is a hint!)
> Is there a bug about the current function of acpi_table_show?
No, it's just a cleanup.
From: Akinobu Mita <akinobu.mita@...il.com>
This patch introduces memory_read_from_buffer().
The only difference between memory_read_from_buffer() and
simple_read_from_buffer() is which address space the function copies to.
simple_read_from_buffer copies to user space memory.
memory_read_from_buffer copies to normal memory.
Signed-off-by: Akinobu Mita <akinobu.mita@...il.com>
Cc: Al Viro <viro@...iv.linux.org.uk>
Cc: Doug Warzecha <Douglas_Warzecha@...l.com>
Cc: Zhang Rui <rui.zhang@...el.com>
Cc: Matt Domsch <Matt_Domsch@...l.com>
Cc: Abhay Salunke <Abhay_Salunke@...l.com>
Cc: Greg Kroah-Hartman <gregkh@...e.de>
Cc: Markus Rechberger <markus.rechberger@....com>
Cc: Kay Sievers <kay.sievers@...y.org>
Cc: Bob Moore <robert.moore@...el.com>
Cc: Thomas Renninger <trenn@...e.de>
Cc: Len Brown <lenb@...nel.org>
Cc: Benjamin Herrenschmidt <benh@...nel.crashing.org>
Cc: "Antonino A. Daplas" <adaplas@....net>
Cc: Krzysztof Helt <krzysztof.h1@...zta.fm>
Cc: Geert Uytterhoeven <geert@...ux-m68k.org>
Cc: Martin Schwidefsky <schwidefsky@...ibm.com>
Cc: Heiko Carstens <heiko.carstens@...ibm.com>
Cc: Peter Oberparleiter <peter.oberparleiter@...ibm.com>
Cc: Michael Holzheu <holzheu@...ibm.com>
Cc: Brian King <brking@...ibm.com>
Cc: James E.J. Bottomley <James.Bottomley@...senPartnership.com>
Cc: Andrew Vasquez <linux-driver@...gic.com>
Cc: Seokmann Ju <seokmann.ju@...gic.com>
Signed-off-by: Andrew Morton <akpm@...ux-foundation.org>
---
fs/libfs.c | 18 ++++++++++++++++++
include/linux/fs.h | 5 ++++-
2 files changed, 22 insertions(+), 1 deletion(-)
diff -puN fs/libfs.c~introduce-memory_read_from_buffer fs/libfs.c
--- a/fs/libfs.c~introduce-memory_read_from_buffer
+++ a/fs/libfs.c
@@ -528,6 +528,23 @@ ssize_t simple_read_from_buffer(void __u
return count;
}
+ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
+ const void *from, size_t available)
+{
+ loff_t pos = *ppos;
+
+ if (pos < 0)
+ return -EINVAL;
+ if (pos >= available)
+ return 0;
+ if (count > available - pos)
+ count = available - pos;
+ memcpy(to, from + pos, count);
+ *ppos = pos + count;
+
+ return count;
+}
+
/*
* Transaction based IO.
* The file expects a single write which triggers the transaction, and then
@@ -800,6 +817,7 @@ EXPORT_SYMBOL(simple_statfs);
EXPORT_SYMBOL(simple_sync_file);
EXPORT_SYMBOL(simple_unlink);
EXPORT_SYMBOL(simple_read_from_buffer);
+EXPORT_SYMBOL(memory_read_from_buffer);
EXPORT_SYMBOL(simple_transaction_get);
EXPORT_SYMBOL(simple_transaction_read);
EXPORT_SYMBOL(simple_transaction_release);
diff -puN include/linux/fs.h~introduce-memory_read_from_buffer include/linux/fs.h
--- a/include/linux/fs.h~introduce-memory_read_from_buffer
+++ a/include/linux/fs.h
@@ -2025,7 +2025,10 @@ extern int simple_fill_super(struct supe
extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count);
extern void simple_release_fs(struct vfsmount **mount, int *count);
-extern ssize_t simple_read_from_buffer(void __user *, size_t, loff_t *, const void *, size_t);
+extern ssize_t simple_read_from_buffer(void __user *to, size_t count,
+ loff_t *ppos, const void *from, size_t available);
+extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
+ const void *from, size_t available);
#ifdef CONFIG_MIGRATION
extern int buffer_migrate_page(struct address_space *,
_
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists