|
@@ -1061,6 +1061,29 @@ static ssize_t resume_store(struct kobject *kobj, struct kobj_attribute *attr,
|
|
|
|
|
|
power_attr(resume);
|
|
|
|
|
|
+static ssize_t resume_offset_show(struct kobject *kobj,
|
|
|
+ struct kobj_attribute *attr, char *buf)
|
|
|
+{
|
|
|
+ return sprintf(buf, "%llu\n", (unsigned long long)swsusp_resume_block);
|
|
|
+}
|
|
|
+
|
|
|
+static ssize_t resume_offset_store(struct kobject *kobj,
|
|
|
+ struct kobj_attribute *attr, const char *buf,
|
|
|
+ size_t n)
|
|
|
+{
|
|
|
+ unsigned long long offset;
|
|
|
+ int rc;
|
|
|
+
|
|
|
+ rc = kstrtoull(buf, 0, &offset);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ swsusp_resume_block = offset;
|
|
|
+
|
|
|
+ return n;
|
|
|
+}
|
|
|
+
|
|
|
+power_attr(resume_offset);
|
|
|
+
|
|
|
static ssize_t image_size_show(struct kobject *kobj, struct kobj_attribute *attr,
|
|
|
char *buf)
|
|
|
{
|
|
@@ -1106,6 +1129,7 @@ power_attr(reserved_size);
|
|
|
|
|
|
static struct attribute * g[] = {
|
|
|
&disk_attr.attr,
|
|
|
+ &resume_offset_attr.attr,
|
|
|
&resume_attr.attr,
|
|
|
&image_size_attr.attr,
|
|
|
&reserved_size_attr.attr,
|