aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-12-28 23:44:29 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-12-28 23:44:29 -0500
commitb07039b79c9ea64c1eacda1e01d645082e4a0d5d (patch)
tree61532ba8425fdf897d6a67a74391a1c6f322a07b /drivers
parent02061181d3a9ccfe15ef6bc15fa56283acc47620 (diff)
parent16df1456aa858a86f398dbc7d27649eb6662b0cc (diff)
Merge tag 'driver-core-4.21-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core
Pull driver core updates from Greg KH: "Here is the "big" set of driver core patches for 4.21-rc1. It's not really big, just a number of small changes for some reported issues, some documentation updates to hopefully make it harder for people to abuse the driver model, and some other minor cleanups. All of these have been in linux-next for a while with no reported issues" * tag 'driver-core-4.21-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: mm, memory_hotplug: update a comment in unregister_memory() component: convert to DEFINE_SHOW_ATTRIBUTE sysfs: Disable lockdep for driver bind/unbind files driver core: Add missing dev->bus->need_parent_lock checks kobject: return error code if writing /sys/.../uevent fails driver core: Move async_synchronize_full call driver core: platform: Respect return code of platform_device_register_full() kref/kobject: Improve documentation drivers/base/memory.c: Use DEVICE_ATTR_RO and friends driver core: Replace simple_strto{l,ul} by kstrtou{l,ul} kernfs: Improve kernfs_notify() poll notification latency kobject: Fix warnings in lib/kobject_uevent.c kobject: drop unnecessary cast "%llu" for u64 driver core: fix comments for device_block_probing() driver core: Replace simple_strtol by kstrtoint
Diffstat (limited to 'drivers')
-rw-r--r--drivers/base/bus.c19
-rw-r--r--drivers/base/component.c12
-rw-r--r--drivers/base/core.c32
-rw-r--r--drivers/base/dd.c19
-rw-r--r--drivers/base/memory.c81
-rw-r--r--drivers/base/platform.c4
6 files changed, 86 insertions, 81 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 8bfd27ec73d6..e06a57936cc9 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -31,6 +31,9 @@ static struct kset *system_kset;
31 31
32#define to_drv_attr(_attr) container_of(_attr, struct driver_attribute, attr) 32#define to_drv_attr(_attr) container_of(_attr, struct driver_attribute, attr)
33 33
34#define DRIVER_ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store) \
35 struct driver_attribute driver_attr_##_name = \
36 __ATTR_IGNORE_LOCKDEP(_name, _mode, _show, _store)
34 37
35static int __must_check bus_rescan_devices_helper(struct device *dev, 38static int __must_check bus_rescan_devices_helper(struct device *dev,
36 void *data); 39 void *data);
@@ -195,7 +198,7 @@ static ssize_t unbind_store(struct device_driver *drv, const char *buf,
195 bus_put(bus); 198 bus_put(bus);
196 return err; 199 return err;
197} 200}
198static DRIVER_ATTR_WO(unbind); 201static DRIVER_ATTR_IGNORE_LOCKDEP(unbind, S_IWUSR, NULL, unbind_store);
199 202
200/* 203/*
201 * Manually attach a device to a driver. 204 * Manually attach a device to a driver.
@@ -231,7 +234,7 @@ static ssize_t bind_store(struct device_driver *drv, const char *buf,
231 bus_put(bus); 234 bus_put(bus);
232 return err; 235 return err;
233} 236}
234static DRIVER_ATTR_WO(bind); 237static DRIVER_ATTR_IGNORE_LOCKDEP(bind, S_IWUSR, NULL, bind_store);
235 238
236static ssize_t show_drivers_autoprobe(struct bus_type *bus, char *buf) 239static ssize_t show_drivers_autoprobe(struct bus_type *bus, char *buf)
237{ 240{
@@ -611,8 +614,10 @@ static void remove_probe_files(struct bus_type *bus)
611static ssize_t uevent_store(struct device_driver *drv, const char *buf, 614static ssize_t uevent_store(struct device_driver *drv, const char *buf,
612 size_t count) 615 size_t count)
613{ 616{
614 kobject_synth_uevent(&drv->p->kobj, buf, count); 617 int rc;
615 return count; 618
619 rc = kobject_synth_uevent(&drv->p->kobj, buf, count);
620 return rc ? rc : count;
616} 621}
617static DRIVER_ATTR_WO(uevent); 622static DRIVER_ATTR_WO(uevent);
618 623
@@ -828,8 +833,10 @@ static void klist_devices_put(struct klist_node *n)
828static ssize_t bus_uevent_store(struct bus_type *bus, 833static ssize_t bus_uevent_store(struct bus_type *bus,
829 const char *buf, size_t count) 834 const char *buf, size_t count)
830{ 835{
831 kobject_synth_uevent(&bus->p->subsys.kobj, buf, count); 836 int rc;
832 return count; 837
838 rc = kobject_synth_uevent(&bus->p->subsys.kobj, buf, count);
839 return rc ? rc : count;
833} 840}
834static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store); 841static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store);
835 842
diff --git a/drivers/base/component.c b/drivers/base/component.c
index e8d676fad0c9..ddcea8739c12 100644
--- a/drivers/base/component.c
+++ b/drivers/base/component.c
@@ -85,17 +85,7 @@ static int component_devices_show(struct seq_file *s, void *data)
85 return 0; 85 return 0;
86} 86}
87 87
88static int component_devices_open(struct inode *inode, struct file *file) 88DEFINE_SHOW_ATTRIBUTE(component_devices);
89{
90 return single_open(file, component_devices_show, inode->i_private);
91}
92
93static const struct file_operations component_devices_fops = {
94 .open = component_devices_open,
95 .read = seq_read,
96 .llseek = seq_lseek,
97 .release = single_release,
98};
99 89
100static int __init component_debug_init(void) 90static int __init component_debug_init(void)
101{ 91{
diff --git a/drivers/base/core.c b/drivers/base/core.c
index a2f14098663f..0073b09bb99f 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -815,10 +815,12 @@ ssize_t device_store_ulong(struct device *dev,
815 const char *buf, size_t size) 815 const char *buf, size_t size)
816{ 816{
817 struct dev_ext_attribute *ea = to_ext_attr(attr); 817 struct dev_ext_attribute *ea = to_ext_attr(attr);
818 char *end; 818 int ret;
819 unsigned long new = simple_strtoul(buf, &end, 0); 819 unsigned long new;
820 if (end == buf) 820
821 return -EINVAL; 821 ret = kstrtoul(buf, 0, &new);
822 if (ret)
823 return ret;
822 *(unsigned long *)(ea->var) = new; 824 *(unsigned long *)(ea->var) = new;
823 /* Always return full write size even if we didn't consume all */ 825 /* Always return full write size even if we didn't consume all */
824 return size; 826 return size;
@@ -839,9 +841,14 @@ ssize_t device_store_int(struct device *dev,
839 const char *buf, size_t size) 841 const char *buf, size_t size)
840{ 842{
841 struct dev_ext_attribute *ea = to_ext_attr(attr); 843 struct dev_ext_attribute *ea = to_ext_attr(attr);
842 char *end; 844 int ret;
843 long new = simple_strtol(buf, &end, 0); 845 long new;
844 if (end == buf || new > INT_MAX || new < INT_MIN) 846
847 ret = kstrtol(buf, 0, &new);
848 if (ret)
849 return ret;
850
851 if (new > INT_MAX || new < INT_MIN)
845 return -EINVAL; 852 return -EINVAL;
846 *(int *)(ea->var) = new; 853 *(int *)(ea->var) = new;
847 /* Always return full write size even if we didn't consume all */ 854 /* Always return full write size even if we didn't consume all */
@@ -911,8 +918,7 @@ static void device_release(struct kobject *kobj)
911 else if (dev->class && dev->class->dev_release) 918 else if (dev->class && dev->class->dev_release)
912 dev->class->dev_release(dev); 919 dev->class->dev_release(dev);
913 else 920 else
914 WARN(1, KERN_ERR "Device '%s' does not have a release() " 921 WARN(1, KERN_ERR "Device '%s' does not have a release() function, it is broken and must be fixed. See Documentation/kobject.txt.\n",
915 "function, it is broken and must be fixed.\n",
916 dev_name(dev)); 922 dev_name(dev));
917 kfree(p); 923 kfree(p);
918} 924}
@@ -1088,8 +1094,14 @@ out:
1088static ssize_t uevent_store(struct device *dev, struct device_attribute *attr, 1094static ssize_t uevent_store(struct device *dev, struct device_attribute *attr,
1089 const char *buf, size_t count) 1095 const char *buf, size_t count)
1090{ 1096{
1091 if (kobject_synth_uevent(&dev->kobj, buf, count)) 1097 int rc;
1098
1099 rc = kobject_synth_uevent(&dev->kobj, buf, count);
1100
1101 if (rc) {
1092 dev_err(dev, "uevent: failed to send synthetic uevent\n"); 1102 dev_err(dev, "uevent: failed to send synthetic uevent\n");
1103 return rc;
1104 }
1093 1105
1094 return count; 1106 return count;
1095} 1107}
diff --git a/drivers/base/dd.c b/drivers/base/dd.c
index 169412ee4ae8..8ac10af17c00 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -179,7 +179,7 @@ static void driver_deferred_probe_trigger(void)
179} 179}
180 180
181/** 181/**
182 * device_block_probing() - Block/defere device's probes 182 * device_block_probing() - Block/defer device's probes
183 * 183 *
184 * It will disable probing of devices and defer their probes instead. 184 * It will disable probing of devices and defer their probes instead.
185 */ 185 */
@@ -223,7 +223,10 @@ DEFINE_SHOW_ATTRIBUTE(deferred_devs);
223static int deferred_probe_timeout = -1; 223static int deferred_probe_timeout = -1;
224static int __init deferred_probe_timeout_setup(char *str) 224static int __init deferred_probe_timeout_setup(char *str)
225{ 225{
226 deferred_probe_timeout = simple_strtol(str, NULL, 10); 226 int timeout;
227
228 if (!kstrtoint(str, 10, &timeout))
229 deferred_probe_timeout = timeout;
227 return 1; 230 return 1;
228} 231}
229__setup("deferred_probe_timeout=", deferred_probe_timeout_setup); 232__setup("deferred_probe_timeout=", deferred_probe_timeout_setup);
@@ -453,7 +456,7 @@ static int really_probe(struct device *dev, struct device_driver *drv)
453 if (defer_all_probes) { 456 if (defer_all_probes) {
454 /* 457 /*
455 * Value of defer_all_probes can be set only by 458 * Value of defer_all_probes can be set only by
456 * device_defer_all_probes_enable() which, in turn, will call 459 * device_block_probing() which, in turn, will call
457 * wait_for_device_probe() right after that to avoid any races. 460 * wait_for_device_probe() right after that to avoid any races.
458 */ 461 */
459 dev_dbg(dev, "Driver %s force probe deferral\n", drv->name); 462 dev_dbg(dev, "Driver %s force probe deferral\n", drv->name);
@@ -928,16 +931,13 @@ static void __device_release_driver(struct device *dev, struct device *parent)
928 931
929 drv = dev->driver; 932 drv = dev->driver;
930 if (drv) { 933 if (drv) {
931 if (driver_allows_async_probing(drv))
932 async_synchronize_full();
933
934 while (device_links_busy(dev)) { 934 while (device_links_busy(dev)) {
935 device_unlock(dev); 935 device_unlock(dev);
936 if (parent) 936 if (parent && dev->bus->need_parent_lock)
937 device_unlock(parent); 937 device_unlock(parent);
938 938
939 device_links_unbind_consumers(dev); 939 device_links_unbind_consumers(dev);
940 if (parent) 940 if (parent && dev->bus->need_parent_lock)
941 device_lock(parent); 941 device_lock(parent);
942 942
943 device_lock(dev); 943 device_lock(dev);
@@ -1036,6 +1036,9 @@ void driver_detach(struct device_driver *drv)
1036 struct device_private *dev_prv; 1036 struct device_private *dev_prv;
1037 struct device *dev; 1037 struct device *dev;
1038 1038
1039 if (driver_allows_async_probing(drv))
1040 async_synchronize_full();
1041
1039 for (;;) { 1042 for (;;) {
1040 spin_lock(&drv->p->klist_devices.k_lock); 1043 spin_lock(&drv->p->klist_devices.k_lock);
1041 if (list_empty(&drv->p->klist_devices.k_list)) { 1044 if (list_empty(&drv->p->klist_devices.k_list)) {
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index fb75a6fd4bd9..048cbf7d5233 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -109,8 +109,8 @@ static unsigned long get_memory_block_size(void)
109 * uses. 109 * uses.
110 */ 110 */
111 111
112static ssize_t show_mem_start_phys_index(struct device *dev, 112static ssize_t phys_index_show(struct device *dev,
113 struct device_attribute *attr, char *buf) 113 struct device_attribute *attr, char *buf)
114{ 114{
115 struct memory_block *mem = to_memory_block(dev); 115 struct memory_block *mem = to_memory_block(dev);
116 unsigned long phys_index; 116 unsigned long phys_index;
@@ -122,8 +122,8 @@ static ssize_t show_mem_start_phys_index(struct device *dev,
122/* 122/*
123 * Show whether the section of memory is likely to be hot-removable 123 * Show whether the section of memory is likely to be hot-removable
124 */ 124 */
125static ssize_t show_mem_removable(struct device *dev, 125static ssize_t removable_show(struct device *dev, struct device_attribute *attr,
126 struct device_attribute *attr, char *buf) 126 char *buf)
127{ 127{
128 unsigned long i, pfn; 128 unsigned long i, pfn;
129 int ret = 1; 129 int ret = 1;
@@ -146,8 +146,8 @@ out:
146/* 146/*
147 * online, offline, going offline, etc. 147 * online, offline, going offline, etc.
148 */ 148 */
149static ssize_t show_mem_state(struct device *dev, 149static ssize_t state_show(struct device *dev, struct device_attribute *attr,
150 struct device_attribute *attr, char *buf) 150 char *buf)
151{ 151{
152 struct memory_block *mem = to_memory_block(dev); 152 struct memory_block *mem = to_memory_block(dev);
153 ssize_t len = 0; 153 ssize_t len = 0;
@@ -286,7 +286,7 @@ static int memory_subsys_online(struct device *dev)
286 return 0; 286 return 0;
287 287
288 /* 288 /*
289 * If we are called from store_mem_state(), online_type will be 289 * If we are called from state_store(), online_type will be
290 * set >= 0 Otherwise we were called from the device online 290 * set >= 0 Otherwise we were called from the device online
291 * attribute and need to set the online_type. 291 * attribute and need to set the online_type.
292 */ 292 */
@@ -315,9 +315,8 @@ static int memory_subsys_offline(struct device *dev)
315 return memory_block_change_state(mem, MEM_OFFLINE, MEM_ONLINE); 315 return memory_block_change_state(mem, MEM_OFFLINE, MEM_ONLINE);
316} 316}
317 317
318static ssize_t 318static ssize_t state_store(struct device *dev, struct device_attribute *attr,
319store_mem_state(struct device *dev, 319 const char *buf, size_t count)
320 struct device_attribute *attr, const char *buf, size_t count)
321{ 320{
322 struct memory_block *mem = to_memory_block(dev); 321 struct memory_block *mem = to_memory_block(dev);
323 int ret, online_type; 322 int ret, online_type;
@@ -374,7 +373,7 @@ err:
374 * s.t. if I offline all of these sections I can then 373 * s.t. if I offline all of these sections I can then
375 * remove the physical device? 374 * remove the physical device?
376 */ 375 */
377static ssize_t show_phys_device(struct device *dev, 376static ssize_t phys_device_show(struct device *dev,
378 struct device_attribute *attr, char *buf) 377 struct device_attribute *attr, char *buf)
379{ 378{
380 struct memory_block *mem = to_memory_block(dev); 379 struct memory_block *mem = to_memory_block(dev);
@@ -395,7 +394,7 @@ static void print_allowed_zone(char *buf, int nid, unsigned long start_pfn,
395 } 394 }
396} 395}
397 396
398static ssize_t show_valid_zones(struct device *dev, 397static ssize_t valid_zones_show(struct device *dev,
399 struct device_attribute *attr, char *buf) 398 struct device_attribute *attr, char *buf)
400{ 399{
401 struct memory_block *mem = to_memory_block(dev); 400 struct memory_block *mem = to_memory_block(dev);
@@ -435,33 +434,31 @@ out:
435 434
436 return strlen(buf); 435 return strlen(buf);
437} 436}
438static DEVICE_ATTR(valid_zones, 0444, show_valid_zones, NULL); 437static DEVICE_ATTR_RO(valid_zones);
439#endif 438#endif
440 439
441static DEVICE_ATTR(phys_index, 0444, show_mem_start_phys_index, NULL); 440static DEVICE_ATTR_RO(phys_index);
442static DEVICE_ATTR(state, 0644, show_mem_state, store_mem_state); 441static DEVICE_ATTR_RW(state);
443static DEVICE_ATTR(phys_device, 0444, show_phys_device, NULL); 442static DEVICE_ATTR_RO(phys_device);
444static DEVICE_ATTR(removable, 0444, show_mem_removable, NULL); 443static DEVICE_ATTR_RO(removable);
445 444
446/* 445/*
447 * Block size attribute stuff 446 * Block size attribute stuff
448 */ 447 */
449static ssize_t 448static ssize_t block_size_bytes_show(struct device *dev,
450print_block_size(struct device *dev, struct device_attribute *attr, 449 struct device_attribute *attr, char *buf)
451 char *buf)
452{ 450{
453 return sprintf(buf, "%lx\n", get_memory_block_size()); 451 return sprintf(buf, "%lx\n", get_memory_block_size());
454} 452}
455 453
456static DEVICE_ATTR(block_size_bytes, 0444, print_block_size, NULL); 454static DEVICE_ATTR_RO(block_size_bytes);
457 455
458/* 456/*
459 * Memory auto online policy. 457 * Memory auto online policy.
460 */ 458 */
461 459
462static ssize_t 460static ssize_t auto_online_blocks_show(struct device *dev,
463show_auto_online_blocks(struct device *dev, struct device_attribute *attr, 461 struct device_attribute *attr, char *buf)
464 char *buf)
465{ 462{
466 if (memhp_auto_online) 463 if (memhp_auto_online)
467 return sprintf(buf, "online\n"); 464 return sprintf(buf, "online\n");
@@ -469,9 +466,9 @@ show_auto_online_blocks(struct device *dev, struct device_attribute *attr,
469 return sprintf(buf, "offline\n"); 466 return sprintf(buf, "offline\n");
470} 467}
471 468
472static ssize_t 469static ssize_t auto_online_blocks_store(struct device *dev,
473store_auto_online_blocks(struct device *dev, struct device_attribute *attr, 470 struct device_attribute *attr,
474 const char *buf, size_t count) 471 const char *buf, size_t count)
475{ 472{
476 if (sysfs_streq(buf, "online")) 473 if (sysfs_streq(buf, "online"))
477 memhp_auto_online = true; 474 memhp_auto_online = true;
@@ -483,8 +480,7 @@ store_auto_online_blocks(struct device *dev, struct device_attribute *attr,
483 return count; 480 return count;
484} 481}
485 482
486static DEVICE_ATTR(auto_online_blocks, 0644, show_auto_online_blocks, 483static DEVICE_ATTR_RW(auto_online_blocks);
487 store_auto_online_blocks);
488 484
489/* 485/*
490 * Some architectures will have custom drivers to do this, and 486 * Some architectures will have custom drivers to do this, and
@@ -493,9 +489,8 @@ static DEVICE_ATTR(auto_online_blocks, 0644, show_auto_online_blocks,
493 * and will require this interface. 489 * and will require this interface.
494 */ 490 */
495#ifdef CONFIG_ARCH_MEMORY_PROBE 491#ifdef CONFIG_ARCH_MEMORY_PROBE
496static ssize_t 492static ssize_t probe_store(struct device *dev, struct device_attribute *attr,
497memory_probe_store(struct device *dev, struct device_attribute *attr, 493 const char *buf, size_t count)
498 const char *buf, size_t count)
499{ 494{
500 u64 phys_addr; 495 u64 phys_addr;
501 int nid, ret; 496 int nid, ret;
@@ -525,7 +520,7 @@ out:
525 return ret; 520 return ret;
526} 521}
527 522
528static DEVICE_ATTR(probe, S_IWUSR, NULL, memory_probe_store); 523static DEVICE_ATTR_WO(probe);
529#endif 524#endif
530 525
531#ifdef CONFIG_MEMORY_FAILURE 526#ifdef CONFIG_MEMORY_FAILURE
@@ -534,10 +529,9 @@ static DEVICE_ATTR(probe, S_IWUSR, NULL, memory_probe_store);
534 */ 529 */
535 530
536/* Soft offline a page */ 531/* Soft offline a page */
537static ssize_t 532static ssize_t soft_offline_page_store(struct device *dev,
538store_soft_offline_page(struct device *dev, 533 struct device_attribute *attr,
539 struct device_attribute *attr, 534 const char *buf, size_t count)
540 const char *buf, size_t count)
541{ 535{
542 int ret; 536 int ret;
543 u64 pfn; 537 u64 pfn;
@@ -553,10 +547,9 @@ store_soft_offline_page(struct device *dev,
553} 547}
554 548
555/* Forcibly offline a page, including killing processes. */ 549/* Forcibly offline a page, including killing processes. */
556static ssize_t 550static ssize_t hard_offline_page_store(struct device *dev,
557store_hard_offline_page(struct device *dev, 551 struct device_attribute *attr,
558 struct device_attribute *attr, 552 const char *buf, size_t count)
559 const char *buf, size_t count)
560{ 553{
561 int ret; 554 int ret;
562 u64 pfn; 555 u64 pfn;
@@ -569,8 +562,8 @@ store_hard_offline_page(struct device *dev,
569 return ret ? ret : count; 562 return ret ? ret : count;
570} 563}
571 564
572static DEVICE_ATTR(soft_offline_page, S_IWUSR, NULL, store_soft_offline_page); 565static DEVICE_ATTR_WO(soft_offline_page);
573static DEVICE_ATTR(hard_offline_page, S_IWUSR, NULL, store_hard_offline_page); 566static DEVICE_ATTR_WO(hard_offline_page);
574#endif 567#endif
575 568
576/* 569/*
@@ -739,7 +732,7 @@ unregister_memory(struct memory_block *memory)
739{ 732{
740 BUG_ON(memory->dev.bus != &memory_subsys); 733 BUG_ON(memory->dev.bus != &memory_subsys);
741 734
742 /* drop the ref. we got in remove_memory_block() */ 735 /* drop the ref. we got in remove_memory_section() */
743 put_device(&memory->dev); 736 put_device(&memory->dev);
744 device_unregister(&memory->dev); 737 device_unregister(&memory->dev);
745} 738}
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 445cbd8266ca..be6c1eb3cbe2 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -234,7 +234,7 @@ struct platform_object {
234 */ 234 */
235void platform_device_put(struct platform_device *pdev) 235void platform_device_put(struct platform_device *pdev)
236{ 236{
237 if (pdev) 237 if (!IS_ERR_OR_NULL(pdev))
238 put_device(&pdev->dev); 238 put_device(&pdev->dev);
239} 239}
240EXPORT_SYMBOL_GPL(platform_device_put); 240EXPORT_SYMBOL_GPL(platform_device_put);
@@ -447,7 +447,7 @@ void platform_device_del(struct platform_device *pdev)
447{ 447{
448 int i; 448 int i;
449 449
450 if (pdev) { 450 if (!IS_ERR_OR_NULL(pdev)) {
451 device_del(&pdev->dev); 451 device_del(&pdev->dev);
452 452
453 if (pdev->id_auto) { 453 if (pdev->id_auto) {