History

ramoops: use module parameters instead of platform data if not available

Use generic module parameters instead of platform data, if platform data are not available. This limitation has been introduced with commit c3b92ce9e75 ("ramoops: use the platform data structure instead of module params"). [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com> Cc: Kyungmin Park <kyungmin.park@samsung.com> Cc: Américo Wang <xiyou.wangcong@gmail.com> Reported-by: Stevie Trujillo <stevie.trujillo@gmail.com> Cc: Joe Perches <joe@perches.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Marco Stornelli committed 15 years ago

Commit 13aefd71 parent beda94d1 file · +35 −12Browse files

Unified · Split

drivers/char/ramoops.c+35−12
@@ -26,6 +26,7 @@ · 25 unmodified lines
2626 #include <linux/io.h>
2727 #include <linux/ioport.h>
2828 #include <linux/platform_device.h>
29+#include <linux/slab.h>
2930 #include <linux/ramoops.h>
3031
3132 #define RAMOOPS_KERNMSG_HDR "===="
@@ -56,6 +57,9 @@ static struct ramoops_context { · 24 unmodified lines
5657 int max_count;
5758 } oops_cxt;
5859
60+static struct platform_device *dummy;
61+static struct ramoops_platform_data *dummy_data;
62+
5963 static void ramoops_do_dump(struct kmsg_dumper *dumper,
6064 enum kmsg_dump_reason reason, const char *s1, unsigned long l1,
6165 const char *s2, unsigned long l2)
@@ -106,27 +110,22 @@ static int __init ramoops_probe(struct platform_device *pdev) · 44 unmodified lines
106110 struct ramoops_context *cxt = &oops_cxt;
107111 int err = -EINVAL;
108112
109− if (pdata) {
110− mem_size = pdata->mem_size;
111− mem_address = pdata->mem_address;
112− }
113−
114− if (!mem_size) {
113+ if (!pdata->mem_size) {
115114 printk(KERN_ERR "ramoops: invalid size specification");
116115 goto fail3;
117116 }
118117
119− rounddown_pow_of_two(mem_size);
118+ rounddown_pow_of_two(pdata->mem_size);
120119
121− if (mem_size < RECORD_SIZE) {
120+ if (pdata->mem_size < RECORD_SIZE) {
122121 printk(KERN_ERR "ramoops: size too small");
123122 goto fail3;
124123 }
125124
126− cxt->max_count = mem_size / RECORD_SIZE;
125+ cxt->max_count = pdata->mem_size / RECORD_SIZE;
127126 cxt->count = 0;
128− cxt->size = mem_size;
129− cxt->phys_addr = mem_address;
127+ cxt->size = pdata->mem_size;
128+ cxt->phys_addr = pdata->mem_address;
130129
131130 if (!request_mem_region(cxt->phys_addr, cxt->size, "ramoops")) {
132131 printk(KERN_ERR "ramoops: request mem region failed");
@@ -179,12 +178,36 @@ static struct platform_driver ramoops_driver = { · 46 unmodified lines
179178
180179 static int __init ramoops_init(void)
181180 {
182− return platform_driver_probe(&ramoops_driver, ramoops_probe);
181+ int ret;
182+ ret = platform_driver_probe(&ramoops_driver, ramoops_probe);
183+ if (ret == -ENODEV) {
184+ /*
185+ * If we didn't find a platform device, we use module parameters
186+ * building platform data on the fly.
187+ */
188+ dummy_data = kzalloc(sizeof(struct ramoops_platform_data),
189+ GFP_KERNEL);
190+ if (!dummy_data)
191+ return -ENOMEM;
192+ dummy_data->mem_size = mem_size;
193+ dummy_data->mem_address = mem_address;
194+ dummy = platform_create_bundle(&ramoops_driver, ramoops_probe,
195+ NULL, 0, dummy_data,
196+ sizeof(struct ramoops_platform_data));
197+
198+ if (IS_ERR(dummy))
199+ ret = PTR_ERR(dummy);
200+ else
201+ ret = 0;
202+ }
203+
204+ return ret;
183205 }
184206
185207 static void __exit ramoops_exit(void)
186208 {
187209 platform_driver_unregister(&ramoops_driver);
210+ kfree(dummy_data);
188211 }
189212
190213 module_init(ramoops_init);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t