diff options
author | Matthew Garrett <mjg@redhat.com> | 2011-07-21 16:57:52 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2011-07-22 19:14:06 -0400 |
commit | 638c1fd3033c76778e6d9975ad8a4a9cdd5b96d9 (patch) | |
tree | de8b772157162b8a7a0901f4df5fb25faef6b21d /drivers/acpi | |
parent | 02f8c6aee8df3cdc935e9bdd4f2d020306035dbe (diff) |
pstore: Extend API for more flexibility in new backends
Some pstore implementations may not have a static context, so extend the
API to pass the pstore_info struct to all calls and allow for a context
pointer.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/apei/erst.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c index e6cef8e1b534..de3ae92adaa5 100644 --- a/drivers/acpi/apei/erst.c +++ b/drivers/acpi/apei/erst.c | |||
@@ -932,8 +932,10 @@ static int erst_check_table(struct acpi_table_erst *erst_tab) | |||
932 | static int erst_open_pstore(struct pstore_info *psi); | 932 | static int erst_open_pstore(struct pstore_info *psi); |
933 | static int erst_close_pstore(struct pstore_info *psi); | 933 | static int erst_close_pstore(struct pstore_info *psi); |
934 | static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, | 934 | static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, |
935 | struct timespec *time); | 935 | struct timespec *time, struct pstore_info *psi); |
936 | static u64 erst_writer(enum pstore_type_id type, size_t size); | 936 | static u64 erst_writer(enum pstore_type_id type, size_t size, |
937 | struct pstore_info *psi); | ||
938 | static int erst_clearer(u64 id, struct pstore_info *psi); | ||
937 | 939 | ||
938 | static struct pstore_info erst_info = { | 940 | static struct pstore_info erst_info = { |
939 | .owner = THIS_MODULE, | 941 | .owner = THIS_MODULE, |
@@ -942,7 +944,7 @@ static struct pstore_info erst_info = { | |||
942 | .close = erst_close_pstore, | 944 | .close = erst_close_pstore, |
943 | .read = erst_reader, | 945 | .read = erst_reader, |
944 | .write = erst_writer, | 946 | .write = erst_writer, |
945 | .erase = erst_clear | 947 | .erase = erst_clearer |
946 | }; | 948 | }; |
947 | 949 | ||
948 | #define CPER_CREATOR_PSTORE \ | 950 | #define CPER_CREATOR_PSTORE \ |
@@ -983,7 +985,7 @@ static int erst_close_pstore(struct pstore_info *psi) | |||
983 | } | 985 | } |
984 | 986 | ||
985 | static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, | 987 | static ssize_t erst_reader(u64 *id, enum pstore_type_id *type, |
986 | struct timespec *time) | 988 | struct timespec *time, struct pstore_info *psi) |
987 | { | 989 | { |
988 | int rc; | 990 | int rc; |
989 | ssize_t len = 0; | 991 | ssize_t len = 0; |
@@ -1037,7 +1039,8 @@ out: | |||
1037 | return (rc < 0) ? rc : (len - sizeof(*rcd)); | 1039 | return (rc < 0) ? rc : (len - sizeof(*rcd)); |
1038 | } | 1040 | } |
1039 | 1041 | ||
1040 | static u64 erst_writer(enum pstore_type_id type, size_t size) | 1042 | static u64 erst_writer(enum pstore_type_id type, size_t size, |
1043 | struct pstore_info *psi) | ||
1041 | { | 1044 | { |
1042 | struct cper_pstore_record *rcd = (struct cper_pstore_record *) | 1045 | struct cper_pstore_record *rcd = (struct cper_pstore_record *) |
1043 | (erst_info.buf - sizeof(*rcd)); | 1046 | (erst_info.buf - sizeof(*rcd)); |
@@ -1080,6 +1083,11 @@ static u64 erst_writer(enum pstore_type_id type, size_t size) | |||
1080 | return rcd->hdr.record_id; | 1083 | return rcd->hdr.record_id; |
1081 | } | 1084 | } |
1082 | 1085 | ||
1086 | static int erst_clearer(u64 id, struct pstore_info *psi) | ||
1087 | { | ||
1088 | return erst_clear(id); | ||
1089 | } | ||
1090 | |||
1083 | static int __init erst_init(void) | 1091 | static int __init erst_init(void) |
1084 | { | 1092 | { |
1085 | int rc = 0; | 1093 | int rc = 0; |