Re: [PATCH 2/3 -mm] kexec jump -v8 : add write support to oldmem device

2007-12-21 Thread huang ying
On Dec 21, 2007 6:17 PM, Pavel Machek <[EMAIL PROTECTED]> wrote:
> Hi!
>
> > This patch adds writing support for /dev/oldmem. This can be used to
> >
> > - Communicate between original kernel and kexeced kernel through write
> >   to some pages in original kernel.
> >
> > - Restore the memory contents of hibernated system in kexec based
> >   hibernation.
> >
> > Signed-off-by: Huang Ying <[EMAIL PROTECTED]>
> >
> > --- a/arch/x86/kernel/crash_dump_32.c
> > +++ b/arch/x86/kernel/crash_dump_32.c
> > +ssize_t write_oldmem_page(unsigned long pfn, const char *buf,
> > +   size_t csize, unsigned long offset, int
> > userbuf)
>
> > --- a/drivers/char/mem.c
> > +++ b/drivers/char/mem.c
> > @@ -348,6 +348,37 @@ static ssize_t read_oldmem(struct file *
> >   }
> >   return read;
> >  }
> > +
> > +/*
> > + * Write memory corresponding to the old kernel.
> > + */
> > +static ssize_t write_oldmem(struct file *file, const char __user *buf,
> > + size_t count, loff_t *ppos)
> > +{
> ...
> > + rc = write_oldmem_page(pfn, buf, csize, offset, 1);
>
> I believe this is going to break compilation on non-32bit
> machines.

Yes, I will fix this.

Best Regards,
Huang Ying
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/3 -mm] kexec jump -v8 : add write support to oldmem device

2007-12-21 Thread Bernhard Walle
* Pavel Machek <[EMAIL PROTECTED]> [2007-12-21 11:17]:
> Or is crashdump only supported on i386?

No.


Thanks,
   Bernhard
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/3 -mm] kexec jump -v8 : add write support to oldmem device

2007-12-21 Thread Pavel Machek
Hi!

> This patch adds writing support for /dev/oldmem. This can be used to
> 
> - Communicate between original kernel and kexeced kernel through write
>   to some pages in original kernel.
> 
> - Restore the memory contents of hibernated system in kexec based
>   hibernation.
> 
> Signed-off-by: Huang Ying <[EMAIL PROTECTED]>
> 
> --- a/arch/x86/kernel/crash_dump_32.c
> +++ b/arch/x86/kernel/crash_dump_32.c
> +ssize_t write_oldmem_page(unsigned long pfn, const char *buf,
> +   size_t csize, unsigned long offset, int
> userbuf)

> --- a/drivers/char/mem.c
> +++ b/drivers/char/mem.c
> @@ -348,6 +348,37 @@ static ssize_t read_oldmem(struct file *
>   }
>   return read;
>  }
> +
> +/*
> + * Write memory corresponding to the old kernel.
> + */
> +static ssize_t write_oldmem(struct file *file, const char __user *buf,
> + size_t count, loff_t *ppos)
> +{
...
> + rc = write_oldmem_page(pfn, buf, csize, offset, 1);

I believe this is going to break compilation on non-32bit
machines. Or is crashdump only supported on i386?
Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/3 -mm] kexec jump -v8 : add write support to oldmem device

2007-12-21 Thread Pavel Machek
Hi!

 This patch adds writing support for /dev/oldmem. This can be used to
 
 - Communicate between original kernel and kexeced kernel through write
   to some pages in original kernel.
 
 - Restore the memory contents of hibernated system in kexec based
   hibernation.
 
 Signed-off-by: Huang Ying [EMAIL PROTECTED]
 
 --- a/arch/x86/kernel/crash_dump_32.c
 +++ b/arch/x86/kernel/crash_dump_32.c
 +ssize_t write_oldmem_page(unsigned long pfn, const char *buf,
 +   size_t csize, unsigned long offset, int
 userbuf)

 --- a/drivers/char/mem.c
 +++ b/drivers/char/mem.c
 @@ -348,6 +348,37 @@ static ssize_t read_oldmem(struct file *
   }
   return read;
  }
 +
 +/*
 + * Write memory corresponding to the old kernel.
 + */
 +static ssize_t write_oldmem(struct file *file, const char __user *buf,
 + size_t count, loff_t *ppos)
 +{
...
 + rc = write_oldmem_page(pfn, buf, csize, offset, 1);

I believe this is going to break compilation on non-32bit
machines. Or is crashdump only supported on i386?
Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/3 -mm] kexec jump -v8 : add write support to oldmem device

