LKML Archive mirror
 help / color / mirror / Atom feed
* Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space
       [not found] <CAF1_xX2=BYkEn3ycM4smREqk-ioGbvu8Ea4or22U-jBdKmDKGA@mail.gmail.com>
@ 2013-09-28 18:18 ` Ronald
  2013-09-29  1:16   ` Rafael J. Wysocki
  0 siblings, 1 reply; 9+ messages in thread
From: Ronald @ 2013-09-28 18:18 UTC (permalink / raw
  To: linux-kernel, rafael.j.wysocki

[ resend, forgot to disable HTML (sorry!) ]

Dear kernel developers,

Commit 8fd37a4c9 (PM / hibernate: Create memory bitmaps after freezing
user space) causes resume to fail.

Only, when using the s2disk utility (through pm-hibernate).

Not when I do:

echo -n "disk" > /sys/power/state

Reverting the commit did not work.

I am using a encrypted LUKS partition with a temporary key that is
functioning as the swap device used for the suspend image.

Awaiting further orders....

                                        Ronald

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

* Re: Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space
  2013-09-28 18:18 ` Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space Ronald
@ 2013-09-29  1:16   ` Rafael J. Wysocki
  2013-09-29  7:22     ` Ronald
  0 siblings, 1 reply; 9+ messages in thread
From: Rafael J. Wysocki @ 2013-09-29  1:16 UTC (permalink / raw
  To: Ronald; +Cc: linux-kernel, Linux PM list

On Saturday, September 28, 2013 08:18:18 PM Ronald wrote:
> [ resend, forgot to disable HTML (sorry!) ]
> 
> Dear kernel developers,
> 
> Commit 8fd37a4c9 (PM / hibernate: Create memory bitmaps after freezing
> user space) causes resume to fail.
> 
> Only, when using the s2disk utility (through pm-hibernate).
> 
> Not when I do:
> 
> echo -n "disk" > /sys/power/state
> 
> Reverting the commit did not work.
> 
> I am using a encrypted LUKS partition with a temporary key that is
> functioning as the swap device used for the suspend image.
> 
> Awaiting further orders....

I'm traveling now, so I can't really test things, but I think I know what the
problem is.

Can you please check if the appended patch makes any difference for you?

Rafael


---
 kernel/power/snapshot.c |    5 ++++-
 kernel/power/user.c     |    5 +++++
 2 files changed, 9 insertions(+), 1 deletion(-)

Index: linux-pm/kernel/power/snapshot.c
===================================================================
--- linux-pm.orig/kernel/power/snapshot.c
+++ linux-pm/kernel/power/snapshot.c
@@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void)
 	struct memory_bitmap *bm1, *bm2;
 	int error = 0;
 
-	BUG_ON(forbidden_pages_map || free_pages_map);
+	if (forbidden_pages_map && free_pages_map)
+		return 0;
+	else
+		BUG_ON(forbidden_pages_map || free_pages_map);
 
 	bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
 	if (!bm1)
Index: linux-pm/kernel/power/user.c
===================================================================
--- linux-pm.orig/kernel/power/user.c
+++ linux-pm/kernel/power/user.c
@@ -82,6 +82,9 @@ static int snapshot_open(struct inode *i
 		data->swap = -1;
 		data->mode = O_WRONLY;
 		error = pm_notifier_call_chain(PM_RESTORE_PREPARE);
+		if (!error)
+			error = create_basic_memory_bitmaps();
+
 		if (error)
 			pm_notifier_call_chain(PM_POST_RESTORE);
 	}


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

* Re: Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space
  2013-09-29  1:16   ` Rafael J. Wysocki
@ 2013-09-29  7:22     ` Ronald
  2013-09-30  0:12       ` Rafael J. Wysocki
  0 siblings, 1 reply; 9+ messages in thread
From: Ronald @ 2013-09-29  7:22 UTC (permalink / raw
  To: Rafael J. Wysocki; +Cc: linux-kernel, Linux PM list

Attached patch fixes the issue. Both methods function as they did
before. Thanks for the superfast fix!

2013/9/29 Rafael J. Wysocki <rjw@rjwysocki.net>:
> On Saturday, September 28, 2013 08:18:18 PM Ronald wrote:
>> [ resend, forgot to disable HTML (sorry!) ]
>>
>> Dear kernel developers,
>>
>> Commit 8fd37a4c9 (PM / hibernate: Create memory bitmaps after freezing
>> user space) causes resume to fail.
>>
>> Only, when using the s2disk utility (through pm-hibernate).
>>
>> Not when I do:
>>
>> echo -n "disk" > /sys/power/state
>>
>> Reverting the commit did not work.
>>
>> I am using a encrypted LUKS partition with a temporary key that is
>> functioning as the swap device used for the suspend image.
>>
>> Awaiting further orders....
>
> I'm traveling now, so I can't really test things, but I think I know what the
> problem is.
>
> Can you please check if the appended patch makes any difference for you?
>
> Rafael
>
>
> ---
>  kernel/power/snapshot.c |    5 ++++-
>  kernel/power/user.c     |    5 +++++
>  2 files changed, 9 insertions(+), 1 deletion(-)
>
> Index: linux-pm/kernel/power/snapshot.c
> ===================================================================
> --- linux-pm.orig/kernel/power/snapshot.c
> +++ linux-pm/kernel/power/snapshot.c
> @@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void)
>         struct memory_bitmap *bm1, *bm2;
>         int error = 0;
>
> -       BUG_ON(forbidden_pages_map || free_pages_map);
> +       if (forbidden_pages_map && free_pages_map)
> +               return 0;
> +       else
> +               BUG_ON(forbidden_pages_map || free_pages_map);
>
>         bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
>         if (!bm1)
> Index: linux-pm/kernel/power/user.c
> ===================================================================
> --- linux-pm.orig/kernel/power/user.c
> +++ linux-pm/kernel/power/user.c
> @@ -82,6 +82,9 @@ static int snapshot_open(struct inode *i
>                 data->swap = -1;
>                 data->mode = O_WRONLY;
>                 error = pm_notifier_call_chain(PM_RESTORE_PREPARE);
> +               if (!error)
> +                       error = create_basic_memory_bitmaps();
> +
>                 if (error)
>                         pm_notifier_call_chain(PM_POST_RESTORE);
>         }
>

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

* Re: Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space
  2013-09-29  7:22     ` Ronald
@ 2013-09-30  0:12       ` Rafael J. Wysocki
  2013-09-30  5:45         ` Ronald
  0 siblings, 1 reply; 9+ messages in thread
From: Rafael J. Wysocki @ 2013-09-30  0:12 UTC (permalink / raw
  To: Ronald; +Cc: linux-kernel, Linux PM list

On Sunday, September 29, 2013 09:22:45 AM Ronald wrote:
> Attached patch fixes the issue. Both methods function as they did
> before. Thanks for the superfast fix!

You're welcome, it's not the final one, however.

Can you please test the one below and report back?

Rafael


---
 kernel/power/snapshot.c |    5 ++++-
 kernel/power/user.c     |    8 ++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

Index: linux-pm/kernel/power/snapshot.c
===================================================================
--- linux-pm.orig/kernel/power/snapshot.c
+++ linux-pm/kernel/power/snapshot.c
@@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void)
 	struct memory_bitmap *bm1, *bm2;
 	int error = 0;
 
-	BUG_ON(forbidden_pages_map || free_pages_map);
+	if (forbidden_pages_map && free_pages_map)
+		return 0;
+	else
+		BUG_ON(forbidden_pages_map || free_pages_map);
 
 	bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
 	if (!bm1)
Index: linux-pm/kernel/power/user.c
===================================================================
--- linux-pm.orig/kernel/power/user.c
+++ linux-pm/kernel/power/user.c
@@ -39,6 +39,7 @@ static struct snapshot_data {
 	char frozen;
 	char ready;
 	char platform_support;
+	bool free_bitmaps;
 } snapshot_state;
 
 atomic_t snapshot_device_available = ATOMIC_INIT(1);
@@ -82,6 +83,10 @@ static int snapshot_open(struct inode *i
 		data->swap = -1;
 		data->mode = O_WRONLY;
 		error = pm_notifier_call_chain(PM_RESTORE_PREPARE);
+		if (!error) {
+			error = create_basic_memory_bitmaps();
+			data->free_bitmaps = !error;
+		}
 		if (error)
 			pm_notifier_call_chain(PM_POST_RESTORE);
 	}
@@ -111,6 +116,8 @@ static int snapshot_release(struct inode
 		pm_restore_gfp_mask();
 		free_basic_memory_bitmaps();
 		thaw_processes();
+	} else if (data->free_bitmaps) {
+		free_basic_memory_bitmaps();
 	}
 	pm_notifier_call_chain(data->mode == O_RDONLY ?
 			PM_POST_HIBERNATION : PM_POST_RESTORE);
@@ -231,6 +238,7 @@ static long snapshot_ioctl(struct file *
 			break;
 		pm_restore_gfp_mask();
 		free_basic_memory_bitmaps();
+		data->free_bitmaps = false;
 		thaw_processes();
 		data->frozen = 0;
 		break;


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

* Re: Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space
  2013-09-30  0:12       ` Rafael J. Wysocki
@ 2013-09-30  5:45         ` Ronald
  2013-09-30 17:15           ` Rafael J. Wysocki
  0 siblings, 1 reply; 9+ messages in thread
From: Ronald @ 2013-09-30  5:45 UTC (permalink / raw
  To: Rafael J. Wysocki; +Cc: linux-kernel, Linux PM list

Yes, works as well. Just survived twe cycles with s2disk. I'm
surprised someone else did not report this earlier btw... Because it
looks pretty generic (i.e. not specific to a 64bit UP system).

Thanks again!

2013/9/30 Rafael J. Wysocki <rjw@rjwysocki.net>:
> On Sunday, September 29, 2013 09:22:45 AM Ronald wrote:
>> Attached patch fixes the issue. Both methods function as they did
>> before. Thanks for the superfast fix!
>
> You're welcome, it's not the final one, however.
>
> Can you please test the one below and report back?
>
> Rafael
>
>
> ---
>  kernel/power/snapshot.c |    5 ++++-
>  kernel/power/user.c     |    8 ++++++++
>  2 files changed, 12 insertions(+), 1 deletion(-)
>
> Index: linux-pm/kernel/power/snapshot.c
> ===================================================================
> --- linux-pm.orig/kernel/power/snapshot.c
> +++ linux-pm/kernel/power/snapshot.c
> @@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void)
>         struct memory_bitmap *bm1, *bm2;
>         int error = 0;
>
> -       BUG_ON(forbidden_pages_map || free_pages_map);
> +       if (forbidden_pages_map && free_pages_map)
> +               return 0;
> +       else
> +               BUG_ON(forbidden_pages_map || free_pages_map);
>
>         bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
>         if (!bm1)
> Index: linux-pm/kernel/power/user.c
> ===================================================================
> --- linux-pm.orig/kernel/power/user.c
> +++ linux-pm/kernel/power/user.c
> @@ -39,6 +39,7 @@ static struct snapshot_data {
>         char frozen;
>         char ready;
>         char platform_support;
> +       bool free_bitmaps;
>  } snapshot_state;
>
>  atomic_t snapshot_device_available = ATOMIC_INIT(1);
> @@ -82,6 +83,10 @@ static int snapshot_open(struct inode *i
>                 data->swap = -1;
>                 data->mode = O_WRONLY;
>                 error = pm_notifier_call_chain(PM_RESTORE_PREPARE);
> +               if (!error) {
> +                       error = create_basic_memory_bitmaps();
> +                       data->free_bitmaps = !error;
> +               }
>                 if (error)
>                         pm_notifier_call_chain(PM_POST_RESTORE);
>         }
> @@ -111,6 +116,8 @@ static int snapshot_release(struct inode
>                 pm_restore_gfp_mask();
>                 free_basic_memory_bitmaps();
>                 thaw_processes();
> +       } else if (data->free_bitmaps) {
> +               free_basic_memory_bitmaps();
>         }
>         pm_notifier_call_chain(data->mode == O_RDONLY ?
>                         PM_POST_HIBERNATION : PM_POST_RESTORE);
> @@ -231,6 +238,7 @@ static long snapshot_ioctl(struct file *
>                         break;
>                 pm_restore_gfp_mask();
>                 free_basic_memory_bitmaps();
> +               data->free_bitmaps = false;
>                 thaw_processes();
>                 data->frozen = 0;
>                 break;
>

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

* Re: Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space
  2013-09-30  5:45         ` Ronald
@ 2013-09-30 17:15           ` Rafael J. Wysocki
  2013-09-30 17:37             ` [PATCH] PM / hibernate: Fix user space driven resume regression Rafael J. Wysocki
  2013-10-01 16:38             ` Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space Ronald
  0 siblings, 2 replies; 9+ messages in thread
From: Rafael J. Wysocki @ 2013-09-30 17:15 UTC (permalink / raw
  To: Ronald; +Cc: linux-kernel, Linux PM list

On Monday, September 30, 2013 07:45:54 AM Ronald wrote:
> Yes, works as well. Just survived twe cycles with s2disk. I'm
> surprised someone else did not report this earlier btw... Because it
> looks pretty generic (i.e. not specific to a 64bit UP system).

It is a generic bug, actually.  Well, this means the user space driven
hibernation doesn't receive much testing coverage these days ...

I'll resend the patch with a proper changelog and then push it for v3.12-rc4.

Thanks,
Rafael


> 2013/9/30 Rafael J. Wysocki <rjw@rjwysocki.net>:
> > On Sunday, September 29, 2013 09:22:45 AM Ronald wrote:
> >> Attached patch fixes the issue. Both methods function as they did
> >> before. Thanks for the superfast fix!
> >
> > You're welcome, it's not the final one, however.
> >
> > Can you please test the one below and report back?
> >
> > Rafael
> >
> >
> > ---
> >  kernel/power/snapshot.c |    5 ++++-
> >  kernel/power/user.c     |    8 ++++++++
> >  2 files changed, 12 insertions(+), 1 deletion(-)
> >
> > Index: linux-pm/kernel/power/snapshot.c
> > ===================================================================
> > --- linux-pm.orig/kernel/power/snapshot.c
> > +++ linux-pm/kernel/power/snapshot.c
> > @@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void)
> >         struct memory_bitmap *bm1, *bm2;
> >         int error = 0;
> >
> > -       BUG_ON(forbidden_pages_map || free_pages_map);
> > +       if (forbidden_pages_map && free_pages_map)
> > +               return 0;
> > +       else
> > +               BUG_ON(forbidden_pages_map || free_pages_map);
> >
> >         bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
> >         if (!bm1)
> > Index: linux-pm/kernel/power/user.c
> > ===================================================================
> > --- linux-pm.orig/kernel/power/user.c
> > +++ linux-pm/kernel/power/user.c
> > @@ -39,6 +39,7 @@ static struct snapshot_data {
> >         char frozen;
> >         char ready;
> >         char platform_support;
> > +       bool free_bitmaps;
> >  } snapshot_state;
> >
> >  atomic_t snapshot_device_available = ATOMIC_INIT(1);
> > @@ -82,6 +83,10 @@ static int snapshot_open(struct inode *i
> >                 data->swap = -1;
> >                 data->mode = O_WRONLY;
> >                 error = pm_notifier_call_chain(PM_RESTORE_PREPARE);
> > +               if (!error) {
> > +                       error = create_basic_memory_bitmaps();
> > +                       data->free_bitmaps = !error;
> > +               }
> >                 if (error)
> >                         pm_notifier_call_chain(PM_POST_RESTORE);
> >         }
> > @@ -111,6 +116,8 @@ static int snapshot_release(struct inode
> >                 pm_restore_gfp_mask();
> >                 free_basic_memory_bitmaps();
> >                 thaw_processes();
> > +       } else if (data->free_bitmaps) {
> > +               free_basic_memory_bitmaps();
> >         }
> >         pm_notifier_call_chain(data->mode == O_RDONLY ?
> >                         PM_POST_HIBERNATION : PM_POST_RESTORE);
> > @@ -231,6 +238,7 @@ static long snapshot_ioctl(struct file *
> >                         break;
> >                 pm_restore_gfp_mask();
> >                 free_basic_memory_bitmaps();
> > +               data->free_bitmaps = false;
> >                 thaw_processes();
> >                 data->frozen = 0;
> >                 break;
> >
-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

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

* [PATCH] PM / hibernate: Fix user space driven resume regression
  2013-09-30 17:15           ` Rafael J. Wysocki
@ 2013-09-30 17:37             ` Rafael J. Wysocki
  2013-10-01 16:38             ` Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space Ronald
  1 sibling, 0 replies; 9+ messages in thread
From: Rafael J. Wysocki @ 2013-09-30 17:37 UTC (permalink / raw
  To: Linux PM list; +Cc: Ronald, linux-kernel

From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Recent commit 8fd37a4 (PM / hibernate: Create memory bitmaps after
freezing user space) broke the resume part of the user space driven
hibernation (s2disk), because I forgot that the resume utility
loaded the image into memory without freezing user space (it still
freezes tasks after loading the image).  This means that during user
space driven resume we need to create the memory bitmaps at the
"device open" time rather than at the "freeze tasks" time, so make
that happen (that's a special case anyway, so it needs to be treated
in a special way).

Reported-and-tested-by: Ronald <ronald645@gmail.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 kernel/power/snapshot.c |    5 ++++-
 kernel/power/user.c     |    8 ++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

Index: linux-pm/kernel/power/snapshot.c
===================================================================
--- linux-pm.orig/kernel/power/snapshot.c
+++ linux-pm/kernel/power/snapshot.c
@@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void)
 	struct memory_bitmap *bm1, *bm2;
 	int error = 0;
 
-	BUG_ON(forbidden_pages_map || free_pages_map);
+	if (forbidden_pages_map && free_pages_map)
+		return 0;
+	else
+		BUG_ON(forbidden_pages_map || free_pages_map);
 
 	bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
 	if (!bm1)
Index: linux-pm/kernel/power/user.c
===================================================================
--- linux-pm.orig/kernel/power/user.c
+++ linux-pm/kernel/power/user.c
@@ -39,6 +39,7 @@ static struct snapshot_data {
 	char frozen;
 	char ready;
 	char platform_support;
+	bool free_bitmaps;
 } snapshot_state;
 
 atomic_t snapshot_device_available = ATOMIC_INIT(1);
@@ -82,6 +83,10 @@ static int snapshot_open(struct inode *i
 		data->swap = -1;
 		data->mode = O_WRONLY;
 		error = pm_notifier_call_chain(PM_RESTORE_PREPARE);
+		if (!error) {
+			error = create_basic_memory_bitmaps();
+			data->free_bitmaps = !error;
+		}
 		if (error)
 			pm_notifier_call_chain(PM_POST_RESTORE);
 	}
@@ -111,6 +116,8 @@ static int snapshot_release(struct inode
 		pm_restore_gfp_mask();
 		free_basic_memory_bitmaps();
 		thaw_processes();
+	} else if (data->free_bitmaps) {
+		free_basic_memory_bitmaps();
 	}
 	pm_notifier_call_chain(data->mode == O_RDONLY ?
 			PM_POST_HIBERNATION : PM_POST_RESTORE);
@@ -231,6 +238,7 @@ static long snapshot_ioctl(struct file *
 			break;
 		pm_restore_gfp_mask();
 		free_basic_memory_bitmaps();
+		data->free_bitmaps = false;
 		thaw_processes();
 		data->frozen = 0;
 		break;


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

* Re: Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space
  2013-09-30 17:15           ` Rafael J. Wysocki
  2013-09-30 17:37             ` [PATCH] PM / hibernate: Fix user space driven resume regression Rafael J. Wysocki
@ 2013-10-01 16:38             ` Ronald
  2013-10-01 20:35               ` Rafael J. Wysocki
  1 sibling, 1 reply; 9+ messages in thread
From: Ronald @ 2013-10-01 16:38 UTC (permalink / raw
  To: Rafael J. Wysocki; +Cc: linux-kernel, Linux PM list

This could be a coincidence, but I had a disk data corruption in /var
(LVM). Most other partitions are read-only during normal operation. So
I can safely keep testing this kernel. Just mentioning this, in case
you see this happening with other ppl testing this patch as well.

2013/9/30 Rafael J. Wysocki <rjw@rjwysocki.net>:
> On Monday, September 30, 2013 07:45:54 AM Ronald wrote:
>> Yes, works as well. Just survived twe cycles with s2disk. I'm
>> surprised someone else did not report this earlier btw... Because it
>> looks pretty generic (i.e. not specific to a 64bit UP system).
>
> It is a generic bug, actually.  Well, this means the user space driven
> hibernation doesn't receive much testing coverage these days ...
>
> I'll resend the patch with a proper changelog and then push it for v3.12-rc4.
>
> Thanks,
> Rafael
>
>
>> 2013/9/30 Rafael J. Wysocki <rjw@rjwysocki.net>:
>> > On Sunday, September 29, 2013 09:22:45 AM Ronald wrote:
>> >> Attached patch fixes the issue. Both methods function as they did
>> >> before. Thanks for the superfast fix!
>> >
>> > You're welcome, it's not the final one, however.
>> >
>> > Can you please test the one below and report back?
>> >
>> > Rafael
>> >
>> >
>> > ---
>> >  kernel/power/snapshot.c |    5 ++++-
>> >  kernel/power/user.c     |    8 ++++++++
>> >  2 files changed, 12 insertions(+), 1 deletion(-)
>> >
>> > Index: linux-pm/kernel/power/snapshot.c
>> > ===================================================================
>> > --- linux-pm.orig/kernel/power/snapshot.c
>> > +++ linux-pm/kernel/power/snapshot.c
>> > @@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void)
>> >         struct memory_bitmap *bm1, *bm2;
>> >         int error = 0;
>> >
>> > -       BUG_ON(forbidden_pages_map || free_pages_map);
>> > +       if (forbidden_pages_map && free_pages_map)
>> > +               return 0;
>> > +       else
>> > +               BUG_ON(forbidden_pages_map || free_pages_map);
>> >
>> >         bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
>> >         if (!bm1)
>> > Index: linux-pm/kernel/power/user.c
>> > ===================================================================
>> > --- linux-pm.orig/kernel/power/user.c
>> > +++ linux-pm/kernel/power/user.c
>> > @@ -39,6 +39,7 @@ static struct snapshot_data {
>> >         char frozen;
>> >         char ready;
>> >         char platform_support;
>> > +       bool free_bitmaps;
>> >  } snapshot_state;
>> >
>> >  atomic_t snapshot_device_available = ATOMIC_INIT(1);
>> > @@ -82,6 +83,10 @@ static int snapshot_open(struct inode *i
>> >                 data->swap = -1;
>> >                 data->mode = O_WRONLY;
>> >                 error = pm_notifier_call_chain(PM_RESTORE_PREPARE);
>> > +               if (!error) {
>> > +                       error = create_basic_memory_bitmaps();
>> > +                       data->free_bitmaps = !error;
>> > +               }
>> >                 if (error)
>> >                         pm_notifier_call_chain(PM_POST_RESTORE);
>> >         }
>> > @@ -111,6 +116,8 @@ static int snapshot_release(struct inode
>> >                 pm_restore_gfp_mask();
>> >                 free_basic_memory_bitmaps();
>> >                 thaw_processes();
>> > +       } else if (data->free_bitmaps) {
>> > +               free_basic_memory_bitmaps();
>> >         }
>> >         pm_notifier_call_chain(data->mode == O_RDONLY ?
>> >                         PM_POST_HIBERNATION : PM_POST_RESTORE);
>> > @@ -231,6 +238,7 @@ static long snapshot_ioctl(struct file *
>> >                         break;
>> >                 pm_restore_gfp_mask();
>> >                 free_basic_memory_bitmaps();
>> > +               data->free_bitmaps = false;
>> >                 thaw_processes();
>> >                 data->frozen = 0;
>> >                 break;
>> >
> --
> I speak only for myself.
> Rafael J. Wysocki, Intel Open Source Technology Center.

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

* Re: Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space
  2013-10-01 16:38             ` Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space Ronald
@ 2013-10-01 20:35               ` Rafael J. Wysocki
  0 siblings, 0 replies; 9+ messages in thread
From: Rafael J. Wysocki @ 2013-10-01 20:35 UTC (permalink / raw
  To: Ronald; +Cc: linux-kernel, Linux PM list

On Tuesday, October 01, 2013 06:38:03 PM Ronald wrote:
> This could be a coincidence, but I had a disk data corruption in /var
> (LVM). Most other partitions are read-only during normal operation. So
> I can safely keep testing this kernel. Just mentioning this, in case
> you see this happening with other ppl testing this patch as well.

If you have a failing resume from hibernation a filesystem is perfectly
possible, unfortunately.

The patch itself should't really cause any corruption to happen.

Thanks,
Rafael


> 2013/9/30 Rafael J. Wysocki <rjw@rjwysocki.net>:
> > On Monday, September 30, 2013 07:45:54 AM Ronald wrote:
> >> Yes, works as well. Just survived twe cycles with s2disk. I'm
> >> surprised someone else did not report this earlier btw... Because it
> >> looks pretty generic (i.e. not specific to a 64bit UP system).
> >
> > It is a generic bug, actually.  Well, this means the user space driven
> > hibernation doesn't receive much testing coverage these days ...
> >
> > I'll resend the patch with a proper changelog and then push it for v3.12-rc4.
> >
> > Thanks,
> > Rafael
> >
> >
> >> 2013/9/30 Rafael J. Wysocki <rjw@rjwysocki.net>:
> >> > On Sunday, September 29, 2013 09:22:45 AM Ronald wrote:
> >> >> Attached patch fixes the issue. Both methods function as they did
> >> >> before. Thanks for the superfast fix!
> >> >
> >> > You're welcome, it's not the final one, however.
> >> >
> >> > Can you please test the one below and report back?
> >> >
> >> > Rafael
> >> >
> >> >
> >> > ---
> >> >  kernel/power/snapshot.c |    5 ++++-
> >> >  kernel/power/user.c     |    8 ++++++++
> >> >  2 files changed, 12 insertions(+), 1 deletion(-)
> >> >
> >> > Index: linux-pm/kernel/power/snapshot.c
> >> > ===================================================================
> >> > --- linux-pm.orig/kernel/power/snapshot.c
> >> > +++ linux-pm/kernel/power/snapshot.c
> >> > @@ -743,7 +743,10 @@ int create_basic_memory_bitmaps(void)
> >> >         struct memory_bitmap *bm1, *bm2;
> >> >         int error = 0;
> >> >
> >> > -       BUG_ON(forbidden_pages_map || free_pages_map);
> >> > +       if (forbidden_pages_map && free_pages_map)
> >> > +               return 0;
> >> > +       else
> >> > +               BUG_ON(forbidden_pages_map || free_pages_map);
> >> >
> >> >         bm1 = kzalloc(sizeof(struct memory_bitmap), GFP_KERNEL);
> >> >         if (!bm1)
> >> > Index: linux-pm/kernel/power/user.c
> >> > ===================================================================
> >> > --- linux-pm.orig/kernel/power/user.c
> >> > +++ linux-pm/kernel/power/user.c
> >> > @@ -39,6 +39,7 @@ static struct snapshot_data {
> >> >         char frozen;
> >> >         char ready;
> >> >         char platform_support;
> >> > +       bool free_bitmaps;
> >> >  } snapshot_state;
> >> >
> >> >  atomic_t snapshot_device_available = ATOMIC_INIT(1);
> >> > @@ -82,6 +83,10 @@ static int snapshot_open(struct inode *i
> >> >                 data->swap = -1;
> >> >                 data->mode = O_WRONLY;
> >> >                 error = pm_notifier_call_chain(PM_RESTORE_PREPARE);
> >> > +               if (!error) {
> >> > +                       error = create_basic_memory_bitmaps();
> >> > +                       data->free_bitmaps = !error;
> >> > +               }
> >> >                 if (error)
> >> >                         pm_notifier_call_chain(PM_POST_RESTORE);
> >> >         }
> >> > @@ -111,6 +116,8 @@ static int snapshot_release(struct inode
> >> >                 pm_restore_gfp_mask();
> >> >                 free_basic_memory_bitmaps();
> >> >                 thaw_processes();
> >> > +       } else if (data->free_bitmaps) {
> >> > +               free_basic_memory_bitmaps();
> >> >         }
> >> >         pm_notifier_call_chain(data->mode == O_RDONLY ?
> >> >                         PM_POST_HIBERNATION : PM_POST_RESTORE);
> >> > @@ -231,6 +238,7 @@ static long snapshot_ioctl(struct file *
> >> >                         break;
> >> >                 pm_restore_gfp_mask();
> >> >                 free_basic_memory_bitmaps();
> >> > +               data->free_bitmaps = false;
> >> >                 thaw_processes();
> >> >                 data->frozen = 0;
> >> >                 break;
> >> >
> > --
> > I speak only for myself.
> > Rafael J. Wysocki, Intel Open Source Technology Center.
-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

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

end of thread, other threads:[~2013-10-01 20:23 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <CAF1_xX2=BYkEn3ycM4smREqk-ioGbvu8Ea4or22U-jBdKmDKGA@mail.gmail.com>
2013-09-28 18:18 ` Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space Ronald
2013-09-29  1:16   ` Rafael J. Wysocki
2013-09-29  7:22     ` Ronald
2013-09-30  0:12       ` Rafael J. Wysocki
2013-09-30  5:45         ` Ronald
2013-09-30 17:15           ` Rafael J. Wysocki
2013-09-30 17:37             ` [PATCH] PM / hibernate: Fix user space driven resume regression Rafael J. Wysocki
2013-10-01 16:38             ` Fwd: [v3.12-rc1] [regression] PM / hibernate: Create memory bitmaps after freezing user space Ronald
2013-10-01 20:35               ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).