2007-12-21 Thread Bernhard Walle
* Pavel Machek [EMAIL PROTECTED] [2007-12-21 11:17]:
 Or is crashdump only supported on i386?

No.


Thanks,
   Bernhard
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/3 -mm] kexec jump -v8 : add write support to oldmem device

2007-12-21 Thread huang ying
On Dec 21, 2007 6:17 PM, Pavel Machek [EMAIL PROTECTED] wrote:
 Hi!

  This patch adds writing support for /dev/oldmem. This can be used to
 
  - Communicate between original kernel and kexeced kernel through write
to some pages in original kernel.
 
  - Restore the memory contents of hibernated system in kexec based
hibernation.
 
  Signed-off-by: Huang Ying [EMAIL PROTECTED]
 
  --- a/arch/x86/kernel/crash_dump_32.c
  +++ b/arch/x86/kernel/crash_dump_32.c
  +ssize_t write_oldmem_page(unsigned long pfn, const char *buf,
  +   size_t csize, unsigned long offset, int
  userbuf)

  --- a/drivers/char/mem.c
  +++ b/drivers/char/mem.c
  @@ -348,6 +348,37 @@ static ssize_t read_oldmem(struct file *
}
return read;
   }
  +
  +/*
  + * Write memory corresponding to the old kernel.
  + */
  +static ssize_t write_oldmem(struct file *file, const char __user *buf,
  + size_t count, loff_t *ppos)
  +{
 ...
  + rc = write_oldmem_page(pfn, buf, csize, offset, 1);

 I believe this is going to break compilation on non-32bit
 machines.

Yes, I will fix this.

Best Regards,
Huang Ying
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/3 -mm] kexec jump -v8 : add write support to oldmem device

2007-12-20 Thread Huang, Ying
This patch adds writing support for /dev/oldmem. This can be used to

- Communicate between original kernel and kexeced kernel through write
  to some pages in original kernel.

- Restore the memory contents of hibernated system in kexec based
  hibernation.

Signed-off-by: Huang Ying <[EMAIL PROTECTED]>

---
 arch/x86/kernel/crash_dump_32.c |   27 +++
 drivers/char/mem.c  |   32 
 include/linux/crash_dump.h  |2 ++
 3 files changed, 61 insertions(+)

--- a/arch/x86/kernel/crash_dump_32.c
+++ b/arch/x86/kernel/crash_dump_32.c
@@ -59,6 +59,33 @@ ssize_t copy_oldmem_page(unsigned long p
return csize;
 }
 
+ssize_t write_oldmem_page(unsigned long pfn, const char *buf,
+ size_t csize, unsigned long offset, int userbuf)
+{
+   void  *vaddr;
+
+   if (!csize)
+   return 0;
+
+   if (!userbuf) {
+   vaddr = kmap_atomic_pfn(pfn, KM_PTE0);
+   memcpy(vaddr + offset, buf, csize);
+   } else {
+   if (!kdump_buf_page) {
+   printk(KERN_WARNING "Kdump: Kdump buffer page not"
+   " allocated\n");
+   return -EFAULT;
+   }
+   if (copy_from_user(kdump_buf_page, buf, csize))
+   return -EFAULT;
+   vaddr = kmap_atomic_pfn(pfn, KM_PTE0);
+   memcpy(vaddr + offset, kdump_buf_page, csize);
+   }
+   kunmap_atomic(vaddr, KM_PTE0);
+
+   return csize;
+}
+
 static int __init kdump_buf_page_init(void)
 {
int ret = 0;
--- a/include/linux/crash_dump.h
+++ b/include/linux/crash_dump.h
@@ -11,6 +11,8 @@
 extern unsigned long long elfcorehdr_addr;
 extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
unsigned long, int);
+extern ssize_t write_oldmem_page(unsigned long, const char *, size_t,
+unsigned long, int);
 extern const struct file_operations proc_vmcore_operations;
 extern struct proc_dir_entry *proc_vmcore;
 
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -348,6 +348,37 @@ static ssize_t read_oldmem(struct file *
}
return read;
 }
+
+/*
+ * Write memory corresponding to the old kernel.
+ */
+static ssize_t write_oldmem(struct file *file, const char __user *buf,
+   size_t count, loff_t *ppos)
+{
+   unsigned long pfn, offset;
+   size_t write = 0, csize;
+   int rc = 0;
+
+   while (count) {
+   pfn = *ppos / PAGE_SIZE;
+   if (pfn > saved_max_pfn)
+   return write;
+
+   offset = (unsigned long)(*ppos % PAGE_SIZE);
+   if (count > PAGE_SIZE - offset)
+   csize = PAGE_SIZE - offset;
+   else
+   csize = count;
+   rc = write_oldmem_page(pfn, buf, csize, offset, 1);
+   if (rc < 0)
+   return rc;
+   buf += csize;
+   *ppos += csize;
+   write += csize;
+   count -= csize;
+   }
+   return write;
+}
 #endif
 
 extern long vread(char *buf, char *addr, unsigned long count);
@@ -783,6 +814,7 @@ static const struct file_operations full
 #ifdef CONFIG_CRASH_DUMP
 static const struct file_operations oldmem_fops = {
.read   = read_oldmem,
+   .write  = write_oldmem,
.open   = open_oldmem,
 };
 #endif

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/3 -mm] kexec jump -v8 : add write support to oldmem device

2007-12-20 Thread Huang, Ying
This patch adds writing support for /dev/oldmem. This can be used to

- Communicate between original kernel and kexeced kernel through write
  to some pages in original kernel.

- Restore the memory contents of hibernated system in kexec based
  hibernation.

Signed-off-by: Huang Ying [EMAIL PROTECTED]

---
 arch/x86/kernel/crash_dump_32.c |   27 +++
 drivers/char/mem.c  |   32 
 include/linux/crash_dump.h  |2 ++
 3 files changed, 61 insertions(+)

--- a/arch/x86/kernel/crash_dump_32.c
+++ b/arch/x86/kernel/crash_dump_32.c
@@ -59,6 +59,33 @@ ssize_t copy_oldmem_page(unsigned long p
return csize;
 }
 
+ssize_t write_oldmem_page(unsigned long pfn, const char *buf,
+ size_t csize, unsigned long offset, int userbuf)
+{
+   void  *vaddr;
+
+   if (!csize)
+   return 0;
+
+   if (!userbuf) {
+   vaddr = kmap_atomic_pfn(pfn, KM_PTE0);
+   memcpy(vaddr + offset, buf, csize);
+   } else {
+   if (!kdump_buf_page) {
+   printk(KERN_WARNING Kdump: Kdump buffer page not
+allocated\n);
+   return -EFAULT;
+   }
+   if (copy_from_user(kdump_buf_page, buf, csize))
+   return -EFAULT;
+   vaddr = kmap_atomic_pfn(pfn, KM_PTE0);
+   memcpy(vaddr + offset, kdump_buf_page, csize);
+   }
+   kunmap_atomic(vaddr, KM_PTE0);
+
+   return csize;
+}
+
 static int __init kdump_buf_page_init(void)
 {
int ret = 0;
--- a/include/linux/crash_dump.h
+++ b/include/linux/crash_dump.h
@@ -11,6 +11,8 @@
 extern unsigned long long elfcorehdr_addr;
 extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
unsigned long, int);
+extern ssize_t write_oldmem_page(unsigned long, const char *, size_t,
+unsigned long, int);
 extern const struct file_operations proc_vmcore_operations;
 extern struct proc_dir_entry *proc_vmcore;
 
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -348,6 +348,37 @@ static ssize_t read_oldmem(struct file *
}
return read;
 }
+
+/*
+ * Write memory corresponding to the old kernel.
+ */
+static ssize_t write_oldmem(struct file *file, const char __user *buf,
+   size_t count, loff_t *ppos)
+{
+   unsigned long pfn, offset;
+   size_t write = 0, csize;
+   int rc = 0;
+
+   while (count) {
+   pfn = *ppos / PAGE_SIZE;
+   if (pfn  saved_max_pfn)
+   return write;
+
+   offset = (unsigned long)(*ppos % PAGE_SIZE);
+   if (count  PAGE_SIZE - offset)
+   csize = PAGE_SIZE - offset;
+   else
+   csize = count;
+   rc = write_oldmem_page(pfn, buf, csize, offset, 1);
+   if (rc  0)
+   return rc;
+   buf += csize;
+   *ppos += csize;
+   write += csize;
+   count -= csize;
+   }
+   return write;
+}
 #endif
 
 extern long vread(char *buf, char *addr, unsigned long count);
@@ -783,6 +814,7 @@ static const struct file_operations full
 #ifdef CONFIG_CRASH_DUMP
 static const struct file_operations oldmem_fops = {
.read   = read_oldmem,
+   .write  = write_oldmem,
.open   = open_oldmem,
 };
 #endif

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/