diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-21 11:52:18 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-21 11:52:18 -0500 |
commit | b05005772f34497eb2b7415a651fe785cbe70e16 (patch) | |
tree | b176aeb7fa9baf69e77ddd83e844727490bfcf28 /drivers/s390 | |
parent | 044f324f6ea5d55391db62fca6a295b2651cb946 (diff) | |
parent | 7705a8792b0fc82fd7d4dd923724606bbfd9fb20 (diff) |
Merge branch 'origin'
Conflicts:
Documentation/video4linux/CARDLIST.cx88
drivers/media/video/cx88/Kconfig
drivers/media/video/em28xx/em28xx-video.c
drivers/media/video/saa7134/saa7134-dvb.c
Resolved as in the original merge by Mauro Carvalho Chehab
Diffstat (limited to 'drivers/s390')
86 files changed, 396 insertions, 535 deletions
diff --git a/drivers/s390/Kconfig b/drivers/s390/Kconfig index a86a650f3d6d..721787cc5a1c 100644 --- a/drivers/s390/Kconfig +++ b/drivers/s390/Kconfig | |||
@@ -51,6 +51,13 @@ config UNIX98_PTY_COUNT | |||
51 | When not in use, each additional set of 256 PTYs occupy | 51 | When not in use, each additional set of 256 PTYs occupy |
52 | approximately 8 KB of kernel memory on 32-bit architectures. | 52 | approximately 8 KB of kernel memory on 32-bit architectures. |
53 | 53 | ||
54 | config HANGCHECK_TIMER | ||
55 | tristate "Hangcheck timer" | ||
56 | help | ||
57 | The hangcheck-timer module detects when the system has gone | ||
58 | out to lunch past a certain margin. It can reboot the system | ||
59 | or merely print a warning. | ||
60 | |||
54 | source "drivers/char/watchdog/Kconfig" | 61 | source "drivers/char/watchdog/Kconfig" |
55 | 62 | ||
56 | comment "S/390 character device drivers" | 63 | comment "S/390 character device drivers" |
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index ef4c687e7c01..33157c84d1d3 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
@@ -7,7 +7,6 @@ | |||
7 | * Bugreports.to..: <Linux390@de.ibm.com> | 7 | * Bugreports.to..: <Linux390@de.ibm.com> |
8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 | 8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 |
9 | * | 9 | * |
10 | * $Revision: 1.172 $ | ||
11 | */ | 10 | */ |
12 | 11 | ||
13 | #include <linux/config.h> | 12 | #include <linux/config.h> |
@@ -153,7 +152,12 @@ static inline void | |||
153 | dasd_state_known_to_new(struct dasd_device * device) | 152 | dasd_state_known_to_new(struct dasd_device * device) |
154 | { | 153 | { |
155 | /* Forget the discipline information. */ | 154 | /* Forget the discipline information. */ |
155 | if (device->discipline) | ||
156 | module_put(device->discipline->owner); | ||
156 | device->discipline = NULL; | 157 | device->discipline = NULL; |
158 | if (device->base_discipline) | ||
159 | module_put(device->base_discipline->owner); | ||
160 | device->base_discipline = NULL; | ||
157 | device->state = DASD_STATE_NEW; | 161 | device->state = DASD_STATE_NEW; |
158 | 162 | ||
159 | dasd_free_queue(device); | 163 | dasd_free_queue(device); |
@@ -211,9 +215,10 @@ dasd_state_basic_to_known(struct dasd_device * device) | |||
211 | * interrupt for this detection ccw uses the kernel event daemon to | 215 | * interrupt for this detection ccw uses the kernel event daemon to |
212 | * trigger the call to dasd_change_state. All this is done in the | 216 | * trigger the call to dasd_change_state. All this is done in the |
213 | * discipline code, see dasd_eckd.c. | 217 | * discipline code, see dasd_eckd.c. |
214 | * After the analysis ccw is done (do_analysis returned 0 or error) | 218 | * After the analysis ccw is done (do_analysis returned 0) the block |
215 | * the block device is setup. Either a fake disk is added to allow | 219 | * device is setup. |
216 | * formatting or a proper device request queue is created. | 220 | * In case the analysis returns an error, the device setup is stopped |
221 | * (a fake disk was already added to allow formatting). | ||
217 | */ | 222 | */ |
218 | static inline int | 223 | static inline int |
219 | dasd_state_basic_to_ready(struct dasd_device * device) | 224 | dasd_state_basic_to_ready(struct dasd_device * device) |
@@ -223,13 +228,19 @@ dasd_state_basic_to_ready(struct dasd_device * device) | |||
223 | rc = 0; | 228 | rc = 0; |
224 | if (device->discipline->do_analysis != NULL) | 229 | if (device->discipline->do_analysis != NULL) |
225 | rc = device->discipline->do_analysis(device); | 230 | rc = device->discipline->do_analysis(device); |
226 | if (rc) | 231 | if (rc) { |
232 | if (rc != -EAGAIN) | ||
233 | device->state = DASD_STATE_UNFMT; | ||
227 | return rc; | 234 | return rc; |
235 | } | ||
236 | /* make disk known with correct capacity */ | ||
228 | dasd_setup_queue(device); | 237 | dasd_setup_queue(device); |
238 | set_capacity(device->gdp, device->blocks << device->s2b_shift); | ||
229 | device->state = DASD_STATE_READY; | 239 | device->state = DASD_STATE_READY; |
230 | if (dasd_scan_partitions(device) != 0) | 240 | rc = dasd_scan_partitions(device); |
241 | if (rc) | ||
231 | device->state = DASD_STATE_BASIC; | 242 | device->state = DASD_STATE_BASIC; |
232 | return 0; | 243 | return rc; |
233 | } | 244 | } |
234 | 245 | ||
235 | /* | 246 | /* |
@@ -250,6 +261,15 @@ dasd_state_ready_to_basic(struct dasd_device * device) | |||
250 | } | 261 | } |
251 | 262 | ||
252 | /* | 263 | /* |
264 | * Back to basic. | ||
265 | */ | ||
266 | static inline void | ||
267 | dasd_state_unfmt_to_basic(struct dasd_device * device) | ||
268 | { | ||
269 | device->state = DASD_STATE_BASIC; | ||
270 | } | ||
271 | |||
272 | /* | ||
253 | * Make the device online and schedule the bottom half to start | 273 | * Make the device online and schedule the bottom half to start |
254 | * the requeueing of requests from the linux request queue to the | 274 | * the requeueing of requests from the linux request queue to the |
255 | * ccw queue. | 275 | * ccw queue. |
@@ -315,8 +335,12 @@ dasd_decrease_state(struct dasd_device *device) | |||
315 | if (device->state == DASD_STATE_READY && | 335 | if (device->state == DASD_STATE_READY && |
316 | device->target <= DASD_STATE_BASIC) | 336 | device->target <= DASD_STATE_BASIC) |
317 | dasd_state_ready_to_basic(device); | 337 | dasd_state_ready_to_basic(device); |
318 | 338 | ||
319 | if (device->state == DASD_STATE_BASIC && | 339 | if (device->state == DASD_STATE_UNFMT && |
340 | device->target <= DASD_STATE_BASIC) | ||
341 | dasd_state_unfmt_to_basic(device); | ||
342 | |||
343 | if (device->state == DASD_STATE_BASIC && | ||
320 | device->target <= DASD_STATE_KNOWN) | 344 | device->target <= DASD_STATE_KNOWN) |
321 | dasd_state_basic_to_known(device); | 345 | dasd_state_basic_to_known(device); |
322 | 346 | ||
@@ -675,11 +699,8 @@ dasd_term_IO(struct dasd_ccw_req * cqr) | |||
675 | rc = ccw_device_clear(device->cdev, (long) cqr); | 699 | rc = ccw_device_clear(device->cdev, (long) cqr); |
676 | switch (rc) { | 700 | switch (rc) { |
677 | case 0: /* termination successful */ | 701 | case 0: /* termination successful */ |
678 | if (cqr->retries > 0) { | 702 | cqr->retries--; |
679 | cqr->retries--; | 703 | cqr->status = DASD_CQR_CLEAR; |
680 | cqr->status = DASD_CQR_CLEAR; | ||
681 | } else | ||
682 | cqr->status = DASD_CQR_FAILED; | ||
683 | cqr->stopclk = get_clock(); | 704 | cqr->stopclk = get_clock(); |
684 | DBF_DEV_EVENT(DBF_DEBUG, device, | 705 | DBF_DEV_EVENT(DBF_DEBUG, device, |
685 | "terminate cqr %p successful", | 706 | "terminate cqr %p successful", |
@@ -1308,7 +1329,7 @@ dasd_tasklet(struct dasd_device * device) | |||
1308 | /* Now call the callback function of requests with final status */ | 1329 | /* Now call the callback function of requests with final status */ |
1309 | list_for_each_safe(l, n, &final_queue) { | 1330 | list_for_each_safe(l, n, &final_queue) { |
1310 | cqr = list_entry(l, struct dasd_ccw_req, list); | 1331 | cqr = list_entry(l, struct dasd_ccw_req, list); |
1311 | list_del(&cqr->list); | 1332 | list_del_init(&cqr->list); |
1312 | if (cqr->callback != NULL) | 1333 | if (cqr->callback != NULL) |
1313 | (cqr->callback)(cqr, cqr->callback_data); | 1334 | (cqr->callback)(cqr, cqr->callback_data); |
1314 | } | 1335 | } |
@@ -1393,7 +1414,9 @@ _wait_for_wakeup(struct dasd_ccw_req *cqr) | |||
1393 | 1414 | ||
1394 | device = cqr->device; | 1415 | device = cqr->device; |
1395 | spin_lock_irq(get_ccwdev_lock(device->cdev)); | 1416 | spin_lock_irq(get_ccwdev_lock(device->cdev)); |
1396 | rc = cqr->status == DASD_CQR_DONE || cqr->status == DASD_CQR_FAILED; | 1417 | rc = ((cqr->status == DASD_CQR_DONE || |
1418 | cqr->status == DASD_CQR_FAILED) && | ||
1419 | list_empty(&cqr->list)); | ||
1397 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 1420 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
1398 | return rc; | 1421 | return rc; |
1399 | } | 1422 | } |
@@ -1457,15 +1480,37 @@ dasd_sleep_on_interruptible(struct dasd_ccw_req * cqr) | |||
1457 | while (!finished) { | 1480 | while (!finished) { |
1458 | rc = wait_event_interruptible(wait_q, _wait_for_wakeup(cqr)); | 1481 | rc = wait_event_interruptible(wait_q, _wait_for_wakeup(cqr)); |
1459 | if (rc != -ERESTARTSYS) { | 1482 | if (rc != -ERESTARTSYS) { |
1460 | /* Request status is either done or failed. */ | 1483 | /* Request is final (done or failed) */ |
1461 | rc = (cqr->status == DASD_CQR_FAILED) ? -EIO : 0; | 1484 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; |
1462 | break; | 1485 | break; |
1463 | } | 1486 | } |
1464 | spin_lock_irq(get_ccwdev_lock(device->cdev)); | 1487 | spin_lock_irq(get_ccwdev_lock(device->cdev)); |
1465 | if (cqr->status == DASD_CQR_IN_IO && | 1488 | switch (cqr->status) { |
1466 | device->discipline->term_IO(cqr) == 0) { | 1489 | case DASD_CQR_IN_IO: |
1467 | list_del(&cqr->list); | 1490 | /* terminate runnig cqr */ |
1491 | if (device->discipline->term_IO) { | ||
1492 | cqr->retries = -1; | ||
1493 | device->discipline->term_IO(cqr); | ||
1494 | /*nished = | ||
1495 | * wait (non-interruptible) for final status | ||
1496 | * because signal ist still pending | ||
1497 | */ | ||
1498 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | ||
1499 | wait_event(wait_q, _wait_for_wakeup(cqr)); | ||
1500 | spin_lock_irq(get_ccwdev_lock(device->cdev)); | ||
1501 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; | ||
1502 | finished = 1; | ||
1503 | } | ||
1504 | break; | ||
1505 | case DASD_CQR_QUEUED: | ||
1506 | /* request */ | ||
1507 | list_del_init(&cqr->list); | ||
1508 | rc = -EIO; | ||
1468 | finished = 1; | 1509 | finished = 1; |
1510 | break; | ||
1511 | default: | ||
1512 | /* cqr with 'non-interruptable' status - just wait */ | ||
1513 | break; | ||
1469 | } | 1514 | } |
1470 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 1515 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
1471 | } | 1516 | } |
@@ -1697,7 +1742,7 @@ dasd_open(struct inode *inp, struct file *filp) | |||
1697 | goto out; | 1742 | goto out; |
1698 | } | 1743 | } |
1699 | 1744 | ||
1700 | if (device->state < DASD_STATE_BASIC) { | 1745 | if (device->state <= DASD_STATE_BASIC) { |
1701 | DBF_DEV_EVENT(DBF_ERR, device, " %s", | 1746 | DBF_DEV_EVENT(DBF_ERR, device, " %s", |
1702 | " Cannot open unrecognized device"); | 1747 | " Cannot open unrecognized device"); |
1703 | rc = -ENODEV; | 1748 | rc = -ENODEV; |
@@ -1839,9 +1884,10 @@ dasd_generic_remove (struct ccw_device *cdev) | |||
1839 | */ | 1884 | */ |
1840 | int | 1885 | int |
1841 | dasd_generic_set_online (struct ccw_device *cdev, | 1886 | dasd_generic_set_online (struct ccw_device *cdev, |
1842 | struct dasd_discipline *discipline) | 1887 | struct dasd_discipline *base_discipline) |
1843 | 1888 | ||
1844 | { | 1889 | { |
1890 | struct dasd_discipline *discipline; | ||
1845 | struct dasd_device *device; | 1891 | struct dasd_device *device; |
1846 | int rc; | 1892 | int rc; |
1847 | 1893 | ||
@@ -1849,6 +1895,7 @@ dasd_generic_set_online (struct ccw_device *cdev, | |||
1849 | if (IS_ERR(device)) | 1895 | if (IS_ERR(device)) |
1850 | return PTR_ERR(device); | 1896 | return PTR_ERR(device); |
1851 | 1897 | ||
1898 | discipline = base_discipline; | ||
1852 | if (device->features & DASD_FEATURE_USEDIAG) { | 1899 | if (device->features & DASD_FEATURE_USEDIAG) { |
1853 | if (!dasd_diag_discipline_pointer) { | 1900 | if (!dasd_diag_discipline_pointer) { |
1854 | printk (KERN_WARNING | 1901 | printk (KERN_WARNING |
@@ -1860,6 +1907,16 @@ dasd_generic_set_online (struct ccw_device *cdev, | |||
1860 | } | 1907 | } |
1861 | discipline = dasd_diag_discipline_pointer; | 1908 | discipline = dasd_diag_discipline_pointer; |
1862 | } | 1909 | } |
1910 | if (!try_module_get(base_discipline->owner)) { | ||
1911 | dasd_delete_device(device); | ||
1912 | return -EINVAL; | ||
1913 | } | ||
1914 | if (!try_module_get(discipline->owner)) { | ||
1915 | module_put(base_discipline->owner); | ||
1916 | dasd_delete_device(device); | ||
1917 | return -EINVAL; | ||
1918 | } | ||
1919 | device->base_discipline = base_discipline; | ||
1863 | device->discipline = discipline; | 1920 | device->discipline = discipline; |
1864 | 1921 | ||
1865 | rc = discipline->check_device(device); | 1922 | rc = discipline->check_device(device); |
@@ -1868,6 +1925,8 @@ dasd_generic_set_online (struct ccw_device *cdev, | |||
1868 | "dasd_generic couldn't online device %s " | 1925 | "dasd_generic couldn't online device %s " |
1869 | "with discipline %s rc=%i\n", | 1926 | "with discipline %s rc=%i\n", |
1870 | cdev->dev.bus_id, discipline->name, rc); | 1927 | cdev->dev.bus_id, discipline->name, rc); |
1928 | module_put(discipline->owner); | ||
1929 | module_put(base_discipline->owner); | ||
1871 | dasd_delete_device(device); | 1930 | dasd_delete_device(device); |
1872 | return rc; | 1931 | return rc; |
1873 | } | 1932 | } |
diff --git a/drivers/s390/block/dasd_3370_erp.c b/drivers/s390/block/dasd_3370_erp.c index 84565c8f584e..1d11c2a9525d 100644 --- a/drivers/s390/block/dasd_3370_erp.c +++ b/drivers/s390/block/dasd_3370_erp.c | |||
@@ -4,7 +4,6 @@ | |||
4 | * Bugreports.to..: <Linux390@de.ibm.com> | 4 | * Bugreports.to..: <Linux390@de.ibm.com> |
5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 | 5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 |
6 | * | 6 | * |
7 | * $Revision: 1.9 $ | ||
8 | */ | 7 | */ |
9 | 8 | ||
10 | #define PRINTK_HEADER "dasd_erp(3370)" | 9 | #define PRINTK_HEADER "dasd_erp(3370)" |
diff --git a/drivers/s390/block/dasd_3990_erp.c b/drivers/s390/block/dasd_3990_erp.c index c143ecb53d9d..4ee0f934e325 100644 --- a/drivers/s390/block/dasd_3990_erp.c +++ b/drivers/s390/block/dasd_3990_erp.c | |||
@@ -5,7 +5,6 @@ | |||
5 | * Bugreports.to..: <Linux390@de.ibm.com> | 5 | * Bugreports.to..: <Linux390@de.ibm.com> |
6 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000, 2001 | 6 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000, 2001 |
7 | * | 7 | * |
8 | * $Revision: 1.36 $ | ||
9 | */ | 8 | */ |
10 | 9 | ||
11 | #include <linux/timer.h> | 10 | #include <linux/timer.h> |
diff --git a/drivers/s390/block/dasd_9336_erp.c b/drivers/s390/block/dasd_9336_erp.c index 01e87170a3a2..dc861446d056 100644 --- a/drivers/s390/block/dasd_9336_erp.c +++ b/drivers/s390/block/dasd_9336_erp.c | |||
@@ -4,7 +4,6 @@ | |||
4 | * Bugreports.to..: <Linux390@de.ibm.com> | 4 | * Bugreports.to..: <Linux390@de.ibm.com> |
5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 | 5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 |
6 | * | 6 | * |
7 | * $Revision: 1.8 $ | ||
8 | */ | 7 | */ |
9 | 8 | ||
10 | #define PRINTK_HEADER "dasd_erp(9336)" | 9 | #define PRINTK_HEADER "dasd_erp(9336)" |
diff --git a/drivers/s390/block/dasd_9343_erp.c b/drivers/s390/block/dasd_9343_erp.c index 2a23b74faf3f..4a5b79569aaa 100644 --- a/drivers/s390/block/dasd_9343_erp.c +++ b/drivers/s390/block/dasd_9343_erp.c | |||
@@ -4,7 +4,6 @@ | |||
4 | * Bugreports.to..: <Linux390@de.ibm.com> | 4 | * Bugreports.to..: <Linux390@de.ibm.com> |
5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 | 5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 2000 |
6 | * | 6 | * |
7 | * $Revision: 1.13 $ | ||
8 | */ | 7 | */ |
9 | 8 | ||
10 | #define PRINTK_HEADER "dasd_erp(9343)" | 9 | #define PRINTK_HEADER "dasd_erp(9343)" |
diff --git a/drivers/s390/block/dasd_cmb.c b/drivers/s390/block/dasd_cmb.c index 4f365bff275c..e88f73ee72ce 100644 --- a/drivers/s390/block/dasd_cmb.c +++ b/drivers/s390/block/dasd_cmb.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/s390/block/dasd_cmb.c ($Revision: 1.9 $) | ||
3 | * | ||
4 | * Linux on zSeries Channel Measurement Facility support | 2 | * Linux on zSeries Channel Measurement Facility support |
5 | * (dasd device driver interface) | 3 | * (dasd device driver interface) |
6 | * | 4 | * |
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c index caee16a3dc62..1629b27c48ab 100644 --- a/drivers/s390/block/dasd_devmap.c +++ b/drivers/s390/block/dasd_devmap.c | |||
@@ -11,7 +11,6 @@ | |||
11 | * functions may not be called from interrupt context. In particular | 11 | * functions may not be called from interrupt context. In particular |
12 | * dasd_get_device is a no-no from interrupt context. | 12 | * dasd_get_device is a no-no from interrupt context. |
13 | * | 13 | * |
14 | * $Revision: 1.43 $ | ||
15 | */ | 14 | */ |
16 | 15 | ||
17 | #include <linux/config.h> | 16 | #include <linux/config.h> |
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index ba80fdea7ebf..3f9d704d2657 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c | |||
@@ -6,7 +6,6 @@ | |||
6 | * Bugreports.to..: <Linux390@de.ibm.com> | 6 | * Bugreports.to..: <Linux390@de.ibm.com> |
7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
8 | * | 8 | * |
9 | * $Revision: 1.53 $ | ||
10 | */ | 9 | */ |
11 | 10 | ||
12 | #include <linux/config.h> | 11 | #include <linux/config.h> |
diff --git a/drivers/s390/block/dasd_diag.h b/drivers/s390/block/dasd_diag.h index a4f80bd735f1..38a4e55f8953 100644 --- a/drivers/s390/block/dasd_diag.h +++ b/drivers/s390/block/dasd_diag.h | |||
@@ -6,7 +6,6 @@ | |||
6 | * Bugreports.to..: <Linux390@de.ibm.com> | 6 | * Bugreports.to..: <Linux390@de.ibm.com> |
7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
8 | * | 8 | * |
9 | * $Revision: 1.9 $ | ||
10 | */ | 9 | */ |
11 | 10 | ||
12 | #define MDSK_WRITE_REQ 0x01 | 11 | #define MDSK_WRITE_REQ 0x01 |
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c index 96eb48258580..822e2a265578 100644 --- a/drivers/s390/block/dasd_eckd.c +++ b/drivers/s390/block/dasd_eckd.c | |||
@@ -7,7 +7,6 @@ | |||
7 | * Bugreports.to..: <Linux390@de.ibm.com> | 7 | * Bugreports.to..: <Linux390@de.ibm.com> |
8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
9 | * | 9 | * |
10 | * $Revision: 1.74 $ | ||
11 | */ | 10 | */ |
12 | 11 | ||
13 | #include <linux/config.h> | 12 | #include <linux/config.h> |
diff --git a/drivers/s390/block/dasd_eckd.h b/drivers/s390/block/dasd_eckd.h index b6888c68b224..bc3823d35223 100644 --- a/drivers/s390/block/dasd_eckd.h +++ b/drivers/s390/block/dasd_eckd.h | |||
@@ -5,7 +5,6 @@ | |||
5 | * Bugreports.to..: <Linux390@de.ibm.com> | 5 | * Bugreports.to..: <Linux390@de.ibm.com> |
6 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 6 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
7 | * | 7 | * |
8 | * $Revision: 1.10 $ | ||
9 | */ | 8 | */ |
10 | 9 | ||
11 | #ifndef DASD_ECKD_H | 10 | #ifndef DASD_ECKD_H |
diff --git a/drivers/s390/block/dasd_erp.c b/drivers/s390/block/dasd_erp.c index 7cb98d25f341..8fd71ab02ef0 100644 --- a/drivers/s390/block/dasd_erp.c +++ b/drivers/s390/block/dasd_erp.c | |||
@@ -7,7 +7,6 @@ | |||
7 | * Bugreports.to..: <Linux390@de.ibm.com> | 7 | * Bugreports.to..: <Linux390@de.ibm.com> |
8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 | 8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 |
9 | * | 9 | * |
10 | * $Revision: 1.14 $ | ||
11 | */ | 10 | */ |
12 | 11 | ||
13 | #include <linux/config.h> | 12 | #include <linux/config.h> |
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c index 8ec75dc08e2c..91145698f8e9 100644 --- a/drivers/s390/block/dasd_fba.c +++ b/drivers/s390/block/dasd_fba.c | |||
@@ -4,7 +4,6 @@ | |||
4 | * Bugreports.to..: <Linux390@de.ibm.com> | 4 | * Bugreports.to..: <Linux390@de.ibm.com> |
5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
6 | * | 6 | * |
7 | * $Revision: 1.41 $ | ||
8 | */ | 7 | */ |
9 | 8 | ||
10 | #include <linux/config.h> | 9 | #include <linux/config.h> |
diff --git a/drivers/s390/block/dasd_fba.h b/drivers/s390/block/dasd_fba.h index 624f0402ee22..da1fa91fc01d 100644 --- a/drivers/s390/block/dasd_fba.h +++ b/drivers/s390/block/dasd_fba.h | |||
@@ -4,7 +4,6 @@ | |||
4 | * Bugreports.to..: <Linux390@de.ibm.com> | 4 | * Bugreports.to..: <Linux390@de.ibm.com> |
5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 5 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
6 | * | 6 | * |
7 | * $Revision: 1.6 $ | ||
8 | */ | 7 | */ |
9 | 8 | ||
10 | #ifndef DASD_FBA_H | 9 | #ifndef DASD_FBA_H |
diff --git a/drivers/s390/block/dasd_genhd.c b/drivers/s390/block/dasd_genhd.c index a601c9a33541..fce2835e7d19 100644 --- a/drivers/s390/block/dasd_genhd.c +++ b/drivers/s390/block/dasd_genhd.c | |||
@@ -9,7 +9,6 @@ | |||
9 | * | 9 | * |
10 | * gendisk related functions for the dasd driver. | 10 | * gendisk related functions for the dasd driver. |
11 | * | 11 | * |
12 | * $Revision: 1.51 $ | ||
13 | */ | 12 | */ |
14 | 13 | ||
15 | #include <linux/config.h> | 14 | #include <linux/config.h> |
@@ -101,8 +100,6 @@ dasd_scan_partitions(struct dasd_device * device) | |||
101 | { | 100 | { |
102 | struct block_device *bdev; | 101 | struct block_device *bdev; |
103 | 102 | ||
104 | /* Make the disk known. */ | ||
105 | set_capacity(device->gdp, device->blocks << device->s2b_shift); | ||
106 | bdev = bdget_disk(device->gdp, 0); | 103 | bdev = bdget_disk(device->gdp, 0); |
107 | if (!bdev || blkdev_get(bdev, FMODE_READ, 1) < 0) | 104 | if (!bdev || blkdev_get(bdev, FMODE_READ, 1) < 0) |
108 | return -ENODEV; | 105 | return -ENODEV; |
diff --git a/drivers/s390/block/dasd_int.h b/drivers/s390/block/dasd_int.h index e4b401500b01..7cb0b9e78a6a 100644 --- a/drivers/s390/block/dasd_int.h +++ b/drivers/s390/block/dasd_int.h | |||
@@ -6,7 +6,6 @@ | |||
6 | * Bugreports.to..: <Linux390@de.ibm.com> | 6 | * Bugreports.to..: <Linux390@de.ibm.com> |
7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 | 7 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 |
8 | * | 8 | * |
9 | * $Revision: 1.68 $ | ||
10 | */ | 9 | */ |
11 | 10 | ||
12 | #ifndef DASD_INT_H | 11 | #ifndef DASD_INT_H |
@@ -27,7 +26,7 @@ | |||
27 | * new: the dasd_device structure is allocated. | 26 | * new: the dasd_device structure is allocated. |
28 | * known: the discipline for the device is identified. | 27 | * known: the discipline for the device is identified. |
29 | * basic: the device can do basic i/o. | 28 | * basic: the device can do basic i/o. |
30 | * accept: the device is analysed (format is known). | 29 | * unfmt: the device could not be analyzed (format is unknown). |
31 | * ready: partition detection is done and the device is can do block io. | 30 | * ready: partition detection is done and the device is can do block io. |
32 | * online: the device accepts requests from the block device queue. | 31 | * online: the device accepts requests from the block device queue. |
33 | * | 32 | * |
@@ -48,8 +47,9 @@ | |||
48 | #define DASD_STATE_NEW 0 | 47 | #define DASD_STATE_NEW 0 |
49 | #define DASD_STATE_KNOWN 1 | 48 | #define DASD_STATE_KNOWN 1 |
50 | #define DASD_STATE_BASIC 2 | 49 | #define DASD_STATE_BASIC 2 |
51 | #define DASD_STATE_READY 3 | 50 | #define DASD_STATE_UNFMT 3 |
52 | #define DASD_STATE_ONLINE 4 | 51 | #define DASD_STATE_READY 4 |
52 | #define DASD_STATE_ONLINE 5 | ||
53 | 53 | ||
54 | #include <linux/module.h> | 54 | #include <linux/module.h> |
55 | #include <linux/wait.h> | 55 | #include <linux/wait.h> |
@@ -291,6 +291,7 @@ struct dasd_device { | |||
291 | 291 | ||
292 | /* Device discipline stuff. */ | 292 | /* Device discipline stuff. */ |
293 | struct dasd_discipline *discipline; | 293 | struct dasd_discipline *discipline; |
294 | struct dasd_discipline *base_discipline; | ||
294 | char *private; | 295 | char *private; |
295 | 296 | ||
296 | /* Device state and target state. */ | 297 | /* Device state and target state. */ |
diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c index 9396fcacb8f8..fafeeae52675 100644 --- a/drivers/s390/block/dasd_ioctl.c +++ b/drivers/s390/block/dasd_ioctl.c | |||
@@ -7,8 +7,6 @@ | |||
7 | * Bugreports.to..: <Linux390@de.ibm.com> | 7 | * Bugreports.to..: <Linux390@de.ibm.com> |
8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 | 8 | * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999-2001 |
9 | * | 9 | * |
10 | * $Revision: 1.50 $ | ||
11 | * | ||
12 | * i/o controls for the dasd driver. | 10 | * i/o controls for the dasd driver. |
13 | */ | 11 | */ |
14 | #include <linux/config.h> | 12 | #include <linux/config.h> |
@@ -423,8 +421,15 @@ dasd_ioctl_information(struct block_device *bdev, int no, long args) | |||
423 | dasd_info->cu_model = cdev->id.cu_model; | 421 | dasd_info->cu_model = cdev->id.cu_model; |
424 | dasd_info->dev_type = cdev->id.dev_type; | 422 | dasd_info->dev_type = cdev->id.dev_type; |
425 | dasd_info->dev_model = cdev->id.dev_model; | 423 | dasd_info->dev_model = cdev->id.dev_model; |
426 | dasd_info->open_count = atomic_read(&device->open_count); | ||
427 | dasd_info->status = device->state; | 424 | dasd_info->status = device->state; |
425 | /* | ||
426 | * The open_count is increased for every opener, that includes | ||
427 | * the blkdev_get in dasd_scan_partitions. | ||
428 | * This must be hidden from user-space. | ||
429 | */ | ||
430 | dasd_info->open_count = atomic_read(&device->open_count); | ||
431 | if (!device->bdev) | ||
432 | dasd_info->open_count++; | ||
428 | 433 | ||
429 | /* | 434 | /* |
430 | * check if device is really formatted | 435 | * check if device is really formatted |
diff --git a/drivers/s390/block/dasd_proc.c b/drivers/s390/block/dasd_proc.c index fff9020d4886..1aa3c261718a 100644 --- a/drivers/s390/block/dasd_proc.c +++ b/drivers/s390/block/dasd_proc.c | |||
@@ -9,7 +9,6 @@ | |||
9 | * | 9 | * |
10 | * /proc interface for the dasd driver. | 10 | * /proc interface for the dasd driver. |
11 | * | 11 | * |
12 | * $Revision: 1.33 $ | ||
13 | */ | 12 | */ |
14 | 13 | ||
15 | #include <linux/config.h> | 14 | #include <linux/config.h> |
@@ -94,6 +93,9 @@ dasd_devices_show(struct seq_file *m, void *v) | |||
94 | case DASD_STATE_BASIC: | 93 | case DASD_STATE_BASIC: |
95 | seq_printf(m, "basic"); | 94 | seq_printf(m, "basic"); |
96 | break; | 95 | break; |
96 | case DASD_STATE_UNFMT: | ||
97 | seq_printf(m, "unformatted"); | ||
98 | break; | ||
97 | case DASD_STATE_READY: | 99 | case DASD_STATE_READY: |
98 | case DASD_STATE_ONLINE: | 100 | case DASD_STATE_ONLINE: |
99 | seq_printf(m, "active "); | 101 | seq_printf(m, "active "); |
diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c index 1f060914cfa4..606f6ad285a0 100644 --- a/drivers/s390/char/con3215.c +++ b/drivers/s390/char/con3215.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/init.h> | 21 | #include <linux/init.h> |
22 | #include <linux/console.h> | 22 | #include <linux/console.h> |
23 | #include <linux/interrupt.h> | 23 | #include <linux/interrupt.h> |
24 | #include <linux/err.h> | ||
24 | 25 | ||
25 | #include <linux/slab.h> | 26 | #include <linux/slab.h> |
26 | #include <linux/bootmem.h> | 27 | #include <linux/bootmem.h> |
@@ -864,7 +865,7 @@ con3215_init(void) | |||
864 | } | 865 | } |
865 | 866 | ||
866 | cdev = ccw_device_probe_console(); | 867 | cdev = ccw_device_probe_console(); |
867 | if (!cdev) | 868 | if (IS_ERR(cdev)) |
868 | return -ENODEV; | 869 | return -ENODEV; |
869 | 870 | ||
870 | raw3215[0] = raw = (struct raw3215_info *) | 871 | raw3215[0] = raw = (struct raw3215_info *) |
diff --git a/drivers/s390/char/con3270.c b/drivers/s390/char/con3270.c index c570a9f6ce9c..ef607a1de55a 100644 --- a/drivers/s390/char/con3270.c +++ b/drivers/s390/char/con3270.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/interrupt.h> | 15 | #include <linux/interrupt.h> |
16 | #include <linux/list.h> | 16 | #include <linux/list.h> |
17 | #include <linux/types.h> | 17 | #include <linux/types.h> |
18 | #include <linux/err.h> | ||
18 | 19 | ||
19 | #include <asm/ccwdev.h> | 20 | #include <asm/ccwdev.h> |
20 | #include <asm/cio.h> | 21 | #include <asm/cio.h> |
@@ -597,7 +598,7 @@ con3270_init(void) | |||
597 | } | 598 | } |
598 | 599 | ||
599 | cdev = ccw_device_probe_console(); | 600 | cdev = ccw_device_probe_console(); |
600 | if (!cdev) | 601 | if (IS_ERR(cdev)) |
601 | return -ENODEV; | 602 | return -ENODEV; |
602 | rp = raw3270_setup_console(cdev); | 603 | rp = raw3270_setup_console(cdev); |
603 | if (IS_ERR(rp)) | 604 | if (IS_ERR(rp)) |
diff --git a/drivers/s390/char/keyboard.c b/drivers/s390/char/keyboard.c index 5bda2340a39d..a317a123daba 100644 --- a/drivers/s390/char/keyboard.c +++ b/drivers/s390/char/keyboard.c | |||
@@ -440,7 +440,11 @@ do_kdgkb_ioctl(struct kbd_data *kbd, struct kbsentry __user *u_kbs, | |||
440 | return -EPERM; | 440 | return -EPERM; |
441 | len = strnlen_user(u_kbs->kb_string, | 441 | len = strnlen_user(u_kbs->kb_string, |
442 | sizeof(u_kbs->kb_string) - 1); | 442 | sizeof(u_kbs->kb_string) - 1); |
443 | p = kmalloc(len, GFP_KERNEL); | 443 | if (!len) |
444 | return -EFAULT; | ||
445 | if (len > sizeof(u_kbs->kb_string) - 1) | ||
446 | return -EINVAL; | ||
447 | p = kmalloc(len + 1, GFP_KERNEL); | ||
444 | if (!p) | 448 | if (!p) |
445 | return -ENOMEM; | 449 | return -ENOMEM; |
446 | if (copy_from_user(p, u_kbs->kb_string, len)) { | 450 | if (copy_from_user(p, u_kbs->kb_string, len)) { |
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index ceb0e474fde4..4138564402b8 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c | |||
@@ -85,11 +85,10 @@ static volatile enum sclp_mask_state_t { | |||
85 | /* Maximum retry counts */ | 85 | /* Maximum retry counts */ |
86 | #define SCLP_INIT_RETRY 3 | 86 | #define SCLP_INIT_RETRY 3 |
87 | #define SCLP_MASK_RETRY 3 | 87 | #define SCLP_MASK_RETRY 3 |
88 | #define SCLP_REQUEST_RETRY 3 | ||
89 | 88 | ||
90 | /* Timeout intervals in seconds.*/ | 89 | /* Timeout intervals in seconds.*/ |
91 | #define SCLP_BUSY_INTERVAL 2 | 90 | #define SCLP_BUSY_INTERVAL 10 |
92 | #define SCLP_RETRY_INTERVAL 5 | 91 | #define SCLP_RETRY_INTERVAL 15 |
93 | 92 | ||
94 | static void sclp_process_queue(void); | 93 | static void sclp_process_queue(void); |
95 | static int sclp_init_mask(int calculate); | 94 | static int sclp_init_mask(int calculate); |
@@ -153,11 +152,9 @@ __sclp_start_request(struct sclp_req *req) | |||
153 | if (sclp_running_state != sclp_running_state_idle) | 152 | if (sclp_running_state != sclp_running_state_idle) |
154 | return 0; | 153 | return 0; |
155 | del_timer(&sclp_request_timer); | 154 | del_timer(&sclp_request_timer); |
156 | if (req->start_count <= SCLP_REQUEST_RETRY) { | 155 | rc = service_call(req->command, req->sccb); |
157 | rc = service_call(req->command, req->sccb); | 156 | req->start_count++; |
158 | req->start_count++; | 157 | |
159 | } else | ||
160 | rc = -EIO; | ||
161 | if (rc == 0) { | 158 | if (rc == 0) { |
162 | /* Sucessfully started request */ | 159 | /* Sucessfully started request */ |
163 | req->status = SCLP_REQ_RUNNING; | 160 | req->status = SCLP_REQ_RUNNING; |
diff --git a/drivers/s390/char/tape_34xx.c b/drivers/s390/char/tape_34xx.c index 20be88e91fa1..682039cac15b 100644 --- a/drivers/s390/char/tape_34xx.c +++ b/drivers/s390/char/tape_34xx.c | |||
@@ -1357,7 +1357,7 @@ tape_34xx_init (void) | |||
1357 | debug_set_level(TAPE_DBF_AREA, 6); | 1357 | debug_set_level(TAPE_DBF_AREA, 6); |
1358 | #endif | 1358 | #endif |
1359 | 1359 | ||
1360 | DBF_EVENT(3, "34xx init: $Revision: 1.23 $\n"); | 1360 | DBF_EVENT(3, "34xx init\n"); |
1361 | /* Register driver for 3480/3490 tapes. */ | 1361 | /* Register driver for 3480/3490 tapes. */ |
1362 | rc = ccw_driver_register(&tape_34xx_driver); | 1362 | rc = ccw_driver_register(&tape_34xx_driver); |
1363 | if (rc) | 1363 | if (rc) |
@@ -1377,8 +1377,7 @@ tape_34xx_exit(void) | |||
1377 | 1377 | ||
1378 | MODULE_DEVICE_TABLE(ccw, tape_34xx_ids); | 1378 | MODULE_DEVICE_TABLE(ccw, tape_34xx_ids); |
1379 | MODULE_AUTHOR("(C) 2001-2002 IBM Deutschland Entwicklung GmbH"); | 1379 | MODULE_AUTHOR("(C) 2001-2002 IBM Deutschland Entwicklung GmbH"); |
1380 | MODULE_DESCRIPTION("Linux on zSeries channel attached 3480 tape " | 1380 | MODULE_DESCRIPTION("Linux on zSeries channel attached 3480 tape device driver"); |
1381 | "device driver ($Revision: 1.23 $)"); | ||
1382 | MODULE_LICENSE("GPL"); | 1381 | MODULE_LICENSE("GPL"); |
1383 | 1382 | ||
1384 | module_init(tape_34xx_init); | 1383 | module_init(tape_34xx_init); |
diff --git a/drivers/s390/char/tape_class.c b/drivers/s390/char/tape_class.c index fcaee447d6fe..b3569c82bb16 100644 --- a/drivers/s390/char/tape_class.c +++ b/drivers/s390/char/tape_class.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * (C) Copyright IBM Corp. 2004 | 2 | * (C) Copyright IBM Corp. 2004 |
3 | * tape_class.c ($Revision: 1.8 $) | 3 | * tape_class.c |
4 | * | 4 | * |
5 | * Tape class device support | 5 | * Tape class device support |
6 | * | 6 | * |
@@ -12,7 +12,7 @@ | |||
12 | MODULE_AUTHOR("Stefan Bader <shbader@de.ibm.com>"); | 12 | MODULE_AUTHOR("Stefan Bader <shbader@de.ibm.com>"); |
13 | MODULE_DESCRIPTION( | 13 | MODULE_DESCRIPTION( |
14 | "(C) Copyright IBM Corp. 2004 All Rights Reserved.\n" | 14 | "(C) Copyright IBM Corp. 2004 All Rights Reserved.\n" |
15 | "tape_class.c ($Revision: 1.8 $)" | 15 | "tape_class.c" |
16 | ); | 16 | ); |
17 | MODULE_LICENSE("GPL"); | 17 | MODULE_LICENSE("GPL"); |
18 | 18 | ||
diff --git a/drivers/s390/char/tape_class.h b/drivers/s390/char/tape_class.h index 33133ad00ba2..3d0ca054cdee 100644 --- a/drivers/s390/char/tape_class.h +++ b/drivers/s390/char/tape_class.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * (C) Copyright IBM Corp. 2004 All Rights Reserved. | 2 | * (C) Copyright IBM Corp. 2004 All Rights Reserved. |
3 | * tape_class.h ($Revision: 1.4 $) | 3 | * tape_class.h |
4 | * | 4 | * |
5 | * Tape class device support | 5 | * Tape class device support |
6 | * | 6 | * |
diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c index 8f486e1a8507..4ea438c749c9 100644 --- a/drivers/s390/char/tape_core.c +++ b/drivers/s390/char/tape_core.c | |||
@@ -1239,7 +1239,7 @@ tape_init (void) | |||
1239 | #ifdef DBF_LIKE_HELL | 1239 | #ifdef DBF_LIKE_HELL |
1240 | debug_set_level(TAPE_DBF_AREA, 6); | 1240 | debug_set_level(TAPE_DBF_AREA, 6); |
1241 | #endif | 1241 | #endif |
1242 | DBF_EVENT(3, "tape init: ($Revision: 1.54 $)\n"); | 1242 | DBF_EVENT(3, "tape init\n"); |
1243 | tape_proc_init(); | 1243 | tape_proc_init(); |
1244 | tapechar_init (); | 1244 | tapechar_init (); |
1245 | tapeblock_init (); | 1245 | tapeblock_init (); |
@@ -1263,8 +1263,7 @@ tape_exit(void) | |||
1263 | 1263 | ||
1264 | MODULE_AUTHOR("(C) 2001 IBM Deutschland Entwicklung GmbH by Carsten Otte and " | 1264 | MODULE_AUTHOR("(C) 2001 IBM Deutschland Entwicklung GmbH by Carsten Otte and " |
1265 | "Michael Holzheu (cotte@de.ibm.com,holzheu@de.ibm.com)"); | 1265 | "Michael Holzheu (cotte@de.ibm.com,holzheu@de.ibm.com)"); |
1266 | MODULE_DESCRIPTION("Linux on zSeries channel attached " | 1266 | MODULE_DESCRIPTION("Linux on zSeries channel attached tape device driver"); |
1267 | "tape device driver ($Revision: 1.54 $)"); | ||
1268 | MODULE_LICENSE("GPL"); | 1267 | MODULE_LICENSE("GPL"); |
1269 | 1268 | ||
1270 | module_init(tape_init); | 1269 | module_init(tape_init); |
diff --git a/drivers/s390/cio/airq.c b/drivers/s390/cio/airq.c index cd2cc28e16a7..5287631fbfc8 100644 --- a/drivers/s390/cio/airq.c +++ b/drivers/s390/cio/airq.c | |||
@@ -2,8 +2,6 @@ | |||
2 | * drivers/s390/cio/airq.c | 2 | * drivers/s390/cio/airq.c |
3 | * S/390 common I/O routines -- support for adapter interruptions | 3 | * S/390 common I/O routines -- support for adapter interruptions |
4 | * | 4 | * |
5 | * $Revision: 1.15 $ | ||
6 | * | ||
7 | * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, | 5 | * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, |
8 | * IBM Corporation | 6 | * IBM Corporation |
9 | * Author(s): Ingo Adlung (adlung@de.ibm.com) | 7 | * Author(s): Ingo Adlung (adlung@de.ibm.com) |
diff --git a/drivers/s390/cio/blacklist.c b/drivers/s390/cio/blacklist.c index 72f27c151c09..cb8e2e672b68 100644 --- a/drivers/s390/cio/blacklist.c +++ b/drivers/s390/cio/blacklist.c | |||
@@ -1,7 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/s390/cio/blacklist.c | 2 | * drivers/s390/cio/blacklist.c |
3 | * S/390 common I/O routines -- blacklisting of specific devices | 3 | * S/390 common I/O routines -- blacklisting of specific devices |
4 | * $Revision: 1.42 $ | ||
5 | * | 4 | * |
6 | * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, | 5 | * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, |
7 | * IBM Corporation | 6 | * IBM Corporation |
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c index 6c077ad71edc..8013c8eb76fe 100644 --- a/drivers/s390/cio/ccwgroup.c +++ b/drivers/s390/cio/ccwgroup.c | |||
@@ -1,7 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/s390/cio/ccwgroup.c | 2 | * drivers/s390/cio/ccwgroup.c |
3 | * bus driver for ccwgroup | 3 | * bus driver for ccwgroup |
4 | * $Revision: 1.35 $ | ||
5 | * | 4 | * |
6 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, | 5 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, |
7 | * IBM Corporation | 6 | * IBM Corporation |
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index 2cbb724791a8..f4183d660258 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c | |||
@@ -1,7 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/s390/cio/chsc.c | 2 | * drivers/s390/cio/chsc.c |
3 | * S/390 common I/O routines -- channel subsystem call | 3 | * S/390 common I/O routines -- channel subsystem call |
4 | * $Revision: 1.128 $ | ||
5 | * | 4 | * |
6 | * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, | 5 | * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, |
7 | * IBM Corporation | 6 | * IBM Corporation |
@@ -233,7 +232,7 @@ s390_subchannel_remove_chpid(struct device *dev, void *data) | |||
233 | return 0; | 232 | return 0; |
234 | 233 | ||
235 | mask = 0x80 >> j; | 234 | mask = 0x80 >> j; |
236 | spin_lock(&sch->lock); | 235 | spin_lock_irq(&sch->lock); |
237 | 236 | ||
238 | stsch(sch->schid, &schib); | 237 | stsch(sch->schid, &schib); |
239 | if (!schib.pmcw.dnv) | 238 | if (!schib.pmcw.dnv) |
@@ -282,10 +281,10 @@ s390_subchannel_remove_chpid(struct device *dev, void *data) | |||
282 | if (sch->driver && sch->driver->verify) | 281 | if (sch->driver && sch->driver->verify) |
283 | sch->driver->verify(&sch->dev); | 282 | sch->driver->verify(&sch->dev); |
284 | out_unlock: | 283 | out_unlock: |
285 | spin_unlock(&sch->lock); | 284 | spin_unlock_irq(&sch->lock); |
286 | return 0; | 285 | return 0; |
287 | out_unreg: | 286 | out_unreg: |
288 | spin_unlock(&sch->lock); | 287 | spin_unlock_irq(&sch->lock); |
289 | sch->lpm = 0; | 288 | sch->lpm = 0; |
290 | if (css_enqueue_subchannel_slow(sch->schid)) { | 289 | if (css_enqueue_subchannel_slow(sch->schid)) { |
291 | css_clear_subchannel_slow_list(); | 290 | css_clear_subchannel_slow_list(); |
@@ -653,7 +652,7 @@ __chp_add(struct subchannel_id schid, void *data) | |||
653 | if (!sch) | 652 | if (!sch) |
654 | /* Check if the subchannel is now available. */ | 653 | /* Check if the subchannel is now available. */ |
655 | return __chp_add_new_sch(schid); | 654 | return __chp_add_new_sch(schid); |
656 | spin_lock(&sch->lock); | 655 | spin_lock_irq(&sch->lock); |
657 | for (i=0; i<8; i++) | 656 | for (i=0; i<8; i++) |
658 | if (sch->schib.pmcw.chpid[i] == chp->id) { | 657 | if (sch->schib.pmcw.chpid[i] == chp->id) { |
659 | if (stsch(sch->schid, &sch->schib) != 0) { | 658 | if (stsch(sch->schid, &sch->schib) != 0) { |
@@ -675,7 +674,7 @@ __chp_add(struct subchannel_id schid, void *data) | |||
675 | if (sch->driver && sch->driver->verify) | 674 | if (sch->driver && sch->driver->verify) |
676 | sch->driver->verify(&sch->dev); | 675 | sch->driver->verify(&sch->dev); |
677 | 676 | ||
678 | spin_unlock(&sch->lock); | 677 | spin_unlock_irq(&sch->lock); |
679 | put_device(&sch->dev); | 678 | put_device(&sch->dev); |
680 | return 0; | 679 | return 0; |
681 | } | 680 | } |
@@ -1116,6 +1115,9 @@ chsc_enable_facility(int operation_code) | |||
1116 | goto out; | 1115 | goto out; |
1117 | } | 1116 | } |
1118 | switch (sda_area->response.code) { | 1117 | switch (sda_area->response.code) { |
1118 | case 0x0001: /* everything ok */ | ||
1119 | ret = 0; | ||
1120 | break; | ||
1119 | case 0x0003: /* invalid request block */ | 1121 | case 0x0003: /* invalid request block */ |
1120 | case 0x0007: | 1122 | case 0x0007: |
1121 | ret = -EINVAL; | 1123 | ret = -EINVAL; |
@@ -1124,6 +1126,8 @@ chsc_enable_facility(int operation_code) | |||
1124 | case 0x0101: /* facility not provided */ | 1126 | case 0x0101: /* facility not provided */ |
1125 | ret = -EOPNOTSUPP; | 1127 | ret = -EOPNOTSUPP; |
1126 | break; | 1128 | break; |
1129 | default: /* something went wrong */ | ||
1130 | ret = -EIO; | ||
1127 | } | 1131 | } |
1128 | out: | 1132 | out: |
1129 | free_page((unsigned long)sda_area); | 1133 | free_page((unsigned long)sda_area); |
diff --git a/drivers/s390/cio/chsc.h b/drivers/s390/cio/chsc.h index 44e4b4bb1c5a..3e75095f35d0 100644 --- a/drivers/s390/cio/chsc.h +++ b/drivers/s390/cio/chsc.h | |||
@@ -68,6 +68,6 @@ extern void *chsc_get_chp_desc(struct subchannel*, int); | |||
68 | 68 | ||
69 | extern int chsc_enable_facility(int); | 69 | extern int chsc_enable_facility(int); |
70 | 70 | ||
71 | #define to_channelpath(dev) container_of(dev, struct channel_path, dev) | 71 | #define to_channelpath(device) container_of(device, struct channel_path, dev) |
72 | 72 | ||
73 | #endif | 73 | #endif |
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index 6223b06d27d5..cbb86fa5f293 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c | |||
@@ -1,7 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/s390/cio/cio.c | 2 | * drivers/s390/cio/cio.c |
3 | * S/390 common I/O routines -- low level i/o calls | 3 | * S/390 common I/O routines -- low level i/o calls |
4 | * $Revision: 1.140 $ | ||
5 | * | 4 | * |
6 | * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, | 5 | * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH, |
7 | * IBM Corporation | 6 | * IBM Corporation |
diff --git a/drivers/s390/cio/cmf.c b/drivers/s390/cio/cmf.c index 0b03714e696a..07ef3f640f4a 100644 --- a/drivers/s390/cio/cmf.c +++ b/drivers/s390/cio/cmf.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/s390/cio/cmf.c ($Revision: 1.19 $) | 2 | * linux/drivers/s390/cio/cmf.c |
3 | * | 3 | * |
4 | * Linux on zSeries Channel Measurement Facility support | 4 | * Linux on zSeries Channel Measurement Facility support |
5 | * | 5 | * |
diff --git a/drivers/s390/cio/css.c b/drivers/s390/cio/css.c index 516108779f60..3c77d65960db 100644 --- a/drivers/s390/cio/css.c +++ b/drivers/s390/cio/css.c | |||
@@ -1,7 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/s390/cio/css.c | 2 | * drivers/s390/cio/css.c |
3 | * driver for channel subsystem | 3 | * driver for channel subsystem |
4 | * $Revision: 1.96 $ | ||
5 | * | 4 | * |
6 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, | 5 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, |
7 | * IBM Corporation | 6 | * IBM Corporation |
@@ -410,6 +409,9 @@ __init_channel_subsystem(struct subchannel_id schid, void *data) | |||
410 | /* -ENXIO: no more subchannels. */ | 409 | /* -ENXIO: no more subchannels. */ |
411 | case -ENXIO: | 410 | case -ENXIO: |
412 | return ret; | 411 | return ret; |
412 | /* -EIO: this subchannel set not supported. */ | ||
413 | case -EIO: | ||
414 | return ret; | ||
413 | default: | 415 | default: |
414 | return 0; | 416 | return 0; |
415 | } | 417 | } |
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index a67e7e60e330..afc4e88551ad 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
@@ -1,7 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/s390/cio/device.c | 2 | * drivers/s390/cio/device.c |
3 | * bus driver for ccw devices | 3 | * bus driver for ccw devices |
4 | * $Revision: 1.140 $ | ||
5 | * | 4 | * |
6 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, | 5 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, |
7 | * IBM Corporation | 6 | * IBM Corporation |
@@ -255,7 +254,7 @@ modalias_show (struct device *dev, struct device_attribute *attr, char *buf) | |||
255 | struct ccw_device_id *id = &(cdev->id); | 254 | struct ccw_device_id *id = &(cdev->id); |
256 | int ret; | 255 | int ret; |
257 | 256 | ||
258 | ret = sprintf(buf, "ccw:t%04Xm%02x", | 257 | ret = sprintf(buf, "ccw:t%04Xm%02X", |
259 | id->cu_type, id->cu_model); | 258 | id->cu_type, id->cu_model); |
260 | if (id->dev_type != 0) | 259 | if (id->dev_type != 0) |
261 | ret += sprintf(buf + ret, "dt%04Xdm%02X\n", | 260 | ret += sprintf(buf + ret, "dt%04Xdm%02X\n", |
@@ -360,7 +359,7 @@ ccw_device_set_online(struct ccw_device *cdev) | |||
360 | else | 359 | else |
361 | pr_debug("ccw_device_offline returned %d, device %s\n", | 360 | pr_debug("ccw_device_offline returned %d, device %s\n", |
362 | ret, cdev->dev.bus_id); | 361 | ret, cdev->dev.bus_id); |
363 | return (ret = 0) ? -ENODEV : ret; | 362 | return (ret == 0) ? -ENODEV : ret; |
364 | } | 363 | } |
365 | 364 | ||
366 | static ssize_t | 365 | static ssize_t |
@@ -1013,7 +1012,7 @@ ccw_device_probe_console(void) | |||
1013 | int ret; | 1012 | int ret; |
1014 | 1013 | ||
1015 | if (xchg(&console_cdev_in_use, 1) != 0) | 1014 | if (xchg(&console_cdev_in_use, 1) != 0) |
1016 | return NULL; | 1015 | return ERR_PTR(-EBUSY); |
1017 | sch = cio_probe_console(); | 1016 | sch = cio_probe_console(); |
1018 | if (IS_ERR(sch)) { | 1017 | if (IS_ERR(sch)) { |
1019 | console_cdev_in_use = 0; | 1018 | console_cdev_in_use = 0; |
diff --git a/drivers/s390/cio/device_ops.c b/drivers/s390/cio/device_ops.c index 8b0218949b62..3a50b1903287 100644 --- a/drivers/s390/cio/device_ops.c +++ b/drivers/s390/cio/device_ops.c | |||
@@ -1,8 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/s390/cio/device_ops.c | 2 | * drivers/s390/cio/device_ops.c |
3 | * | 3 | * |
4 | * $Revision: 1.61 $ | ||
5 | * | ||
6 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, | 4 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, |
7 | * IBM Corporation | 5 | * IBM Corporation |
8 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) | 6 | * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) |
diff --git a/drivers/s390/cio/device_pgid.c b/drivers/s390/cio/device_pgid.c index d2a5b04d7cba..85b1020a1fcc 100644 --- a/drivers/s390/cio/device_pgid.c +++ b/drivers/s390/cio/device_pgid.c | |||
@@ -405,7 +405,7 @@ __ccw_device_disband_start(struct ccw_device *cdev) | |||
405 | cdev->private->iretry = 5; | 405 | cdev->private->iretry = 5; |
406 | cdev->private->imask >>= 1; | 406 | cdev->private->imask >>= 1; |
407 | } | 407 | } |
408 | ccw_device_verify_done(cdev, (sch->lpm != 0) ? 0 : -ENODEV); | 408 | ccw_device_disband_done(cdev, (sch->lpm != 0) ? 0 : -ENODEV); |
409 | } | 409 | } |
410 | 410 | ||
411 | /* | 411 | /* |
diff --git a/drivers/s390/cio/device_status.c b/drivers/s390/cio/device_status.c index dad4dd9887c9..6c762b43f921 100644 --- a/drivers/s390/cio/device_status.c +++ b/drivers/s390/cio/device_status.c | |||
@@ -317,7 +317,6 @@ ccw_device_do_sense(struct ccw_device *cdev, struct irb *irb) | |||
317 | /* | 317 | /* |
318 | * We have ending status but no sense information. Do a basic sense. | 318 | * We have ending status but no sense information. Do a basic sense. |
319 | */ | 319 | */ |
320 | sch = to_subchannel(cdev->dev.parent); | ||
321 | sch->sense_ccw.cmd_code = CCW_CMD_BASIC_SENSE; | 320 | sch->sense_ccw.cmd_code = CCW_CMD_BASIC_SENSE; |
322 | sch->sense_ccw.cda = (__u32) __pa(cdev->private->irb.ecw); | 321 | sch->sense_ccw.cda = (__u32) __pa(cdev->private->irb.ecw); |
323 | sch->sense_ccw.count = SENSE_MAX_COUNT; | 322 | sch->sense_ccw.count = SENSE_MAX_COUNT; |
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c index 77be2c39bfe4..9ed37dc9a1b0 100644 --- a/drivers/s390/cio/qdio.c +++ b/drivers/s390/cio/qdio.c | |||
@@ -56,8 +56,6 @@ | |||
56 | #include "ioasm.h" | 56 | #include "ioasm.h" |
57 | #include "chsc.h" | 57 | #include "chsc.h" |
58 | 58 | ||
59 | #define VERSION_QDIO_C "$Revision: 1.117 $" | ||
60 | |||
61 | /****************** MODULE PARAMETER VARIABLES ********************/ | 59 | /****************** MODULE PARAMETER VARIABLES ********************/ |
62 | MODULE_AUTHOR("Utz Bacher <utz.bacher@de.ibm.com>"); | 60 | MODULE_AUTHOR("Utz Bacher <utz.bacher@de.ibm.com>"); |
63 | MODULE_DESCRIPTION("QDIO base support version 2, " \ | 61 | MODULE_DESCRIPTION("QDIO base support version 2, " \ |
@@ -66,8 +64,7 @@ MODULE_LICENSE("GPL"); | |||
66 | 64 | ||
67 | /******************** HERE WE GO ***********************************/ | 65 | /******************** HERE WE GO ***********************************/ |
68 | 66 | ||
69 | static const char version[] = "QDIO base support version 2 (" | 67 | static const char version[] = "QDIO base support version 2"; |
70 | VERSION_QDIO_C "/" VERSION_QDIO_H "/" VERSION_CIO_QDIO_H ")"; | ||
71 | 68 | ||
72 | #ifdef QDIO_PERFORMANCE_STATS | 69 | #ifdef QDIO_PERFORMANCE_STATS |
73 | static int proc_perf_file_registration; | 70 | static int proc_perf_file_registration; |
@@ -168,8 +165,13 @@ qdio_do_eqbs(struct qdio_q *q, unsigned char *state, | |||
168 | q_no = q->q_no; | 165 | q_no = q->q_no; |
169 | if(!q->is_input_q) | 166 | if(!q->is_input_q) |
170 | q_no += irq->no_input_qs; | 167 | q_no += irq->no_input_qs; |
168 | again: | ||
171 | ccq = do_eqbs(irq->sch_token, state, q_no, start, cnt); | 169 | ccq = do_eqbs(irq->sch_token, state, q_no, start, cnt); |
172 | rc = qdio_check_ccq(q, ccq); | 170 | rc = qdio_check_ccq(q, ccq); |
171 | if (rc == 1) { | ||
172 | QDIO_DBF_TEXT5(1,trace,"eqAGAIN"); | ||
173 | goto again; | ||
174 | } | ||
173 | if (rc < 0) { | 175 | if (rc < 0) { |
174 | QDIO_DBF_TEXT2(1,trace,"eqberr"); | 176 | QDIO_DBF_TEXT2(1,trace,"eqberr"); |
175 | sprintf(dbf_text,"%2x,%2x,%d,%d",tmp_cnt, *cnt, ccq, q_no); | 177 | sprintf(dbf_text,"%2x,%2x,%d,%d",tmp_cnt, *cnt, ccq, q_no); |
@@ -198,8 +200,13 @@ qdio_do_sqbs(struct qdio_q *q, unsigned char state, | |||
198 | q_no = q->q_no; | 200 | q_no = q->q_no; |
199 | if(!q->is_input_q) | 201 | if(!q->is_input_q) |
200 | q_no += irq->no_input_qs; | 202 | q_no += irq->no_input_qs; |
203 | again: | ||
201 | ccq = do_sqbs(irq->sch_token, state, q_no, start, cnt); | 204 | ccq = do_sqbs(irq->sch_token, state, q_no, start, cnt); |
202 | rc = qdio_check_ccq(q, ccq); | 205 | rc = qdio_check_ccq(q, ccq); |
206 | if (rc == 1) { | ||
207 | QDIO_DBF_TEXT5(1,trace,"sqAGAIN"); | ||
208 | goto again; | ||
209 | } | ||
203 | if (rc < 0) { | 210 | if (rc < 0) { |
204 | QDIO_DBF_TEXT3(1,trace,"sqberr"); | 211 | QDIO_DBF_TEXT3(1,trace,"sqberr"); |
205 | sprintf(dbf_text,"%2x,%2x,%d,%d",tmp_cnt,*cnt,ccq,q_no); | 212 | sprintf(dbf_text,"%2x,%2x,%d,%d",tmp_cnt,*cnt,ccq,q_no); |
@@ -1190,8 +1197,7 @@ tiqdio_is_inbound_q_done(struct qdio_q *q) | |||
1190 | 1197 | ||
1191 | if (!no_used) | 1198 | if (!no_used) |
1192 | return 1; | 1199 | return 1; |
1193 | 1200 | if (!q->siga_sync && !irq->is_qebsm) | |
1194 | if (!q->siga_sync) | ||
1195 | /* we'll check for more primed buffers in qeth_stop_polling */ | 1201 | /* we'll check for more primed buffers in qeth_stop_polling */ |
1196 | return 0; | 1202 | return 0; |
1197 | if (irq->is_qebsm) { | 1203 | if (irq->is_qebsm) { |
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h index fa385e761fe1..ceb3ab31ee08 100644 --- a/drivers/s390/cio/qdio.h +++ b/drivers/s390/cio/qdio.h | |||
@@ -5,8 +5,6 @@ | |||
5 | 5 | ||
6 | #include "schid.h" | 6 | #include "schid.h" |
7 | 7 | ||
8 | #define VERSION_CIO_QDIO_H "$Revision: 1.40 $" | ||
9 | |||
10 | #ifdef CONFIG_QDIO_DEBUG | 8 | #ifdef CONFIG_QDIO_DEBUG |
11 | #define QDIO_VERBOSE_LEVEL 9 | 9 | #define QDIO_VERBOSE_LEVEL 9 |
12 | #else /* CONFIG_QDIO_DEBUG */ | 10 | #else /* CONFIG_QDIO_DEBUG */ |
diff --git a/drivers/s390/crypto/z90common.h b/drivers/s390/crypto/z90common.h index f87c785f2039..dbbcda3c846a 100644 --- a/drivers/s390/crypto/z90common.h +++ b/drivers/s390/crypto/z90common.h | |||
@@ -27,8 +27,6 @@ | |||
27 | #ifndef _Z90COMMON_H_ | 27 | #ifndef _Z90COMMON_H_ |
28 | #define _Z90COMMON_H_ | 28 | #define _Z90COMMON_H_ |
29 | 29 | ||
30 | #define VERSION_Z90COMMON_H "$Revision: 1.17 $" | ||
31 | |||
32 | 30 | ||
33 | #define RESPBUFFSIZE 256 | 31 | #define RESPBUFFSIZE 256 |
34 | #define PCI_FUNC_KEY_DECRYPT 0x5044 | 32 | #define PCI_FUNC_KEY_DECRYPT 0x5044 |
diff --git a/drivers/s390/crypto/z90crypt.h b/drivers/s390/crypto/z90crypt.h index 3a18443fdfa7..5e6b1f535f62 100644 --- a/drivers/s390/crypto/z90crypt.h +++ b/drivers/s390/crypto/z90crypt.h | |||
@@ -29,8 +29,6 @@ | |||
29 | 29 | ||
30 | #include <linux/ioctl.h> | 30 | #include <linux/ioctl.h> |
31 | 31 | ||
32 | #define VERSION_Z90CRYPT_H "$Revision: 1.2.2.4 $" | ||
33 | |||
34 | #define z90crypt_VERSION 1 | 32 | #define z90crypt_VERSION 1 |
35 | #define z90crypt_RELEASE 3 // 2 = PCIXCC, 3 = rewrite for coding standards | 33 | #define z90crypt_RELEASE 3 // 2 = PCIXCC, 3 = rewrite for coding standards |
36 | #define z90crypt_VARIANT 3 // 3 = CEX2A support | 34 | #define z90crypt_VARIANT 3 // 3 = CEX2A support |
diff --git a/drivers/s390/crypto/z90hardware.c b/drivers/s390/crypto/z90hardware.c index d7f7494a0cbe..4141919da805 100644 --- a/drivers/s390/crypto/z90hardware.c +++ b/drivers/s390/crypto/z90hardware.c | |||
@@ -32,12 +32,6 @@ | |||
32 | #include "z90crypt.h" | 32 | #include "z90crypt.h" |
33 | #include "z90common.h" | 33 | #include "z90common.h" |
34 | 34 | ||
35 | #define VERSION_Z90HARDWARE_C "$Revision: 1.34 $" | ||
36 | |||
37 | char z90hardware_version[] __initdata = | ||
38 | "z90hardware.o (" VERSION_Z90HARDWARE_C "/" | ||
39 | VERSION_Z90COMMON_H "/" VERSION_Z90CRYPT_H ")"; | ||
40 | |||
41 | struct cca_token_hdr { | 35 | struct cca_token_hdr { |
42 | unsigned char token_identifier; | 36 | unsigned char token_identifier; |
43 | unsigned char version; | 37 | unsigned char version; |
diff --git a/drivers/s390/crypto/z90main.c b/drivers/s390/crypto/z90main.c index 2f54d033d7cf..7d6f19030ef9 100644 --- a/drivers/s390/crypto/z90main.c +++ b/drivers/s390/crypto/z90main.c | |||
@@ -38,14 +38,6 @@ | |||
38 | #include "z90crypt.h" | 38 | #include "z90crypt.h" |
39 | #include "z90common.h" | 39 | #include "z90common.h" |
40 | 40 | ||
41 | #define VERSION_Z90MAIN_C "$Revision: 1.62 $" | ||
42 | |||
43 | static char z90main_version[] __initdata = | ||
44 | "z90main.o (" VERSION_Z90MAIN_C "/" | ||
45 | VERSION_Z90COMMON_H "/" VERSION_Z90CRYPT_H ")"; | ||
46 | |||
47 | extern char z90hardware_version[]; | ||
48 | |||
49 | /** | 41 | /** |
50 | * Defaults that may be modified. | 42 | * Defaults that may be modified. |
51 | */ | 43 | */ |
@@ -594,8 +586,6 @@ z90crypt_init_module(void) | |||
594 | PRINTKN("Version %d.%d.%d loaded, built on %s %s\n", | 586 | PRINTKN("Version %d.%d.%d loaded, built on %s %s\n", |
595 | z90crypt_VERSION, z90crypt_RELEASE, z90crypt_VARIANT, | 587 | z90crypt_VERSION, z90crypt_RELEASE, z90crypt_VARIANT, |
596 | __DATE__, __TIME__); | 588 | __DATE__, __TIME__); |
597 | PRINTKN("%s\n", z90main_version); | ||
598 | PRINTKN("%s\n", z90hardware_version); | ||
599 | PDEBUG("create_z90crypt (domain index %d) successful.\n", | 589 | PDEBUG("create_z90crypt (domain index %d) successful.\n", |
600 | domain); | 590 | domain); |
601 | } else | 591 | } else |
diff --git a/drivers/s390/net/claw.c b/drivers/s390/net/claw.c index e70af7f39946..a86436a7a606 100644 --- a/drivers/s390/net/claw.c +++ b/drivers/s390/net/claw.c | |||
@@ -2,8 +2,6 @@ | |||
2 | * drivers/s390/net/claw.c | 2 | * drivers/s390/net/claw.c |
3 | * ESCON CLAW network driver | 3 | * ESCON CLAW network driver |
4 | * | 4 | * |
5 | * $Revision: 1.38 $ $Date: 2005/08/29 09:47:04 $ | ||
6 | * | ||
7 | * Linux for zSeries version | 5 | * Linux for zSeries version |
8 | * Copyright (C) 2002,2005 IBM Corporation | 6 | * Copyright (C) 2002,2005 IBM Corporation |
9 | * Author(s) Original code written by: | 7 | * Author(s) Original code written by: |
@@ -4391,14 +4389,7 @@ static int __init | |||
4391 | claw_init(void) | 4389 | claw_init(void) |
4392 | { | 4390 | { |
4393 | int ret = 0; | 4391 | int ret = 0; |
4394 | printk(KERN_INFO "claw: starting driver " | 4392 | printk(KERN_INFO "claw: starting driver\n"); |
4395 | #ifdef MODULE | ||
4396 | "module " | ||
4397 | #else | ||
4398 | "compiled into kernel " | ||
4399 | #endif | ||
4400 | " $Revision: 1.38 $ $Date: 2005/08/29 09:47:04 $ \n"); | ||
4401 | |||
4402 | 4393 | ||
4403 | #ifdef FUNCTRACE | 4394 | #ifdef FUNCTRACE |
4404 | printk(KERN_INFO "claw: %s() enter \n",__FUNCTION__); | 4395 | printk(KERN_INFO "claw: %s() enter \n",__FUNCTION__); |
diff --git a/drivers/s390/net/claw.h b/drivers/s390/net/claw.h index 3df71970f601..969be465309c 100644 --- a/drivers/s390/net/claw.h +++ b/drivers/s390/net/claw.h | |||
@@ -2,7 +2,7 @@ | |||
2 | * Define constants * | 2 | * Define constants * |
3 | * * | 3 | * * |
4 | ********************************************************/ | 4 | ********************************************************/ |
5 | #define VERSION_CLAW_H "$Revision: 1.6 $" | 5 | |
6 | /*-----------------------------------------------------* | 6 | /*-----------------------------------------------------* |
7 | * CCW command codes for CLAW protocol * | 7 | * CCW command codes for CLAW protocol * |
8 | *------------------------------------------------------*/ | 8 | *------------------------------------------------------*/ |
diff --git a/drivers/s390/net/ctcdbug.c b/drivers/s390/net/ctcdbug.c index 0e2a8bb93032..e6e72deb36b5 100644 --- a/drivers/s390/net/ctcdbug.c +++ b/drivers/s390/net/ctcdbug.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * |
3 | * linux/drivers/s390/net/ctcdbug.c ($Revision: 1.6 $) | 3 | * linux/drivers/s390/net/ctcdbug.c |
4 | * | 4 | * |
5 | * CTC / ESCON network driver - s390 dbf exploit. | 5 | * CTC / ESCON network driver - s390 dbf exploit. |
6 | * | 6 | * |
@@ -9,8 +9,6 @@ | |||
9 | * Author(s): Original Code written by | 9 | * Author(s): Original Code written by |
10 | * Peter Tiedemann (ptiedem@de.ibm.com) | 10 | * Peter Tiedemann (ptiedem@de.ibm.com) |
11 | * | 11 | * |
12 | * $Revision: 1.6 $ $Date: 2005/05/11 08:10:17 $ | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
15 | * it under the terms of the GNU General Public License as published by | 13 | * it under the terms of the GNU General Public License as published by |
16 | * the Free Software Foundation; either version 2, or (at your option) | 14 | * the Free Software Foundation; either version 2, or (at your option) |
@@ -80,4 +78,3 @@ ctc_register_dbf_views(void) | |||
80 | return 0; | 78 | return 0; |
81 | } | 79 | } |
82 | 80 | ||
83 | |||
diff --git a/drivers/s390/net/ctcdbug.h b/drivers/s390/net/ctcdbug.h index 7d6afa1627c3..413925ee23d1 100644 --- a/drivers/s390/net/ctcdbug.h +++ b/drivers/s390/net/ctcdbug.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * |
3 | * linux/drivers/s390/net/ctcdbug.h ($Revision: 1.6 $) | 3 | * linux/drivers/s390/net/ctcdbug.h |
4 | * | 4 | * |
5 | * CTC / ESCON network driver - s390 dbf exploit. | 5 | * CTC / ESCON network driver - s390 dbf exploit. |
6 | * | 6 | * |
@@ -9,8 +9,6 @@ | |||
9 | * Author(s): Original Code written by | 9 | * Author(s): Original Code written by |
10 | * Peter Tiedemann (ptiedem@de.ibm.com) | 10 | * Peter Tiedemann (ptiedem@de.ibm.com) |
11 | * | 11 | * |
12 | * $Revision: 1.6 $ $Date: 2005/05/11 08:10:17 $ | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
15 | * it under the terms of the GNU General Public License as published by | 13 | * it under the terms of the GNU General Public License as published by |
16 | * the Free Software Foundation; either version 2, or (at your option) | 14 | * the Free Software Foundation; either version 2, or (at your option) |
diff --git a/drivers/s390/net/ctcmain.c b/drivers/s390/net/ctcmain.c index 1901feef07d9..af9f212314b3 100644 --- a/drivers/s390/net/ctcmain.c +++ b/drivers/s390/net/ctcmain.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: ctcmain.c,v 1.79 2006/01/11 11:32:18 cohuck Exp $ | ||
3 | * | ||
4 | * CTC / ESCON network driver | 2 | * CTC / ESCON network driver |
5 | * | 3 | * |
6 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation | 4 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation |
@@ -37,8 +35,6 @@ | |||
37 | * along with this program; if not, write to the Free Software | 35 | * along with this program; if not, write to the Free Software |
38 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 36 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
39 | * | 37 | * |
40 | * RELEASE-TAG: CTC/ESCON network driver $Revision: 1.79 $ | ||
41 | * | ||
42 | */ | 38 | */ |
43 | #undef DEBUG | 39 | #undef DEBUG |
44 | #include <linux/module.h> | 40 | #include <linux/module.h> |
@@ -248,22 +244,11 @@ static void | |||
248 | print_banner(void) | 244 | print_banner(void) |
249 | { | 245 | { |
250 | static int printed = 0; | 246 | static int printed = 0; |
251 | char vbuf[] = "$Revision: 1.79 $"; | ||
252 | char *version = vbuf; | ||
253 | 247 | ||
254 | if (printed) | 248 | if (printed) |
255 | return; | 249 | return; |
256 | if ((version = strchr(version, ':'))) { | 250 | |
257 | char *p = strchr(version + 1, '$'); | 251 | printk(KERN_INFO "CTC driver initialized\n"); |
258 | if (p) | ||
259 | *p = '\0'; | ||
260 | } else | ||
261 | version = " ??? "; | ||
262 | printk(KERN_INFO "CTC driver Version%s" | ||
263 | #ifdef DEBUG | ||
264 | " (DEBUG-VERSION, " __DATE__ __TIME__ ")" | ||
265 | #endif | ||
266 | " initialized\n", version); | ||
267 | printed = 1; | 252 | printed = 1; |
268 | } | 253 | } |
269 | 254 | ||
diff --git a/drivers/s390/net/ctcmain.h b/drivers/s390/net/ctcmain.h index ba3605f16335..d2e835c0c134 100644 --- a/drivers/s390/net/ctcmain.h +++ b/drivers/s390/net/ctcmain.h | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: ctcmain.h,v 1.4 2005/03/24 09:04:17 mschwide Exp $ | ||
3 | * | ||
4 | * CTC / ESCON network driver | 2 | * CTC / ESCON network driver |
5 | * | 3 | * |
6 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation | 4 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation |
@@ -29,8 +27,6 @@ | |||
29 | * along with this program; if not, write to the Free Software | 27 | * along with this program; if not, write to the Free Software |
30 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 28 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
31 | * | 29 | * |
32 | * RELEASE-TAG: CTC/ESCON network driver $Revision: 1.4 $ | ||
33 | * | ||
34 | */ | 30 | */ |
35 | 31 | ||
36 | #ifndef _CTCMAIN_H_ | 32 | #ifndef _CTCMAIN_H_ |
diff --git a/drivers/s390/net/ctctty.c b/drivers/s390/net/ctctty.c index 93d1725eb79b..5cdcdbf92962 100644 --- a/drivers/s390/net/ctctty.c +++ b/drivers/s390/net/ctctty.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: ctctty.c,v 1.29 2005/04/05 08:50:44 mschwide Exp $ | ||
3 | * | ||
4 | * CTC / ESCON network driver, tty interface. | 2 | * CTC / ESCON network driver, tty interface. |
5 | * | 3 | * |
6 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation | 4 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation |
diff --git a/drivers/s390/net/ctctty.h b/drivers/s390/net/ctctty.h index 84b2f8f23ab3..7254dc006311 100644 --- a/drivers/s390/net/ctctty.h +++ b/drivers/s390/net/ctctty.h | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: ctctty.h,v 1.4 2003/09/18 08:01:10 mschwide Exp $ | ||
3 | * | ||
4 | * CTC / ESCON network driver, tty interface. | 2 | * CTC / ESCON network driver, tty interface. |
5 | * | 3 | * |
6 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation | 4 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation |
diff --git a/drivers/s390/net/cu3088.c b/drivers/s390/net/cu3088.c index 2014fb7a4881..b12533104c1f 100644 --- a/drivers/s390/net/cu3088.c +++ b/drivers/s390/net/cu3088.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: cu3088.c,v 1.38 2006/01/12 14:33:09 cohuck Exp $ | ||
3 | * | ||
4 | * CTC / LCS ccw_device driver | 2 | * CTC / LCS ccw_device driver |
5 | * | 3 | * |
6 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, IBM Corporation | 4 | * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, IBM Corporation |
diff --git a/drivers/s390/net/fsm.c b/drivers/s390/net/fsm.c index 24029bd9c7d0..6caf5fa6a3b5 100644 --- a/drivers/s390/net/fsm.c +++ b/drivers/s390/net/fsm.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /** | 1 | /** |
2 | * $Id: fsm.c,v 1.6 2003/10/15 11:37:29 mschwide Exp $ | ||
3 | * | ||
4 | * A generic FSM based on fsm used in isdn4linux | 2 | * A generic FSM based on fsm used in isdn4linux |
5 | * | 3 | * |
6 | */ | 4 | */ |
diff --git a/drivers/s390/net/fsm.h b/drivers/s390/net/fsm.h index 5b98253be7aa..af679c10f1bd 100644 --- a/drivers/s390/net/fsm.h +++ b/drivers/s390/net/fsm.h | |||
@@ -1,5 +1,3 @@ | |||
1 | /* $Id: fsm.h,v 1.1.1.1 2002/03/13 19:33:09 mschwide Exp $ | ||
2 | */ | ||
3 | #ifndef _FSM_H_ | 1 | #ifndef _FSM_H_ |
4 | #define _FSM_H_ | 2 | #define _FSM_H_ |
5 | 3 | ||
diff --git a/drivers/s390/net/iucv.c b/drivers/s390/net/iucv.c index ea8177392564..760e77ec5a11 100644 --- a/drivers/s390/net/iucv.c +++ b/drivers/s390/net/iucv.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: iucv.c,v 1.47 2005/11/21 11:35:22 mschwide Exp $ | ||
3 | * | ||
4 | * IUCV network driver | 2 | * IUCV network driver |
5 | * | 3 | * |
6 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation | 4 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation |
@@ -29,8 +27,6 @@ | |||
29 | * along with this program; if not, write to the Free Software | 27 | * along with this program; if not, write to the Free Software |
30 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 28 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
31 | * | 29 | * |
32 | * RELEASE-TAG: IUCV lowlevel driver $Revision: 1.47 $ | ||
33 | * | ||
34 | */ | 30 | */ |
35 | 31 | ||
36 | /* #define DEBUG */ | 32 | /* #define DEBUG */ |
@@ -355,17 +351,7 @@ do { \ | |||
355 | static void | 351 | static void |
356 | iucv_banner(void) | 352 | iucv_banner(void) |
357 | { | 353 | { |
358 | char vbuf[] = "$Revision: 1.47 $"; | 354 | printk(KERN_INFO "IUCV lowlevel driver initialized\n"); |
359 | char *version = vbuf; | ||
360 | |||
361 | if ((version = strchr(version, ':'))) { | ||
362 | char *p = strchr(version + 1, '$'); | ||
363 | if (p) | ||
364 | *p = '\0'; | ||
365 | } else | ||
366 | version = " ??? "; | ||
367 | printk(KERN_INFO | ||
368 | "IUCV lowlevel driver Version%s initialized\n", version); | ||
369 | } | 355 | } |
370 | 356 | ||
371 | /** | 357 | /** |
diff --git a/drivers/s390/net/lcs.c b/drivers/s390/net/lcs.c index da8c515743e8..9cf88d7201d3 100644 --- a/drivers/s390/net/lcs.c +++ b/drivers/s390/net/lcs.c | |||
@@ -11,8 +11,6 @@ | |||
11 | * Frank Pavlic (fpavlic@de.ibm.com) and | 11 | * Frank Pavlic (fpavlic@de.ibm.com) and |
12 | * Martin Schwidefsky <schwidefsky@de.ibm.com> | 12 | * Martin Schwidefsky <schwidefsky@de.ibm.com> |
13 | * | 13 | * |
14 | * $Revision: 1.99 $ $Date: 2005/05/11 08:10:17 $ | ||
15 | * | ||
16 | * This program is free software; you can redistribute it and/or modify | 14 | * This program is free software; you can redistribute it and/or modify |
17 | * it under the terms of the GNU General Public License as published by | 15 | * it under the terms of the GNU General Public License as published by |
18 | * the Free Software Foundation; either version 2, or (at your option) | 16 | * the Free Software Foundation; either version 2, or (at your option) |
@@ -59,9 +57,8 @@ | |||
59 | /** | 57 | /** |
60 | * initialization string for output | 58 | * initialization string for output |
61 | */ | 59 | */ |
62 | #define VERSION_LCS_C "$Revision: 1.99 $" | ||
63 | 60 | ||
64 | static char version[] __initdata = "LCS driver ("VERSION_LCS_C "/" VERSION_LCS_H ")"; | 61 | static char version[] __initdata = "LCS driver"; |
65 | static char debug_buffer[255]; | 62 | static char debug_buffer[255]; |
66 | 63 | ||
67 | /** | 64 | /** |
@@ -101,9 +98,9 @@ lcs_register_debug_facility(void) | |||
101 | return -ENOMEM; | 98 | return -ENOMEM; |
102 | } | 99 | } |
103 | debug_register_view(lcs_dbf_setup, &debug_hex_ascii_view); | 100 | debug_register_view(lcs_dbf_setup, &debug_hex_ascii_view); |
104 | debug_set_level(lcs_dbf_setup, 4); | 101 | debug_set_level(lcs_dbf_setup, 2); |
105 | debug_register_view(lcs_dbf_trace, &debug_hex_ascii_view); | 102 | debug_register_view(lcs_dbf_trace, &debug_hex_ascii_view); |
106 | debug_set_level(lcs_dbf_trace, 4); | 103 | debug_set_level(lcs_dbf_trace, 2); |
107 | return 0; | 104 | return 0; |
108 | } | 105 | } |
109 | 106 | ||
@@ -1295,9 +1292,8 @@ lcs_set_multicast_list(struct net_device *dev) | |||
1295 | LCS_DBF_TEXT(4, trace, "setmulti"); | 1292 | LCS_DBF_TEXT(4, trace, "setmulti"); |
1296 | card = (struct lcs_card *) dev->priv; | 1293 | card = (struct lcs_card *) dev->priv; |
1297 | 1294 | ||
1298 | if (!lcs_set_thread_start_bit(card, LCS_SET_MC_THREAD)) { | 1295 | if (!lcs_set_thread_start_bit(card, LCS_SET_MC_THREAD)) |
1299 | schedule_work(&card->kernel_thread_starter); | 1296 | schedule_work(&card->kernel_thread_starter); |
1300 | } | ||
1301 | } | 1297 | } |
1302 | 1298 | ||
1303 | #endif /* CONFIG_IP_MULTICAST */ | 1299 | #endif /* CONFIG_IP_MULTICAST */ |
@@ -1462,6 +1458,8 @@ lcs_txbuffer_cb(struct lcs_channel *channel, struct lcs_buffer *buffer) | |||
1462 | lcs_release_buffer(channel, buffer); | 1458 | lcs_release_buffer(channel, buffer); |
1463 | card = (struct lcs_card *) | 1459 | card = (struct lcs_card *) |
1464 | ((char *) channel - offsetof(struct lcs_card, write)); | 1460 | ((char *) channel - offsetof(struct lcs_card, write)); |
1461 | if (netif_queue_stopped(card->dev)) | ||
1462 | netif_wake_queue(card->dev); | ||
1465 | spin_lock(&card->lock); | 1463 | spin_lock(&card->lock); |
1466 | card->tx_emitted--; | 1464 | card->tx_emitted--; |
1467 | if (card->tx_emitted <= 0 && card->tx_buffer != NULL) | 1465 | if (card->tx_emitted <= 0 && card->tx_buffer != NULL) |
@@ -1481,6 +1479,7 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb, | |||
1481 | struct net_device *dev) | 1479 | struct net_device *dev) |
1482 | { | 1480 | { |
1483 | struct lcs_header *header; | 1481 | struct lcs_header *header; |
1482 | int rc = 0; | ||
1484 | 1483 | ||
1485 | LCS_DBF_TEXT(5, trace, "hardxmit"); | 1484 | LCS_DBF_TEXT(5, trace, "hardxmit"); |
1486 | if (skb == NULL) { | 1485 | if (skb == NULL) { |
@@ -1495,10 +1494,8 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb, | |||
1495 | card->stats.tx_carrier_errors++; | 1494 | card->stats.tx_carrier_errors++; |
1496 | return 0; | 1495 | return 0; |
1497 | } | 1496 | } |
1498 | if (netif_queue_stopped(dev) ) { | 1497 | netif_stop_queue(card->dev); |
1499 | card->stats.tx_dropped++; | 1498 | spin_lock(&card->lock); |
1500 | return -EBUSY; | ||
1501 | } | ||
1502 | if (card->tx_buffer != NULL && | 1499 | if (card->tx_buffer != NULL && |
1503 | card->tx_buffer->count + sizeof(struct lcs_header) + | 1500 | card->tx_buffer->count + sizeof(struct lcs_header) + |
1504 | skb->len + sizeof(u16) > LCS_IOBUFFERSIZE) | 1501 | skb->len + sizeof(u16) > LCS_IOBUFFERSIZE) |
@@ -1509,7 +1506,8 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb, | |||
1509 | card->tx_buffer = lcs_get_buffer(&card->write); | 1506 | card->tx_buffer = lcs_get_buffer(&card->write); |
1510 | if (card->tx_buffer == NULL) { | 1507 | if (card->tx_buffer == NULL) { |
1511 | card->stats.tx_dropped++; | 1508 | card->stats.tx_dropped++; |
1512 | return -EBUSY; | 1509 | rc = -EBUSY; |
1510 | goto out; | ||
1513 | } | 1511 | } |
1514 | card->tx_buffer->callback = lcs_txbuffer_cb; | 1512 | card->tx_buffer->callback = lcs_txbuffer_cb; |
1515 | card->tx_buffer->count = 0; | 1513 | card->tx_buffer->count = 0; |
@@ -1521,13 +1519,18 @@ __lcs_start_xmit(struct lcs_card *card, struct sk_buff *skb, | |||
1521 | header->type = card->lan_type; | 1519 | header->type = card->lan_type; |
1522 | header->slot = card->portno; | 1520 | header->slot = card->portno; |
1523 | memcpy(header + 1, skb->data, skb->len); | 1521 | memcpy(header + 1, skb->data, skb->len); |
1522 | spin_unlock(&card->lock); | ||
1524 | card->stats.tx_bytes += skb->len; | 1523 | card->stats.tx_bytes += skb->len; |
1525 | card->stats.tx_packets++; | 1524 | card->stats.tx_packets++; |
1526 | dev_kfree_skb(skb); | 1525 | dev_kfree_skb(skb); |
1527 | if (card->tx_emitted <= 0) | 1526 | netif_wake_queue(card->dev); |
1527 | spin_lock(&card->lock); | ||
1528 | if (card->tx_emitted <= 0 && card->tx_buffer != NULL) | ||
1528 | /* If this is the first tx buffer emit it immediately. */ | 1529 | /* If this is the first tx buffer emit it immediately. */ |
1529 | __lcs_emit_txbuffer(card); | 1530 | __lcs_emit_txbuffer(card); |
1530 | return 0; | 1531 | out: |
1532 | spin_unlock(&card->lock); | ||
1533 | return rc; | ||
1531 | } | 1534 | } |
1532 | 1535 | ||
1533 | static int | 1536 | static int |
@@ -1538,9 +1541,7 @@ lcs_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
1538 | 1541 | ||
1539 | LCS_DBF_TEXT(5, trace, "pktxmit"); | 1542 | LCS_DBF_TEXT(5, trace, "pktxmit"); |
1540 | card = (struct lcs_card *) dev->priv; | 1543 | card = (struct lcs_card *) dev->priv; |
1541 | spin_lock(&card->lock); | ||
1542 | rc = __lcs_start_xmit(card, skb, dev); | 1544 | rc = __lcs_start_xmit(card, skb, dev); |
1543 | spin_unlock(&card->lock); | ||
1544 | return rc; | 1545 | return rc; |
1545 | } | 1546 | } |
1546 | 1547 | ||
@@ -2322,7 +2323,6 @@ __init lcs_init_module(void) | |||
2322 | PRINT_ERR("Initialization failed\n"); | 2323 | PRINT_ERR("Initialization failed\n"); |
2323 | return rc; | 2324 | return rc; |
2324 | } | 2325 | } |
2325 | |||
2326 | return 0; | 2326 | return 0; |
2327 | } | 2327 | } |
2328 | 2328 | ||
diff --git a/drivers/s390/net/lcs.h b/drivers/s390/net/lcs.h index a7f348ef1b08..2fad5e40c2e4 100644 --- a/drivers/s390/net/lcs.h +++ b/drivers/s390/net/lcs.h | |||
@@ -6,8 +6,6 @@ | |||
6 | #include <linux/workqueue.h> | 6 | #include <linux/workqueue.h> |
7 | #include <asm/ccwdev.h> | 7 | #include <asm/ccwdev.h> |
8 | 8 | ||
9 | #define VERSION_LCS_H "$Revision: 1.19 $" | ||
10 | |||
11 | #define LCS_DBF_TEXT(level, name, text) \ | 9 | #define LCS_DBF_TEXT(level, name, text) \ |
12 | do { \ | 10 | do { \ |
13 | debug_text_event(lcs_dbf_##name, level, text); \ | 11 | debug_text_event(lcs_dbf_##name, level, text); \ |
@@ -97,7 +95,7 @@ do { \ | |||
97 | */ | 95 | */ |
98 | #define LCS_ILLEGAL_OFFSET 0xffff | 96 | #define LCS_ILLEGAL_OFFSET 0xffff |
99 | #define LCS_IOBUFFERSIZE 0x5000 | 97 | #define LCS_IOBUFFERSIZE 0x5000 |
100 | #define LCS_NUM_BUFFS 8 /* needs to be power of 2 */ | 98 | #define LCS_NUM_BUFFS 32 /* needs to be power of 2 */ |
101 | #define LCS_MAC_LENGTH 6 | 99 | #define LCS_MAC_LENGTH 6 |
102 | #define LCS_INVALID_PORT_NO -1 | 100 | #define LCS_INVALID_PORT_NO -1 |
103 | #define LCS_LANCMD_TIMEOUT_DEFAULT 5 | 101 | #define LCS_LANCMD_TIMEOUT_DEFAULT 5 |
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c index ac4c4b83fe17..71d3853e8682 100644 --- a/drivers/s390/net/netiucv.c +++ b/drivers/s390/net/netiucv.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: netiucv.c,v 1.69 2006/01/12 14:33:09 cohuck Exp $ | ||
3 | * | ||
4 | * IUCV network driver | 2 | * IUCV network driver |
5 | * | 3 | * |
6 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation | 4 | * Copyright (C) 2001 IBM Deutschland Entwicklung GmbH, IBM Corporation |
@@ -31,8 +29,6 @@ | |||
31 | * along with this program; if not, write to the Free Software | 29 | * along with this program; if not, write to the Free Software |
32 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 30 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
33 | * | 31 | * |
34 | * RELEASE-TAG: IUCV network driver $Revision: 1.69 $ | ||
35 | * | ||
36 | */ | 32 | */ |
37 | 33 | ||
38 | #undef DEBUG | 34 | #undef DEBUG |
@@ -2077,16 +2073,7 @@ DRIVER_ATTR(remove, 0200, NULL, remove_write); | |||
2077 | static void | 2073 | static void |
2078 | netiucv_banner(void) | 2074 | netiucv_banner(void) |
2079 | { | 2075 | { |
2080 | char vbuf[] = "$Revision: 1.69 $"; | 2076 | PRINT_INFO("NETIUCV driver initialized\n"); |
2081 | char *version = vbuf; | ||
2082 | |||
2083 | if ((version = strchr(version, ':'))) { | ||
2084 | char *p = strchr(version + 1, '$'); | ||
2085 | if (p) | ||
2086 | *p = '\0'; | ||
2087 | } else | ||
2088 | version = " ??? "; | ||
2089 | PRINT_INFO("NETIUCV driver Version%s initialized\n", version); | ||
2090 | } | 2077 | } |
2091 | 2078 | ||
2092 | static void __exit | 2079 | static void __exit |
diff --git a/drivers/s390/net/qeth.h b/drivers/s390/net/qeth.h index d238c7ed103b..4df0fcd7b10b 100644 --- a/drivers/s390/net/qeth.h +++ b/drivers/s390/net/qeth.h | |||
@@ -25,8 +25,6 @@ | |||
25 | 25 | ||
26 | #include "qeth_mpc.h" | 26 | #include "qeth_mpc.h" |
27 | 27 | ||
28 | #define VERSION_QETH_H "$Revision: 1.152 $" | ||
29 | |||
30 | #ifdef CONFIG_QETH_IPV6 | 28 | #ifdef CONFIG_QETH_IPV6 |
31 | #define QETH_VERSION_IPV6 ":IPv6" | 29 | #define QETH_VERSION_IPV6 ":IPv6" |
32 | #else | 30 | #else |
@@ -1078,16 +1076,6 @@ qeth_get_qdio_q_format(struct qeth_card *card) | |||
1078 | } | 1076 | } |
1079 | 1077 | ||
1080 | static inline int | 1078 | static inline int |
1081 | qeth_isdigit(char * buf) | ||
1082 | { | ||
1083 | while (*buf) { | ||
1084 | if (!isdigit(*buf++)) | ||
1085 | return 0; | ||
1086 | } | ||
1087 | return 1; | ||
1088 | } | ||
1089 | |||
1090 | static inline int | ||
1091 | qeth_isxdigit(char * buf) | 1079 | qeth_isxdigit(char * buf) |
1092 | { | 1080 | { |
1093 | while (*buf) { | 1081 | while (*buf) { |
@@ -1106,33 +1094,17 @@ qeth_ipaddr4_to_string(const __u8 *addr, char *buf) | |||
1106 | static inline int | 1094 | static inline int |
1107 | qeth_string_to_ipaddr4(const char *buf, __u8 *addr) | 1095 | qeth_string_to_ipaddr4(const char *buf, __u8 *addr) |
1108 | { | 1096 | { |
1109 | const char *start, *end; | 1097 | int count = 0, rc = 0; |
1110 | char abuf[4]; | 1098 | int in[4]; |
1111 | char *tmp; | 1099 | |
1112 | int len; | 1100 | rc = sscanf(buf, "%d.%d.%d.%d%n", |
1113 | int i; | 1101 | &in[0], &in[1], &in[2], &in[3], &count); |
1114 | 1102 | if (rc != 4 || count) | |
1115 | start = buf; | 1103 | return -EINVAL; |
1116 | for (i = 0; i < 4; i++) { | 1104 | for (count = 0; count < 4; count++) { |
1117 | if (i == 3) { | 1105 | if (in[count] > 255) |
1118 | end = strchr(start,0xa); | ||
1119 | if (end) | ||
1120 | len = end - start; | ||
1121 | else | ||
1122 | len = strlen(start); | ||
1123 | } | ||
1124 | else { | ||
1125 | end = strchr(start, '.'); | ||
1126 | len = end - start; | ||
1127 | } | ||
1128 | if ((len <= 0) || (len > 3)) | ||
1129 | return -EINVAL; | ||
1130 | memset(abuf, 0, 4); | ||
1131 | strncpy(abuf, start, len); | ||
1132 | if (!qeth_isdigit(abuf)) | ||
1133 | return -EINVAL; | 1106 | return -EINVAL; |
1134 | addr[i] = simple_strtoul(abuf, &tmp, 10); | 1107 | addr[count] = in[count]; |
1135 | start = end + 1; | ||
1136 | } | 1108 | } |
1137 | return 0; | 1109 | return 0; |
1138 | } | 1110 | } |
@@ -1151,36 +1123,44 @@ qeth_ipaddr6_to_string(const __u8 *addr, char *buf) | |||
1151 | static inline int | 1123 | static inline int |
1152 | qeth_string_to_ipaddr6(const char *buf, __u8 *addr) | 1124 | qeth_string_to_ipaddr6(const char *buf, __u8 *addr) |
1153 | { | 1125 | { |
1154 | const char *start, *end; | 1126 | char *end, *start; |
1155 | u16 *tmp_addr; | 1127 | __u16 *in; |
1156 | char abuf[5]; | 1128 | char num[5]; |
1157 | char *tmp; | 1129 | int num2, cnt, out, found, save_cnt; |
1158 | int len; | 1130 | unsigned short in_tmp[8] = {0, }; |
1159 | int i; | 1131 | |
1160 | 1132 | cnt = out = found = save_cnt = num2 = 0; | |
1161 | tmp_addr = (u16 *)addr; | 1133 | end = start = (char *) buf; |
1162 | start = buf; | 1134 | in = (__u16 *) addr; |
1163 | for (i = 0; i < 8; i++) { | 1135 | memset(in, 0, 16); |
1164 | if (i == 7) { | 1136 | while (end) { |
1165 | end = strchr(start,0xa); | 1137 | end = strchr(end,':'); |
1166 | if (end) | 1138 | if (end == NULL) { |
1167 | len = end - start; | 1139 | end = (char *)buf + (strlen(buf)); |
1168 | else | 1140 | out = 1; |
1169 | len = strlen(start); | 1141 | } |
1170 | } | 1142 | if ((end - start)) { |
1171 | else { | 1143 | memset(num, 0, 5); |
1172 | end = strchr(start, ':'); | 1144 | memcpy(num, start, end - start); |
1173 | len = end - start; | 1145 | if (!qeth_isxdigit(num)) |
1146 | return -EINVAL; | ||
1147 | sscanf(start, "%x", &num2); | ||
1148 | if (found) | ||
1149 | in_tmp[save_cnt++] = num2; | ||
1150 | else | ||
1151 | in[cnt++] = num2; | ||
1152 | if (out) | ||
1153 | break; | ||
1154 | } else { | ||
1155 | if (found) | ||
1156 | return -EINVAL; | ||
1157 | found = 1; | ||
1174 | } | 1158 | } |
1175 | if ((len <= 0) || (len > 4)) | 1159 | start = ++end; |
1176 | return -EINVAL; | 1160 | } |
1177 | memset(abuf, 0, 5); | 1161 | cnt = 7; |
1178 | strncpy(abuf, start, len); | 1162 | while (save_cnt) |
1179 | if (!qeth_isxdigit(abuf)) | 1163 | in[cnt--] = in_tmp[--save_cnt]; |
1180 | return -EINVAL; | ||
1181 | tmp_addr[i] = simple_strtoul(abuf, &tmp, 16); | ||
1182 | start = end + 1; | ||
1183 | } | ||
1184 | return 0; | 1164 | return 0; |
1185 | } | 1165 | } |
1186 | 1166 | ||
diff --git a/drivers/s390/net/qeth_eddp.c b/drivers/s390/net/qeth_eddp.c index f94f1f25eec6..82cb4af2f0e7 100644 --- a/drivers/s390/net/qeth_eddp.c +++ b/drivers/s390/net/qeth_eddp.c | |||
@@ -1,6 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * linux/drivers/s390/net/qeth_eddp.c |
3 | * linux/drivers/s390/net/qeth_eddp.c ($Revision: 1.13 $) | ||
4 | * | 3 | * |
5 | * Enhanced Device Driver Packing (EDDP) support for the qeth driver. | 4 | * Enhanced Device Driver Packing (EDDP) support for the qeth driver. |
6 | * | 5 | * |
@@ -8,8 +7,6 @@ | |||
8 | * | 7 | * |
9 | * Author(s): Thomas Spatzier <tspat@de.ibm.com> | 8 | * Author(s): Thomas Spatzier <tspat@de.ibm.com> |
10 | * | 9 | * |
11 | * $Revision: 1.13 $ $Date: 2005/05/04 20:19:18 $ | ||
12 | * | ||
13 | */ | 10 | */ |
14 | #include <linux/config.h> | 11 | #include <linux/config.h> |
15 | #include <linux/errno.h> | 12 | #include <linux/errno.h> |
@@ -62,8 +59,7 @@ qeth_eddp_free_context(struct qeth_eddp_context *ctx) | |||
62 | for (i = 0; i < ctx->num_pages; ++i) | 59 | for (i = 0; i < ctx->num_pages; ++i) |
63 | free_page((unsigned long)ctx->pages[i]); | 60 | free_page((unsigned long)ctx->pages[i]); |
64 | kfree(ctx->pages); | 61 | kfree(ctx->pages); |
65 | if (ctx->elements != NULL) | 62 | kfree(ctx->elements); |
66 | kfree(ctx->elements); | ||
67 | kfree(ctx); | 63 | kfree(ctx); |
68 | } | 64 | } |
69 | 65 | ||
@@ -416,6 +412,13 @@ __qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx, | |||
416 | 412 | ||
417 | QETH_DBF_TEXT(trace, 5, "eddpftcp"); | 413 | QETH_DBF_TEXT(trace, 5, "eddpftcp"); |
418 | eddp->skb_offset = sizeof(struct qeth_hdr) + eddp->nhl + eddp->thl; | 414 | eddp->skb_offset = sizeof(struct qeth_hdr) + eddp->nhl + eddp->thl; |
415 | if (eddp->qh.hdr.l2.id == QETH_HEADER_TYPE_LAYER2) { | ||
416 | eddp->skb_offset += sizeof(struct ethhdr); | ||
417 | #ifdef CONFIG_QETH_VLAN | ||
418 | if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q)) | ||
419 | eddp->skb_offset += VLAN_HLEN; | ||
420 | #endif /* CONFIG_QETH_VLAN */ | ||
421 | } | ||
419 | tcph = eddp->skb->h.th; | 422 | tcph = eddp->skb->h.th; |
420 | while (eddp->skb_offset < eddp->skb->len) { | 423 | while (eddp->skb_offset < eddp->skb->len) { |
421 | data_len = min((int)skb_shinfo(eddp->skb)->tso_size, | 424 | data_len = min((int)skb_shinfo(eddp->skb)->tso_size, |
@@ -486,6 +489,7 @@ qeth_eddp_fill_context_tcp(struct qeth_eddp_context *ctx, | |||
486 | return -ENOMEM; | 489 | return -ENOMEM; |
487 | } | 490 | } |
488 | if (qhdr->hdr.l2.id == QETH_HEADER_TYPE_LAYER2) { | 491 | if (qhdr->hdr.l2.id == QETH_HEADER_TYPE_LAYER2) { |
492 | skb->mac.raw = (skb->data) + sizeof(struct qeth_hdr); | ||
489 | memcpy(&eddp->mac, eth_hdr(skb), ETH_HLEN); | 493 | memcpy(&eddp->mac, eth_hdr(skb), ETH_HLEN); |
490 | #ifdef CONFIG_QETH_VLAN | 494 | #ifdef CONFIG_QETH_VLAN |
491 | if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q)) { | 495 | if (eddp->mac.h_proto == __constant_htons(ETH_P_8021Q)) { |
diff --git a/drivers/s390/net/qeth_eddp.h b/drivers/s390/net/qeth_eddp.h index e1b51860bc57..cae9ba265056 100644 --- a/drivers/s390/net/qeth_eddp.h +++ b/drivers/s390/net/qeth_eddp.h | |||
@@ -1,14 +1,12 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/s390/net/qeth_eddp.c ($Revision: 1.5 $) | 2 | * linux/drivers/s390/net/qeth_eddp.h |
3 | * | 3 | * |
4 | * Header file for qeth enhanced device driver pakcing. | 4 | * Header file for qeth enhanced device driver packing. |
5 | * | 5 | * |
6 | * Copyright 2004 IBM Corporation | 6 | * Copyright 2004 IBM Corporation |
7 | * | 7 | * |
8 | * Author(s): Thomas Spatzier <tspat@de.ibm.com> | 8 | * Author(s): Thomas Spatzier <tspat@de.ibm.com> |
9 | * | 9 | * |
10 | * $Revision: 1.5 $ $Date: 2005/03/24 09:04:18 $ | ||
11 | * | ||
12 | */ | 10 | */ |
13 | #ifndef __QETH_EDDP_H__ | 11 | #ifndef __QETH_EDDP_H__ |
14 | #define __QETH_EDDP_H__ | 12 | #define __QETH_EDDP_H__ |
diff --git a/drivers/s390/net/qeth_fs.h b/drivers/s390/net/qeth_fs.h index c0b4c8d82c45..e422b41c656e 100644 --- a/drivers/s390/net/qeth_fs.h +++ b/drivers/s390/net/qeth_fs.h | |||
@@ -12,11 +12,6 @@ | |||
12 | #ifndef __QETH_FS_H__ | 12 | #ifndef __QETH_FS_H__ |
13 | #define __QETH_FS_H__ | 13 | #define __QETH_FS_H__ |
14 | 14 | ||
15 | #define VERSION_QETH_FS_H "$Revision: 1.10 $" | ||
16 | |||
17 | extern const char *VERSION_QETH_PROC_C; | ||
18 | extern const char *VERSION_QETH_SYS_C; | ||
19 | |||
20 | #ifdef CONFIG_PROC_FS | 15 | #ifdef CONFIG_PROC_FS |
21 | extern int | 16 | extern int |
22 | qeth_create_procfs_entries(void); | 17 | qeth_create_procfs_entries(void); |
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index 97f927c01a82..dba7f7f02e79 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c | |||
@@ -1,6 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * linux/drivers/s390/net/qeth_main.c |
3 | * linux/drivers/s390/net/qeth_main.c ($Revision: 1.251 $) | ||
4 | * | 3 | * |
5 | * Linux on zSeries OSA Express and HiperSockets support | 4 | * Linux on zSeries OSA Express and HiperSockets support |
6 | * | 5 | * |
@@ -12,8 +11,6 @@ | |||
12 | * Frank Pavlic (fpavlic@de.ibm.com) and | 11 | * Frank Pavlic (fpavlic@de.ibm.com) and |
13 | * Thomas Spatzier <tspat@de.ibm.com> | 12 | * Thomas Spatzier <tspat@de.ibm.com> |
14 | * | 13 | * |
15 | * $Revision: 1.251 $ $Date: 2005/05/04 20:19:18 $ | ||
16 | * | ||
17 | * This program is free software; you can redistribute it and/or modify | 14 | * This program is free software; you can redistribute it and/or modify |
18 | * it under the terms of the GNU General Public License as published by | 15 | * it under the terms of the GNU General Public License as published by |
19 | * the Free Software Foundation; either version 2, or (at your option) | 16 | * the Free Software Foundation; either version 2, or (at your option) |
@@ -73,7 +70,6 @@ | |||
73 | #include "qeth_eddp.h" | 70 | #include "qeth_eddp.h" |
74 | #include "qeth_tso.h" | 71 | #include "qeth_tso.h" |
75 | 72 | ||
76 | #define VERSION_QETH_C "$Revision: 1.251 $" | ||
77 | static const char *version = "qeth S/390 OSA-Express driver"; | 73 | static const char *version = "qeth S/390 OSA-Express driver"; |
78 | 74 | ||
79 | /** | 75 | /** |
@@ -520,7 +516,8 @@ __qeth_set_offline(struct ccwgroup_device *cgdev, int recovery_mode) | |||
520 | QETH_DBF_TEXT(setup, 3, "setoffl"); | 516 | QETH_DBF_TEXT(setup, 3, "setoffl"); |
521 | QETH_DBF_HEX(setup, 3, &card, sizeof(void *)); | 517 | QETH_DBF_HEX(setup, 3, &card, sizeof(void *)); |
522 | 518 | ||
523 | netif_carrier_off(card->dev); | 519 | if (card->dev && netif_carrier_ok(card->dev)) |
520 | netif_carrier_off(card->dev); | ||
524 | recover_flag = card->state; | 521 | recover_flag = card->state; |
525 | if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){ | 522 | if (qeth_stop_card(card, recovery_mode) == -ERESTARTSYS){ |
526 | PRINT_WARN("Stopping card %s interrupted by user!\n", | 523 | PRINT_WARN("Stopping card %s interrupted by user!\n", |
@@ -1683,6 +1680,7 @@ qeth_cmd_timeout(unsigned long data) | |||
1683 | spin_unlock_irqrestore(&reply->card->lock, flags); | 1680 | spin_unlock_irqrestore(&reply->card->lock, flags); |
1684 | } | 1681 | } |
1685 | 1682 | ||
1683 | |||
1686 | static struct qeth_ipa_cmd * | 1684 | static struct qeth_ipa_cmd * |
1687 | qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob) | 1685 | qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob) |
1688 | { | 1686 | { |
@@ -1703,7 +1701,8 @@ qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob) | |||
1703 | QETH_CARD_IFNAME(card), | 1701 | QETH_CARD_IFNAME(card), |
1704 | card->info.chpid); | 1702 | card->info.chpid); |
1705 | card->lan_online = 0; | 1703 | card->lan_online = 0; |
1706 | netif_carrier_off(card->dev); | 1704 | if (card->dev && netif_carrier_ok(card->dev)) |
1705 | netif_carrier_off(card->dev); | ||
1707 | return NULL; | 1706 | return NULL; |
1708 | case IPA_CMD_STARTLAN: | 1707 | case IPA_CMD_STARTLAN: |
1709 | PRINT_INFO("Link reestablished on %s " | 1708 | PRINT_INFO("Link reestablished on %s " |
@@ -5566,7 +5565,7 @@ qeth_set_multicast_list(struct net_device *dev) | |||
5566 | if (card->info.type == QETH_CARD_TYPE_OSN) | 5565 | if (card->info.type == QETH_CARD_TYPE_OSN) |
5567 | return ; | 5566 | return ; |
5568 | 5567 | ||
5569 | QETH_DBF_TEXT(trace,3,"setmulti"); | 5568 | QETH_DBF_TEXT(trace, 3, "setmulti"); |
5570 | qeth_delete_mc_addresses(card); | 5569 | qeth_delete_mc_addresses(card); |
5571 | if (card->options.layer2) { | 5570 | if (card->options.layer2) { |
5572 | qeth_layer2_add_multicast(card); | 5571 | qeth_layer2_add_multicast(card); |
@@ -5583,7 +5582,6 @@ out: | |||
5583 | return; | 5582 | return; |
5584 | if (qeth_set_thread_start_bit(card, QETH_SET_PROMISC_MODE_THREAD)==0) | 5583 | if (qeth_set_thread_start_bit(card, QETH_SET_PROMISC_MODE_THREAD)==0) |
5585 | schedule_work(&card->kernel_thread_starter); | 5584 | schedule_work(&card->kernel_thread_starter); |
5586 | |||
5587 | } | 5585 | } |
5588 | 5586 | ||
5589 | static int | 5587 | static int |
@@ -7456,6 +7454,7 @@ qeth_softsetup_card(struct qeth_card *card) | |||
7456 | card->lan_online = 1; | 7454 | card->lan_online = 1; |
7457 | if (card->info.type==QETH_CARD_TYPE_OSN) | 7455 | if (card->info.type==QETH_CARD_TYPE_OSN) |
7458 | goto out; | 7456 | goto out; |
7457 | qeth_set_large_send(card, card->options.large_send); | ||
7459 | if (card->options.layer2) { | 7458 | if (card->options.layer2) { |
7460 | card->dev->features |= | 7459 | card->dev->features |= |
7461 | NETIF_F_HW_VLAN_FILTER | | 7460 | NETIF_F_HW_VLAN_FILTER | |
@@ -7472,12 +7471,6 @@ qeth_softsetup_card(struct qeth_card *card) | |||
7472 | #endif | 7471 | #endif |
7473 | goto out; | 7472 | goto out; |
7474 | } | 7473 | } |
7475 | if ((card->options.large_send == QETH_LARGE_SEND_EDDP) || | ||
7476 | (card->options.large_send == QETH_LARGE_SEND_TSO)) | ||
7477 | card->dev->features |= NETIF_F_TSO | NETIF_F_SG; | ||
7478 | else | ||
7479 | card->dev->features &= ~(NETIF_F_TSO | NETIF_F_SG); | ||
7480 | |||
7481 | if ((rc = qeth_setadapter_parms(card))) | 7474 | if ((rc = qeth_setadapter_parms(card))) |
7482 | QETH_DBF_TEXT_(setup, 2, "2err%d", rc); | 7475 | QETH_DBF_TEXT_(setup, 2, "2err%d", rc); |
7483 | if ((rc = qeth_start_ipassists(card))) | 7476 | if ((rc = qeth_start_ipassists(card))) |
@@ -8626,12 +8619,7 @@ qeth_init(void) | |||
8626 | { | 8619 | { |
8627 | int rc=0; | 8620 | int rc=0; |
8628 | 8621 | ||
8629 | PRINT_INFO("loading %s (%s/%s/%s/%s/%s/%s/%s %s %s)\n", | 8622 | PRINT_INFO("loading %s\n", version); |
8630 | version, VERSION_QETH_C, VERSION_QETH_H, | ||
8631 | VERSION_QETH_MPC_H, VERSION_QETH_MPC_C, | ||
8632 | VERSION_QETH_FS_H, VERSION_QETH_PROC_C, | ||
8633 | VERSION_QETH_SYS_C, QETH_VERSION_IPV6, | ||
8634 | QETH_VERSION_VLAN); | ||
8635 | 8623 | ||
8636 | INIT_LIST_HEAD(&qeth_card_list.list); | 8624 | INIT_LIST_HEAD(&qeth_card_list.list); |
8637 | INIT_LIST_HEAD(&qeth_notify_list); | 8625 | INIT_LIST_HEAD(&qeth_notify_list); |
diff --git a/drivers/s390/net/qeth_mpc.c b/drivers/s390/net/qeth_mpc.c index 5f8754addc14..77c83209d70e 100644 --- a/drivers/s390/net/qeth_mpc.c +++ b/drivers/s390/net/qeth_mpc.c | |||
@@ -11,8 +11,6 @@ | |||
11 | #include <asm/cio.h> | 11 | #include <asm/cio.h> |
12 | #include "qeth_mpc.h" | 12 | #include "qeth_mpc.h" |
13 | 13 | ||
14 | const char *VERSION_QETH_MPC_C = "$Revision: 1.13 $"; | ||
15 | |||
16 | unsigned char IDX_ACTIVATE_READ[]={ | 14 | unsigned char IDX_ACTIVATE_READ[]={ |
17 | 0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00, | 15 | 0x00,0x00,0x80,0x00, 0x00,0x00,0x00,0x00, |
18 | 0x19,0x01,0x01,0x80, 0x00,0x00,0x00,0x00, | 16 | 0x19,0x01,0x01,0x80, 0x00,0x00,0x00,0x00, |
diff --git a/drivers/s390/net/qeth_mpc.h b/drivers/s390/net/qeth_mpc.h index 864cec5f6c62..011c41041029 100644 --- a/drivers/s390/net/qeth_mpc.h +++ b/drivers/s390/net/qeth_mpc.h | |||
@@ -14,10 +14,6 @@ | |||
14 | 14 | ||
15 | #include <asm/qeth.h> | 15 | #include <asm/qeth.h> |
16 | 16 | ||
17 | #define VERSION_QETH_MPC_H "$Revision: 1.46 $" | ||
18 | |||
19 | extern const char *VERSION_QETH_MPC_C; | ||
20 | |||
21 | #define IPA_PDU_HEADER_SIZE 0x40 | 17 | #define IPA_PDU_HEADER_SIZE 0x40 |
22 | #define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e) | 18 | #define QETH_IPA_PDU_LEN_TOTAL(buffer) (buffer+0x0e) |
23 | #define QETH_IPA_PDU_LEN_PDU1(buffer) (buffer+0x26) | 19 | #define QETH_IPA_PDU_LEN_PDU1(buffer) (buffer+0x26) |
diff --git a/drivers/s390/net/qeth_proc.c b/drivers/s390/net/qeth_proc.c index 7bf35098831e..3c6339df879d 100644 --- a/drivers/s390/net/qeth_proc.c +++ b/drivers/s390/net/qeth_proc.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * |
3 | * linux/drivers/s390/net/qeth_fs.c ($Revision: 1.16 $) | 3 | * linux/drivers/s390/net/qeth_fs.c |
4 | * | 4 | * |
5 | * Linux on zSeries OSA Express and HiperSockets support | 5 | * Linux on zSeries OSA Express and HiperSockets support |
6 | * This file contains code related to procfs. | 6 | * This file contains code related to procfs. |
@@ -21,8 +21,6 @@ | |||
21 | #include "qeth_mpc.h" | 21 | #include "qeth_mpc.h" |
22 | #include "qeth_fs.h" | 22 | #include "qeth_fs.h" |
23 | 23 | ||
24 | const char *VERSION_QETH_PROC_C = "$Revision: 1.16 $"; | ||
25 | |||
26 | /***** /proc/qeth *****/ | 24 | /***** /proc/qeth *****/ |
27 | #define QETH_PROCFILE_NAME "qeth" | 25 | #define QETH_PROCFILE_NAME "qeth" |
28 | static struct proc_dir_entry *qeth_procfile; | 26 | static struct proc_dir_entry *qeth_procfile; |
diff --git a/drivers/s390/net/qeth_sys.c b/drivers/s390/net/qeth_sys.c index 0ea185f70f75..c1831f572585 100644 --- a/drivers/s390/net/qeth_sys.c +++ b/drivers/s390/net/qeth_sys.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * | 2 | * |
3 | * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.60 $) | 3 | * linux/drivers/s390/net/qeth_sys.c |
4 | * | 4 | * |
5 | * Linux on zSeries OSA Express and HiperSockets support | 5 | * Linux on zSeries OSA Express and HiperSockets support |
6 | * This file contains code related to sysfs. | 6 | * This file contains code related to sysfs. |
@@ -20,8 +20,6 @@ | |||
20 | #include "qeth_mpc.h" | 20 | #include "qeth_mpc.h" |
21 | #include "qeth_fs.h" | 21 | #include "qeth_fs.h" |
22 | 22 | ||
23 | const char *VERSION_QETH_SYS_C = "$Revision: 1.60 $"; | ||
24 | |||
25 | /*****************************************************************************/ | 23 | /*****************************************************************************/ |
26 | /* */ | 24 | /* */ |
27 | /* /sys-fs stuff UNDER DEVELOPMENT !!! */ | 25 | /* /sys-fs stuff UNDER DEVELOPMENT !!! */ |
diff --git a/drivers/s390/net/qeth_tso.h b/drivers/s390/net/qeth_tso.h index 3c50b6f24f51..1286ddea450b 100644 --- a/drivers/s390/net/qeth_tso.h +++ b/drivers/s390/net/qeth_tso.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/s390/net/qeth_tso.h ($Revision: 1.8 $) | 2 | * linux/drivers/s390/net/qeth_tso.h |
3 | * | 3 | * |
4 | * Header file for qeth TCP Segmentation Offload support. | 4 | * Header file for qeth TCP Segmentation Offload support. |
5 | * | 5 | * |
@@ -7,8 +7,6 @@ | |||
7 | * | 7 | * |
8 | * Author(s): Frank Pavlic <fpavlic@de.ibm.com> | 8 | * Author(s): Frank Pavlic <fpavlic@de.ibm.com> |
9 | * | 9 | * |
10 | * $Revision: 1.8 $ $Date: 2005/05/04 20:19:18 $ | ||
11 | * | ||
12 | */ | 10 | */ |
13 | #ifndef __QETH_TSO_H__ | 11 | #ifndef __QETH_TSO_H__ |
14 | #define __QETH_TSO_H__ | 12 | #define __QETH_TSO_H__ |
diff --git a/drivers/s390/net/smsgiucv.c b/drivers/s390/net/smsgiucv.c index d6469baa7e16..72118ee68954 100644 --- a/drivers/s390/net/smsgiucv.c +++ b/drivers/s390/net/smsgiucv.c | |||
@@ -168,7 +168,7 @@ smsg_init(void) | |||
168 | driver_unregister(&smsg_driver); | 168 | driver_unregister(&smsg_driver); |
169 | return -EIO; /* better errno ? */ | 169 | return -EIO; /* better errno ? */ |
170 | } | 170 | } |
171 | rc = iucv_connect (&smsg_pathid, 1, 0, "*MSG ", 0, 0, 0, 0, | 171 | rc = iucv_connect (&smsg_pathid, 255, 0, "*MSG ", 0, 0, 0, 0, |
172 | smsg_handle, 0); | 172 | smsg_handle, 0); |
173 | if (rc) { | 173 | if (rc) { |
174 | printk(KERN_ERR "SMSGIUCV: failed to connect to *MSG"); | 174 | printk(KERN_ERR "SMSGIUCV: failed to connect to *MSG"); |
diff --git a/drivers/s390/s390_rdev.c b/drivers/s390/s390_rdev.c index 206518c7d332..e3f647169827 100644 --- a/drivers/s390/s390_rdev.c +++ b/drivers/s390/s390_rdev.c | |||
@@ -1,7 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * drivers/s390/s390_rdev.c | 2 | * drivers/s390/s390_rdev.c |
3 | * s390 root device | 3 | * s390 root device |
4 | * $Revision: 1.4 $ | ||
5 | * | 4 | * |
6 | * Copyright (C) 2002, 2005 IBM Deutschland Entwicklung GmbH, | 5 | * Copyright (C) 2002, 2005 IBM Deutschland Entwicklung GmbH, |
7 | * IBM Corporation | 6 | * IBM Corporation |
diff --git a/drivers/s390/s390mach.h b/drivers/s390/s390mach.h index d9ea7ed2e46e..7abb42a09ae2 100644 --- a/drivers/s390/s390mach.h +++ b/drivers/s390/s390mach.h | |||
@@ -90,15 +90,16 @@ struct crw { | |||
90 | 90 | ||
91 | static inline int stcrw(struct crw *pcrw ) | 91 | static inline int stcrw(struct crw *pcrw ) |
92 | { | 92 | { |
93 | int ccode; | 93 | int ccode; |
94 | 94 | ||
95 | __asm__ __volatile__( | 95 | __asm__ __volatile__( |
96 | "STCRW 0(%1)\n\t" | 96 | "stcrw 0(%2)\n\t" |
97 | "IPM %0\n\t" | 97 | "ipm %0\n\t" |
98 | "SRL %0,28\n\t" | 98 | "srl %0,28\n\t" |
99 | : "=d" (ccode) : "a" (pcrw) | 99 | : "=d" (ccode), "=m" (*pcrw) |
100 | : "cc", "1" ); | 100 | : "a" (pcrw) |
101 | return ccode; | 101 | : "cc" ); |
102 | return ccode; | ||
102 | } | 103 | } |
103 | 104 | ||
104 | #endif /* __s390mach */ | 105 | #endif /* __s390mach */ |
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 167fef39d8a7..95b92f317b6f 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
@@ -29,8 +29,6 @@ | |||
29 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 29 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
30 | */ | 30 | */ |
31 | 31 | ||
32 | #define ZFCP_AUX_REVISION "$Revision: 1.145 $" | ||
33 | |||
34 | #include "zfcp_ext.h" | 32 | #include "zfcp_ext.h" |
35 | 33 | ||
36 | /* accumulated log level (module parameter) */ | 34 | /* accumulated log level (module parameter) */ |
diff --git a/drivers/s390/scsi/zfcp_ccw.c b/drivers/s390/scsi/zfcp_ccw.c index 0fc46381fc22..241136d0c6eb 100644 --- a/drivers/s390/scsi/zfcp_ccw.c +++ b/drivers/s390/scsi/zfcp_ccw.c | |||
@@ -27,8 +27,6 @@ | |||
27 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 27 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
28 | */ | 28 | */ |
29 | 29 | ||
30 | #define ZFCP_CCW_C_REVISION "$Revision: 1.58 $" | ||
31 | |||
32 | #include "zfcp_ext.h" | 30 | #include "zfcp_ext.h" |
33 | 31 | ||
34 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG | 32 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG |
diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c index 95599719f8ab..a5f2ba9a8fdb 100644 --- a/drivers/s390/scsi/zfcp_dbf.c +++ b/drivers/s390/scsi/zfcp_dbf.c | |||
@@ -23,8 +23,6 @@ | |||
23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 23 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #define ZFCP_DBF_REVISION "$Revision$" | ||
27 | |||
28 | #include <asm/debug.h> | 26 | #include <asm/debug.h> |
29 | #include <linux/ctype.h> | 27 | #include <linux/ctype.h> |
30 | #include "zfcp_ext.h" | 28 | #include "zfcp_ext.h" |
@@ -712,10 +710,9 @@ static inline void | |||
712 | _zfcp_scsi_dbf_event_common(const char *tag, const char *tag2, int level, | 710 | _zfcp_scsi_dbf_event_common(const char *tag, const char *tag2, int level, |
713 | struct zfcp_adapter *adapter, | 711 | struct zfcp_adapter *adapter, |
714 | struct scsi_cmnd *scsi_cmnd, | 712 | struct scsi_cmnd *scsi_cmnd, |
715 | struct zfcp_fsf_req *new_fsf_req) | 713 | struct zfcp_fsf_req *fsf_req, |
714 | struct zfcp_fsf_req *old_fsf_req) | ||
716 | { | 715 | { |
717 | struct zfcp_fsf_req *fsf_req = | ||
718 | (struct zfcp_fsf_req *)scsi_cmnd->host_scribble; | ||
719 | struct zfcp_scsi_dbf_record *rec = &adapter->scsi_dbf_buf; | 716 | struct zfcp_scsi_dbf_record *rec = &adapter->scsi_dbf_buf; |
720 | struct zfcp_dbf_dump *dump = (struct zfcp_dbf_dump *)rec; | 717 | struct zfcp_dbf_dump *dump = (struct zfcp_dbf_dump *)rec; |
721 | unsigned long flags; | 718 | unsigned long flags; |
@@ -729,19 +726,20 @@ _zfcp_scsi_dbf_event_common(const char *tag, const char *tag2, int level, | |||
729 | if (offset == 0) { | 726 | if (offset == 0) { |
730 | strncpy(rec->tag, tag, ZFCP_DBF_TAG_SIZE); | 727 | strncpy(rec->tag, tag, ZFCP_DBF_TAG_SIZE); |
731 | strncpy(rec->tag2, tag2, ZFCP_DBF_TAG_SIZE); | 728 | strncpy(rec->tag2, tag2, ZFCP_DBF_TAG_SIZE); |
732 | if (scsi_cmnd->device) { | 729 | if (scsi_cmnd != NULL) { |
733 | rec->scsi_id = scsi_cmnd->device->id; | 730 | if (scsi_cmnd->device) { |
734 | rec->scsi_lun = scsi_cmnd->device->lun; | 731 | rec->scsi_id = scsi_cmnd->device->id; |
732 | rec->scsi_lun = scsi_cmnd->device->lun; | ||
733 | } | ||
734 | rec->scsi_result = scsi_cmnd->result; | ||
735 | rec->scsi_cmnd = (unsigned long)scsi_cmnd; | ||
736 | rec->scsi_serial = scsi_cmnd->serial_number; | ||
737 | memcpy(rec->scsi_opcode, &scsi_cmnd->cmnd, | ||
738 | min((int)scsi_cmnd->cmd_len, | ||
739 | ZFCP_DBF_SCSI_OPCODE)); | ||
740 | rec->scsi_retries = scsi_cmnd->retries; | ||
741 | rec->scsi_allowed = scsi_cmnd->allowed; | ||
735 | } | 742 | } |
736 | rec->scsi_result = scsi_cmnd->result; | ||
737 | rec->scsi_cmnd = (unsigned long)scsi_cmnd; | ||
738 | rec->scsi_serial = scsi_cmnd->serial_number; | ||
739 | memcpy(rec->scsi_opcode, | ||
740 | &scsi_cmnd->cmnd, | ||
741 | min((int)scsi_cmnd->cmd_len, | ||
742 | ZFCP_DBF_SCSI_OPCODE)); | ||
743 | rec->scsi_retries = scsi_cmnd->retries; | ||
744 | rec->scsi_allowed = scsi_cmnd->allowed; | ||
745 | if (fsf_req != NULL) { | 743 | if (fsf_req != NULL) { |
746 | fcp_rsp = (struct fcp_rsp_iu *) | 744 | fcp_rsp = (struct fcp_rsp_iu *) |
747 | &(fsf_req->qtcb->bottom.io.fcp_rsp); | 745 | &(fsf_req->qtcb->bottom.io.fcp_rsp); |
@@ -774,15 +772,8 @@ _zfcp_scsi_dbf_event_common(const char *tag, const char *tag2, int level, | |||
774 | rec->fsf_seqno = fsf_req->seq_no; | 772 | rec->fsf_seqno = fsf_req->seq_no; |
775 | rec->fsf_issued = fsf_req->issued; | 773 | rec->fsf_issued = fsf_req->issued; |
776 | } | 774 | } |
777 | if (new_fsf_req != NULL) { | 775 | rec->type.old_fsf_reqid = |
778 | rec->type.new_fsf_req.fsf_reqid = | 776 | (unsigned long) old_fsf_req; |
779 | (unsigned long) | ||
780 | new_fsf_req; | ||
781 | rec->type.new_fsf_req.fsf_seqno = | ||
782 | new_fsf_req->seq_no; | ||
783 | rec->type.new_fsf_req.fsf_issued = | ||
784 | new_fsf_req->issued; | ||
785 | } | ||
786 | } else { | 777 | } else { |
787 | strncpy(dump->tag, "dump", ZFCP_DBF_TAG_SIZE); | 778 | strncpy(dump->tag, "dump", ZFCP_DBF_TAG_SIZE); |
788 | dump->total_size = buflen; | 779 | dump->total_size = buflen; |
@@ -803,19 +794,21 @@ _zfcp_scsi_dbf_event_common(const char *tag, const char *tag2, int level, | |||
803 | inline void | 794 | inline void |
804 | zfcp_scsi_dbf_event_result(const char *tag, int level, | 795 | zfcp_scsi_dbf_event_result(const char *tag, int level, |
805 | struct zfcp_adapter *adapter, | 796 | struct zfcp_adapter *adapter, |
806 | struct scsi_cmnd *scsi_cmnd) | 797 | struct scsi_cmnd *scsi_cmnd, |
798 | struct zfcp_fsf_req *fsf_req) | ||
807 | { | 799 | { |
808 | _zfcp_scsi_dbf_event_common("rslt", | 800 | _zfcp_scsi_dbf_event_common("rslt", tag, level, |
809 | tag, level, adapter, scsi_cmnd, NULL); | 801 | adapter, scsi_cmnd, fsf_req, NULL); |
810 | } | 802 | } |
811 | 803 | ||
812 | inline void | 804 | inline void |
813 | zfcp_scsi_dbf_event_abort(const char *tag, struct zfcp_adapter *adapter, | 805 | zfcp_scsi_dbf_event_abort(const char *tag, struct zfcp_adapter *adapter, |
814 | struct scsi_cmnd *scsi_cmnd, | 806 | struct scsi_cmnd *scsi_cmnd, |
815 | struct zfcp_fsf_req *new_fsf_req) | 807 | struct zfcp_fsf_req *new_fsf_req, |
808 | struct zfcp_fsf_req *old_fsf_req) | ||
816 | { | 809 | { |
817 | _zfcp_scsi_dbf_event_common("abrt", | 810 | _zfcp_scsi_dbf_event_common("abrt", tag, 1, |
818 | tag, 1, adapter, scsi_cmnd, new_fsf_req); | 811 | adapter, scsi_cmnd, new_fsf_req, old_fsf_req); |
819 | } | 812 | } |
820 | 813 | ||
821 | inline void | 814 | inline void |
@@ -825,7 +818,7 @@ zfcp_scsi_dbf_event_devreset(const char *tag, u8 flag, struct zfcp_unit *unit, | |||
825 | struct zfcp_adapter *adapter = unit->port->adapter; | 818 | struct zfcp_adapter *adapter = unit->port->adapter; |
826 | 819 | ||
827 | _zfcp_scsi_dbf_event_common(flag == FCP_TARGET_RESET ? "trst" : "lrst", | 820 | _zfcp_scsi_dbf_event_common(flag == FCP_TARGET_RESET ? "trst" : "lrst", |
828 | tag, 1, adapter, scsi_cmnd, NULL); | 821 | tag, 1, adapter, scsi_cmnd, NULL, NULL); |
829 | } | 822 | } |
830 | 823 | ||
831 | static int | 824 | static int |
@@ -858,6 +851,10 @@ zfcp_scsi_dbf_view_format(debug_info_t * id, struct debug_view *view, | |||
858 | rec->scsi_retries); | 851 | rec->scsi_retries); |
859 | len += zfcp_dbf_view(out_buf + len, "scsi_allowed", "0x%02x", | 852 | len += zfcp_dbf_view(out_buf + len, "scsi_allowed", "0x%02x", |
860 | rec->scsi_allowed); | 853 | rec->scsi_allowed); |
854 | if (strncmp(rec->tag, "abrt", ZFCP_DBF_TAG_SIZE) == 0) { | ||
855 | len += zfcp_dbf_view(out_buf + len, "old_fsf_reqid", "0x%0Lx", | ||
856 | rec->type.old_fsf_reqid); | ||
857 | } | ||
861 | len += zfcp_dbf_view(out_buf + len, "fsf_reqid", "0x%0Lx", | 858 | len += zfcp_dbf_view(out_buf + len, "fsf_reqid", "0x%0Lx", |
862 | rec->fsf_reqid); | 859 | rec->fsf_reqid); |
863 | len += zfcp_dbf_view(out_buf + len, "fsf_seqno", "0x%08x", | 860 | len += zfcp_dbf_view(out_buf + len, "fsf_seqno", "0x%08x", |
@@ -885,21 +882,6 @@ zfcp_scsi_dbf_view_format(debug_info_t * id, struct debug_view *view, | |||
885 | min((int)rec->type.fcp.sns_info_len, | 882 | min((int)rec->type.fcp.sns_info_len, |
886 | ZFCP_DBF_SCSI_FCP_SNS_INFO), 0, | 883 | ZFCP_DBF_SCSI_FCP_SNS_INFO), 0, |
887 | rec->type.fcp.sns_info_len); | 884 | rec->type.fcp.sns_info_len); |
888 | } else if (strncmp(rec->tag, "abrt", ZFCP_DBF_TAG_SIZE) == 0) { | ||
889 | len += zfcp_dbf_view(out_buf + len, "fsf_reqid_abort", "0x%0Lx", | ||
890 | rec->type.new_fsf_req.fsf_reqid); | ||
891 | len += zfcp_dbf_view(out_buf + len, "fsf_seqno_abort", "0x%08x", | ||
892 | rec->type.new_fsf_req.fsf_seqno); | ||
893 | len += zfcp_dbf_stck(out_buf + len, "fsf_issued", | ||
894 | rec->type.new_fsf_req.fsf_issued); | ||
895 | } else if ((strncmp(rec->tag, "trst", ZFCP_DBF_TAG_SIZE) == 0) || | ||
896 | (strncmp(rec->tag, "lrst", ZFCP_DBF_TAG_SIZE) == 0)) { | ||
897 | len += zfcp_dbf_view(out_buf + len, "fsf_reqid_reset", "0x%0Lx", | ||
898 | rec->type.new_fsf_req.fsf_reqid); | ||
899 | len += zfcp_dbf_view(out_buf + len, "fsf_seqno_reset", "0x%08x", | ||
900 | rec->type.new_fsf_req.fsf_seqno); | ||
901 | len += zfcp_dbf_stck(out_buf + len, "fsf_issued", | ||
902 | rec->type.new_fsf_req.fsf_issued); | ||
903 | } | 885 | } |
904 | 886 | ||
905 | len += sprintf(out_buf + len, "\n"); | 887 | len += sprintf(out_buf + len, "\n"); |
diff --git a/drivers/s390/scsi/zfcp_def.h b/drivers/s390/scsi/zfcp_def.h index 9bb511083a26..6eba56cd89ba 100644 --- a/drivers/s390/scsi/zfcp_def.h +++ b/drivers/s390/scsi/zfcp_def.h | |||
@@ -34,8 +34,6 @@ | |||
34 | #ifndef ZFCP_DEF_H | 34 | #ifndef ZFCP_DEF_H |
35 | #define ZFCP_DEF_H | 35 | #define ZFCP_DEF_H |
36 | 36 | ||
37 | #define ZFCP_DEF_REVISION "$Revision: 1.111 $" | ||
38 | |||
39 | /*************************** INCLUDES *****************************************/ | 37 | /*************************** INCLUDES *****************************************/ |
40 | 38 | ||
41 | #include <linux/init.h> | 39 | #include <linux/init.h> |
@@ -154,11 +152,6 @@ typedef u32 scsi_lun_t; | |||
154 | #define ZFCP_EXCHANGE_CONFIG_DATA_FIRST_SLEEP 100 | 152 | #define ZFCP_EXCHANGE_CONFIG_DATA_FIRST_SLEEP 100 |
155 | #define ZFCP_EXCHANGE_CONFIG_DATA_RETRIES 7 | 153 | #define ZFCP_EXCHANGE_CONFIG_DATA_RETRIES 7 |
156 | 154 | ||
157 | /* Retry 5 times every 2 second, then every minute */ | ||
158 | #define ZFCP_EXCHANGE_PORT_DATA_SHORT_RETRIES 5 | ||
159 | #define ZFCP_EXCHANGE_PORT_DATA_SHORT_SLEEP 200 | ||
160 | #define ZFCP_EXCHANGE_PORT_DATA_LONG_SLEEP 6000 | ||
161 | |||
162 | /* timeout value for "default timer" for fsf requests */ | 155 | /* timeout value for "default timer" for fsf requests */ |
163 | #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ); | 156 | #define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ); |
164 | 157 | ||
@@ -431,11 +424,7 @@ struct zfcp_scsi_dbf_record { | |||
431 | u32 fsf_seqno; | 424 | u32 fsf_seqno; |
432 | u64 fsf_issued; | 425 | u64 fsf_issued; |
433 | union { | 426 | union { |
434 | struct { | 427 | u64 old_fsf_reqid; |
435 | u64 fsf_reqid; | ||
436 | u32 fsf_seqno; | ||
437 | u64 fsf_issued; | ||
438 | } new_fsf_req; | ||
439 | struct { | 428 | struct { |
440 | u8 rsp_validity; | 429 | u8 rsp_validity; |
441 | u8 rsp_scsi_status; | 430 | u8 rsp_scsi_status; |
@@ -675,6 +664,7 @@ do { \ | |||
675 | #define ZFCP_STATUS_UNIT_TEMPORARY 0x00000002 | 664 | #define ZFCP_STATUS_UNIT_TEMPORARY 0x00000002 |
676 | #define ZFCP_STATUS_UNIT_SHARED 0x00000004 | 665 | #define ZFCP_STATUS_UNIT_SHARED 0x00000004 |
677 | #define ZFCP_STATUS_UNIT_READONLY 0x00000008 | 666 | #define ZFCP_STATUS_UNIT_READONLY 0x00000008 |
667 | #define ZFCP_STATUS_UNIT_REGISTERED 0x00000010 | ||
678 | 668 | ||
679 | /* FSF request status (this does not have a common part) */ | 669 | /* FSF request status (this does not have a common part) */ |
680 | #define ZFCP_STATUS_FSFREQ_NOT_INIT 0x00000000 | 670 | #define ZFCP_STATUS_FSFREQ_NOT_INIT 0x00000000 |
@@ -917,8 +907,6 @@ struct zfcp_adapter { | |||
917 | wwn_t peer_wwnn; /* P2P peer WWNN */ | 907 | wwn_t peer_wwnn; /* P2P peer WWNN */ |
918 | wwn_t peer_wwpn; /* P2P peer WWPN */ | 908 | wwn_t peer_wwpn; /* P2P peer WWPN */ |
919 | u32 peer_d_id; /* P2P peer D_ID */ | 909 | u32 peer_d_id; /* P2P peer D_ID */ |
920 | wwn_t physical_wwpn; /* WWPN of physical port */ | ||
921 | u32 physical_s_id; /* local FC port ID */ | ||
922 | struct ccw_device *ccw_device; /* S/390 ccw device */ | 910 | struct ccw_device *ccw_device; /* S/390 ccw device */ |
923 | u8 fc_service_class; | 911 | u8 fc_service_class; |
924 | u32 hydra_version; /* Hydra version */ | 912 | u32 hydra_version; /* Hydra version */ |
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index c065cb836c97..57cb628a05aa 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
@@ -31,8 +31,6 @@ | |||
31 | 31 | ||
32 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_ERP | 32 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_ERP |
33 | 33 | ||
34 | #define ZFCP_ERP_REVISION "$Revision: 1.86 $" | ||
35 | |||
36 | #include "zfcp_ext.h" | 34 | #include "zfcp_ext.h" |
37 | 35 | ||
38 | static int zfcp_erp_adisc(struct zfcp_port *); | 36 | static int zfcp_erp_adisc(struct zfcp_port *); |
@@ -2248,15 +2246,6 @@ zfcp_erp_adapter_strategy_open_fsf(struct zfcp_erp_action *erp_action) | |||
2248 | { | 2246 | { |
2249 | int retval; | 2247 | int retval; |
2250 | 2248 | ||
2251 | if ((atomic_test_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, | ||
2252 | &erp_action->adapter->status)) && | ||
2253 | (erp_action->adapter->adapter_features & | ||
2254 | FSF_FEATURE_HBAAPI_MANAGEMENT)) { | ||
2255 | zfcp_erp_adapter_strategy_open_fsf_xport(erp_action); | ||
2256 | atomic_set(&erp_action->adapter->erp_counter, 0); | ||
2257 | return ZFCP_ERP_FAILED; | ||
2258 | } | ||
2259 | |||
2260 | retval = zfcp_erp_adapter_strategy_open_fsf_xconfig(erp_action); | 2249 | retval = zfcp_erp_adapter_strategy_open_fsf_xconfig(erp_action); |
2261 | if (retval == ZFCP_ERP_FAILED) | 2250 | if (retval == ZFCP_ERP_FAILED) |
2262 | return ZFCP_ERP_FAILED; | 2251 | return ZFCP_ERP_FAILED; |
@@ -2268,13 +2257,6 @@ zfcp_erp_adapter_strategy_open_fsf(struct zfcp_erp_action *erp_action) | |||
2268 | return zfcp_erp_adapter_strategy_open_fsf_statusread(erp_action); | 2257 | return zfcp_erp_adapter_strategy_open_fsf_statusread(erp_action); |
2269 | } | 2258 | } |
2270 | 2259 | ||
2271 | /* | ||
2272 | * function: | ||
2273 | * | ||
2274 | * purpose: | ||
2275 | * | ||
2276 | * returns: | ||
2277 | */ | ||
2278 | static int | 2260 | static int |
2279 | zfcp_erp_adapter_strategy_open_fsf_xconfig(struct zfcp_erp_action *erp_action) | 2261 | zfcp_erp_adapter_strategy_open_fsf_xconfig(struct zfcp_erp_action *erp_action) |
2280 | { | 2262 | { |
@@ -2352,48 +2334,40 @@ static int | |||
2352 | zfcp_erp_adapter_strategy_open_fsf_xport(struct zfcp_erp_action *erp_action) | 2334 | zfcp_erp_adapter_strategy_open_fsf_xport(struct zfcp_erp_action *erp_action) |
2353 | { | 2335 | { |
2354 | int ret; | 2336 | int ret; |
2355 | int retries; | 2337 | struct zfcp_adapter *adapter; |
2356 | int sleep; | ||
2357 | struct zfcp_adapter *adapter = erp_action->adapter; | ||
2358 | 2338 | ||
2339 | adapter = erp_action->adapter; | ||
2359 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_XPORT_OK, &adapter->status); | 2340 | atomic_clear_mask(ZFCP_STATUS_ADAPTER_XPORT_OK, &adapter->status); |
2360 | 2341 | ||
2361 | retries = 0; | 2342 | write_lock(&adapter->erp_lock); |
2362 | do { | 2343 | zfcp_erp_action_to_running(erp_action); |
2363 | write_lock(&adapter->erp_lock); | 2344 | write_unlock(&adapter->erp_lock); |
2364 | zfcp_erp_action_to_running(erp_action); | ||
2365 | write_unlock(&adapter->erp_lock); | ||
2366 | zfcp_erp_timeout_init(erp_action); | ||
2367 | ret = zfcp_fsf_exchange_port_data(erp_action, adapter, NULL); | ||
2368 | if (ret == -EOPNOTSUPP) { | ||
2369 | debug_text_event(adapter->erp_dbf, 3, "a_xport_notsupp"); | ||
2370 | return ZFCP_ERP_SUCCEEDED; | ||
2371 | } else if (ret) { | ||
2372 | debug_text_event(adapter->erp_dbf, 3, "a_xport_failed"); | ||
2373 | return ZFCP_ERP_FAILED; | ||
2374 | } | ||
2375 | debug_text_event(adapter->erp_dbf, 6, "a_xport_ok"); | ||
2376 | 2345 | ||
2377 | down(&adapter->erp_ready_sem); | 2346 | zfcp_erp_timeout_init(erp_action); |
2378 | if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) { | 2347 | ret = zfcp_fsf_exchange_port_data(erp_action, adapter, NULL); |
2379 | ZFCP_LOG_INFO("error: exchange of port data " | 2348 | if (ret == -EOPNOTSUPP) { |
2380 | "for adapter %s timed out\n", | 2349 | debug_text_event(adapter->erp_dbf, 3, "a_xport_notsupp"); |
2381 | zfcp_get_busid_by_adapter(adapter)); | 2350 | return ZFCP_ERP_SUCCEEDED; |
2382 | break; | 2351 | } else if (ret) { |
2383 | } | 2352 | debug_text_event(adapter->erp_dbf, 3, "a_xport_failed"); |
2384 | if (!atomic_test_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, | 2353 | return ZFCP_ERP_FAILED; |
2385 | &adapter->status)) | 2354 | } |
2386 | break; | 2355 | debug_text_event(adapter->erp_dbf, 6, "a_xport_ok"); |
2387 | 2356 | ||
2388 | if (retries < ZFCP_EXCHANGE_PORT_DATA_SHORT_RETRIES) { | 2357 | ret = ZFCP_ERP_SUCCEEDED; |
2389 | sleep = ZFCP_EXCHANGE_PORT_DATA_SHORT_SLEEP; | 2358 | down(&adapter->erp_ready_sem); |
2390 | retries++; | 2359 | if (erp_action->status & ZFCP_STATUS_ERP_TIMEDOUT) { |
2391 | } else | 2360 | ZFCP_LOG_INFO("error: exchange port data timed out (adapter " |
2392 | sleep = ZFCP_EXCHANGE_PORT_DATA_LONG_SLEEP; | 2361 | "%s)\n", zfcp_get_busid_by_adapter(adapter)); |
2393 | schedule_timeout(sleep); | 2362 | ret = ZFCP_ERP_FAILED; |
2394 | } while (1); | 2363 | } |
2364 | if (!atomic_test_mask(ZFCP_STATUS_ADAPTER_XPORT_OK, &adapter->status)) { | ||
2365 | ZFCP_LOG_INFO("error: exchange port data failed (adapter " | ||
2366 | "%s\n", zfcp_get_busid_by_adapter(adapter)); | ||
2367 | ret = ZFCP_ERP_FAILED; | ||
2368 | } | ||
2395 | 2369 | ||
2396 | return ZFCP_ERP_SUCCEEDED; | 2370 | return ret; |
2397 | } | 2371 | } |
2398 | 2372 | ||
2399 | /* | 2373 | /* |
@@ -3417,10 +3391,13 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter, | |||
3417 | && (!atomic_test_mask(ZFCP_STATUS_UNIT_TEMPORARY, | 3391 | && (!atomic_test_mask(ZFCP_STATUS_UNIT_TEMPORARY, |
3418 | &unit->status)) | 3392 | &unit->status)) |
3419 | && !unit->device | 3393 | && !unit->device |
3420 | && port->rport) | 3394 | && port->rport) { |
3421 | scsi_add_device(port->adapter->scsi_host, 0, | 3395 | atomic_set_mask(ZFCP_STATUS_UNIT_REGISTERED, |
3422 | port->rport->scsi_target_id, | 3396 | &unit->status); |
3423 | unit->scsi_lun); | 3397 | scsi_scan_target(&port->rport->dev, 0, |
3398 | port->rport->scsi_target_id, | ||
3399 | unit->scsi_lun, 0); | ||
3400 | } | ||
3424 | zfcp_unit_put(unit); | 3401 | zfcp_unit_put(unit); |
3425 | break; | 3402 | break; |
3426 | case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: | 3403 | case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: |
@@ -3441,6 +3418,8 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter, | |||
3441 | "(adapter %s, wwpn=0x%016Lx)\n", | 3418 | "(adapter %s, wwpn=0x%016Lx)\n", |
3442 | zfcp_get_busid_by_port(port), | 3419 | zfcp_get_busid_by_port(port), |
3443 | port->wwpn); | 3420 | port->wwpn); |
3421 | else | ||
3422 | scsi_flush_work(adapter->scsi_host); | ||
3444 | } | 3423 | } |
3445 | zfcp_port_put(port); | 3424 | zfcp_port_put(port); |
3446 | break; | 3425 | break; |
diff --git a/drivers/s390/scsi/zfcp_ext.h b/drivers/s390/scsi/zfcp_ext.h index c3782261cb5c..700f5402a978 100644 --- a/drivers/s390/scsi/zfcp_ext.h +++ b/drivers/s390/scsi/zfcp_ext.h | |||
@@ -32,8 +32,6 @@ | |||
32 | #ifndef ZFCP_EXT_H | 32 | #ifndef ZFCP_EXT_H |
33 | #define ZFCP_EXT_H | 33 | #define ZFCP_EXT_H |
34 | 34 | ||
35 | #define ZFCP_EXT_REVISION "$Revision: 1.62 $" | ||
36 | |||
37 | #include "zfcp_def.h" | 35 | #include "zfcp_def.h" |
38 | 36 | ||
39 | extern struct zfcp_data zfcp_data; | 37 | extern struct zfcp_data zfcp_data; |
@@ -196,9 +194,10 @@ extern void zfcp_san_dbf_event_els_response(struct zfcp_fsf_req *); | |||
196 | extern void zfcp_san_dbf_event_incoming_els(struct zfcp_fsf_req *); | 194 | extern void zfcp_san_dbf_event_incoming_els(struct zfcp_fsf_req *); |
197 | 195 | ||
198 | extern void zfcp_scsi_dbf_event_result(const char *, int, struct zfcp_adapter *, | 196 | extern void zfcp_scsi_dbf_event_result(const char *, int, struct zfcp_adapter *, |
199 | struct scsi_cmnd *); | 197 | struct scsi_cmnd *, |
198 | struct zfcp_fsf_req *); | ||
200 | extern void zfcp_scsi_dbf_event_abort(const char *, struct zfcp_adapter *, | 199 | extern void zfcp_scsi_dbf_event_abort(const char *, struct zfcp_adapter *, |
201 | struct scsi_cmnd *, | 200 | struct scsi_cmnd *, struct zfcp_fsf_req *, |
202 | struct zfcp_fsf_req *); | 201 | struct zfcp_fsf_req *); |
203 | extern void zfcp_scsi_dbf_event_devreset(const char *, u8, struct zfcp_unit *, | 202 | extern void zfcp_scsi_dbf_event_devreset(const char *, u8, struct zfcp_unit *, |
204 | struct scsi_cmnd *); | 203 | struct scsi_cmnd *); |
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index cbfab09899c8..662ec571d73b 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c | |||
@@ -30,8 +30,6 @@ | |||
30 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 30 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
31 | */ | 31 | */ |
32 | 32 | ||
33 | #define ZFCP_FSF_C_REVISION "$Revision: 1.92 $" | ||
34 | |||
35 | #include "zfcp_ext.h" | 33 | #include "zfcp_ext.h" |
36 | 34 | ||
37 | static int zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *); | 35 | static int zfcp_fsf_exchange_config_data_handler(struct zfcp_fsf_req *); |
@@ -390,6 +388,7 @@ zfcp_fsf_protstatus_eval(struct zfcp_fsf_req *fsf_req) | |||
390 | case FSF_PROT_LINK_DOWN: | 388 | case FSF_PROT_LINK_DOWN: |
391 | zfcp_fsf_link_down_info_eval(adapter, | 389 | zfcp_fsf_link_down_info_eval(adapter, |
392 | &prot_status_qual->link_down_info); | 390 | &prot_status_qual->link_down_info); |
391 | zfcp_erp_adapter_reopen(adapter, 0); | ||
393 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; | 392 | fsf_req->status |= ZFCP_STATUS_FSFREQ_ERROR; |
394 | break; | 393 | break; |
395 | 394 | ||
@@ -560,10 +559,8 @@ zfcp_fsf_link_down_info_eval(struct zfcp_adapter *adapter, | |||
560 | 559 | ||
561 | atomic_set_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status); | 560 | atomic_set_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status); |
562 | 561 | ||
563 | if (link_down == NULL) { | 562 | if (link_down == NULL) |
564 | zfcp_erp_adapter_reopen(adapter, 0); | 563 | goto out; |
565 | return; | ||
566 | } | ||
567 | 564 | ||
568 | switch (link_down->error_code) { | 565 | switch (link_down->error_code) { |
569 | case FSF_PSQ_LINK_NO_LIGHT: | 566 | case FSF_PSQ_LINK_NO_LIGHT: |
@@ -645,16 +642,8 @@ zfcp_fsf_link_down_info_eval(struct zfcp_adapter *adapter, | |||
645 | link_down->explanation_code, | 642 | link_down->explanation_code, |
646 | link_down->vendor_specific_code); | 643 | link_down->vendor_specific_code); |
647 | 644 | ||
648 | switch (link_down->error_code) { | 645 | out: |
649 | case FSF_PSQ_LINK_NO_LIGHT: | 646 | zfcp_erp_adapter_failed(adapter); |
650 | case FSF_PSQ_LINK_WRAP_PLUG: | ||
651 | case FSF_PSQ_LINK_NO_FCP: | ||
652 | case FSF_PSQ_LINK_FIRMWARE_UPDATE: | ||
653 | zfcp_erp_adapter_reopen(adapter, 0); | ||
654 | break; | ||
655 | default: | ||
656 | zfcp_erp_adapter_failed(adapter); | ||
657 | } | ||
658 | } | 647 | } |
659 | 648 | ||
660 | /* | 649 | /* |
@@ -2306,6 +2295,35 @@ zfcp_fsf_exchange_port_data(struct zfcp_erp_action *erp_action, | |||
2306 | return retval; | 2295 | return retval; |
2307 | } | 2296 | } |
2308 | 2297 | ||
2298 | /** | ||
2299 | * zfcp_fsf_exchange_port_evaluate | ||
2300 | * @fsf_req: fsf_req which belongs to xchg port data request | ||
2301 | * @xchg_ok: specifies if xchg port data was incomplete or complete (0/1) | ||
2302 | */ | ||
2303 | static void | ||
2304 | zfcp_fsf_exchange_port_evaluate(struct zfcp_fsf_req *fsf_req, int xchg_ok) | ||
2305 | { | ||
2306 | struct zfcp_adapter *adapter; | ||
2307 | struct fsf_qtcb *qtcb; | ||
2308 | struct fsf_qtcb_bottom_port *bottom, *data; | ||
2309 | struct Scsi_Host *shost; | ||
2310 | |||
2311 | adapter = fsf_req->adapter; | ||
2312 | qtcb = fsf_req->qtcb; | ||
2313 | bottom = &qtcb->bottom.port; | ||
2314 | shost = adapter->scsi_host; | ||
2315 | |||
2316 | data = (struct fsf_qtcb_bottom_port*) fsf_req->data; | ||
2317 | if (data) | ||
2318 | memcpy(data, bottom, sizeof(struct fsf_qtcb_bottom_port)); | ||
2319 | |||
2320 | if (adapter->connection_features & FSF_FEATURE_NPIV_MODE) | ||
2321 | fc_host_permanent_port_name(shost) = bottom->wwpn; | ||
2322 | else | ||
2323 | fc_host_permanent_port_name(shost) = fc_host_port_name(shost); | ||
2324 | fc_host_maxframe_size(shost) = bottom->maximum_frame_size; | ||
2325 | fc_host_supported_speeds(shost) = bottom->supported_speed; | ||
2326 | } | ||
2309 | 2327 | ||
2310 | /** | 2328 | /** |
2311 | * zfcp_fsf_exchange_port_data_handler - handler for exchange_port_data request | 2329 | * zfcp_fsf_exchange_port_data_handler - handler for exchange_port_data request |
@@ -2314,38 +2332,26 @@ zfcp_fsf_exchange_port_data(struct zfcp_erp_action *erp_action, | |||
2314 | static void | 2332 | static void |
2315 | zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *fsf_req) | 2333 | zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *fsf_req) |
2316 | { | 2334 | { |
2317 | struct zfcp_adapter *adapter = fsf_req->adapter; | 2335 | struct zfcp_adapter *adapter; |
2318 | struct Scsi_Host *shost = adapter->scsi_host; | 2336 | struct fsf_qtcb *qtcb; |
2319 | struct fsf_qtcb *qtcb = fsf_req->qtcb; | 2337 | |
2320 | struct fsf_qtcb_bottom_port *bottom, *data; | 2338 | adapter = fsf_req->adapter; |
2339 | qtcb = fsf_req->qtcb; | ||
2321 | 2340 | ||
2322 | if (fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR) | 2341 | if (fsf_req->status & ZFCP_STATUS_FSFREQ_ERROR) |
2323 | return; | 2342 | return; |
2324 | 2343 | ||
2325 | switch (qtcb->header.fsf_status) { | 2344 | switch (qtcb->header.fsf_status) { |
2326 | case FSF_GOOD: | 2345 | case FSF_GOOD: |
2346 | zfcp_fsf_exchange_port_evaluate(fsf_req, 1); | ||
2327 | atomic_set_mask(ZFCP_STATUS_ADAPTER_XPORT_OK, &adapter->status); | 2347 | atomic_set_mask(ZFCP_STATUS_ADAPTER_XPORT_OK, &adapter->status); |
2328 | |||
2329 | bottom = &qtcb->bottom.port; | ||
2330 | data = (struct fsf_qtcb_bottom_port*) fsf_req->data; | ||
2331 | if (data) | ||
2332 | memcpy(data, bottom, sizeof(struct fsf_qtcb_bottom_port)); | ||
2333 | if (adapter->connection_features & FSF_FEATURE_NPIV_MODE) | ||
2334 | fc_host_permanent_port_name(shost) = bottom->wwpn; | ||
2335 | else | ||
2336 | fc_host_permanent_port_name(shost) = | ||
2337 | fc_host_port_name(shost); | ||
2338 | fc_host_maxframe_size(shost) = bottom->maximum_frame_size; | ||
2339 | fc_host_supported_speeds(shost) = bottom->supported_speed; | ||
2340 | break; | 2348 | break; |
2341 | |||
2342 | case FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE: | 2349 | case FSF_EXCHANGE_CONFIG_DATA_INCOMPLETE: |
2350 | zfcp_fsf_exchange_port_evaluate(fsf_req, 0); | ||
2343 | atomic_set_mask(ZFCP_STATUS_ADAPTER_XPORT_OK, &adapter->status); | 2351 | atomic_set_mask(ZFCP_STATUS_ADAPTER_XPORT_OK, &adapter->status); |
2344 | |||
2345 | zfcp_fsf_link_down_info_eval(adapter, | 2352 | zfcp_fsf_link_down_info_eval(adapter, |
2346 | &qtcb->header.fsf_status_qual.link_down_info); | 2353 | &qtcb->header.fsf_status_qual.link_down_info); |
2347 | break; | 2354 | break; |
2348 | |||
2349 | default: | 2355 | default: |
2350 | debug_text_event(adapter->erp_dbf, 0, "xchg-port-ng"); | 2356 | debug_text_event(adapter->erp_dbf, 0, "xchg-port-ng"); |
2351 | debug_event(adapter->erp_dbf, 0, | 2357 | debug_event(adapter->erp_dbf, 0, |
@@ -4205,11 +4211,11 @@ zfcp_fsf_send_fcp_command_task_handler(struct zfcp_fsf_req *fsf_req) | |||
4205 | ZFCP_LOG_DEBUG("scpnt->result =0x%x\n", scpnt->result); | 4211 | ZFCP_LOG_DEBUG("scpnt->result =0x%x\n", scpnt->result); |
4206 | 4212 | ||
4207 | if (scpnt->result != 0) | 4213 | if (scpnt->result != 0) |
4208 | zfcp_scsi_dbf_event_result("erro", 3, fsf_req->adapter, scpnt); | 4214 | zfcp_scsi_dbf_event_result("erro", 3, fsf_req->adapter, scpnt, fsf_req); |
4209 | else if (scpnt->retries > 0) | 4215 | else if (scpnt->retries > 0) |
4210 | zfcp_scsi_dbf_event_result("retr", 4, fsf_req->adapter, scpnt); | 4216 | zfcp_scsi_dbf_event_result("retr", 4, fsf_req->adapter, scpnt, fsf_req); |
4211 | else | 4217 | else |
4212 | zfcp_scsi_dbf_event_result("norm", 6, fsf_req->adapter, scpnt); | 4218 | zfcp_scsi_dbf_event_result("norm", 6, fsf_req->adapter, scpnt, fsf_req); |
4213 | 4219 | ||
4214 | /* cleanup pointer (need this especially for abort) */ | 4220 | /* cleanup pointer (need this especially for abort) */ |
4215 | scpnt->host_scribble = NULL; | 4221 | scpnt->host_scribble = NULL; |
diff --git a/drivers/s390/scsi/zfcp_qdio.c b/drivers/s390/scsi/zfcp_qdio.c index d719f66a29a4..1c3275163c91 100644 --- a/drivers/s390/scsi/zfcp_qdio.c +++ b/drivers/s390/scsi/zfcp_qdio.c | |||
@@ -29,8 +29,6 @@ | |||
29 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 29 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
30 | */ | 30 | */ |
31 | 31 | ||
32 | #define ZFCP_QDIO_C_REVISION "$Revision: 1.20 $" | ||
33 | |||
34 | #include "zfcp_ext.h" | 32 | #include "zfcp_ext.h" |
35 | 33 | ||
36 | static inline void zfcp_qdio_sbal_limit(struct zfcp_fsf_req *, int); | 34 | static inline void zfcp_qdio_sbal_limit(struct zfcp_fsf_req *, int); |
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index 3c2cbcccbf54..9e6d07d7b3c8 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
@@ -31,8 +31,6 @@ | |||
31 | 31 | ||
32 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_SCSI | 32 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_SCSI |
33 | 33 | ||
34 | #define ZFCP_SCSI_REVISION "$Revision: 1.74 $" | ||
35 | |||
36 | #include "zfcp_ext.h" | 34 | #include "zfcp_ext.h" |
37 | 35 | ||
38 | static void zfcp_scsi_slave_destroy(struct scsi_device *sdp); | 36 | static void zfcp_scsi_slave_destroy(struct scsi_device *sdp); |
@@ -70,7 +68,7 @@ struct zfcp_data zfcp_data = { | |||
70 | eh_host_reset_handler: zfcp_scsi_eh_host_reset_handler, | 68 | eh_host_reset_handler: zfcp_scsi_eh_host_reset_handler, |
71 | /* FIXME(openfcp): Tune */ | 69 | /* FIXME(openfcp): Tune */ |
72 | can_queue: 4096, | 70 | can_queue: 4096, |
73 | this_id: 0, | 71 | this_id: -1, |
74 | /* | 72 | /* |
75 | * FIXME: | 73 | * FIXME: |
76 | * one less? can zfcp_create_sbale cope with it? | 74 | * one less? can zfcp_create_sbale cope with it? |
@@ -185,7 +183,8 @@ zfcp_scsi_slave_alloc(struct scsi_device *sdp) | |||
185 | 183 | ||
186 | read_lock_irqsave(&zfcp_data.config_lock, flags); | 184 | read_lock_irqsave(&zfcp_data.config_lock, flags); |
187 | unit = zfcp_unit_lookup(adapter, sdp->channel, sdp->id, sdp->lun); | 185 | unit = zfcp_unit_lookup(adapter, sdp->channel, sdp->id, sdp->lun); |
188 | if (unit) { | 186 | if (unit && atomic_test_mask(ZFCP_STATUS_UNIT_REGISTERED, |
187 | &unit->status)) { | ||
189 | sdp->hostdata = unit; | 188 | sdp->hostdata = unit; |
190 | unit->device = sdp; | 189 | unit->device = sdp; |
191 | zfcp_unit_get(unit); | 190 | zfcp_unit_get(unit); |
@@ -210,6 +209,7 @@ zfcp_scsi_slave_destroy(struct scsi_device *sdpnt) | |||
210 | struct zfcp_unit *unit = (struct zfcp_unit *) sdpnt->hostdata; | 209 | struct zfcp_unit *unit = (struct zfcp_unit *) sdpnt->hostdata; |
211 | 210 | ||
212 | if (unit) { | 211 | if (unit) { |
212 | atomic_clear_mask(ZFCP_STATUS_UNIT_REGISTERED, &unit->status); | ||
213 | sdpnt->hostdata = NULL; | 213 | sdpnt->hostdata = NULL; |
214 | unit->device = NULL; | 214 | unit->device = NULL; |
215 | zfcp_unit_put(unit); | 215 | zfcp_unit_put(unit); |
@@ -244,7 +244,7 @@ zfcp_scsi_command_fail(struct scsi_cmnd *scpnt, int result) | |||
244 | if ((scpnt->device != NULL) && (scpnt->device->host != NULL)) | 244 | if ((scpnt->device != NULL) && (scpnt->device->host != NULL)) |
245 | zfcp_scsi_dbf_event_result("fail", 4, | 245 | zfcp_scsi_dbf_event_result("fail", 4, |
246 | (struct zfcp_adapter*) scpnt->device->host->hostdata[0], | 246 | (struct zfcp_adapter*) scpnt->device->host->hostdata[0], |
247 | scpnt); | 247 | scpnt, NULL); |
248 | /* return directly */ | 248 | /* return directly */ |
249 | scpnt->scsi_done(scpnt); | 249 | scpnt->scsi_done(scpnt); |
250 | } | 250 | } |
@@ -293,7 +293,7 @@ zfcp_scsi_command_async(struct zfcp_adapter *adapter, struct zfcp_unit *unit, | |||
293 | "on port 0x%016Lx in recovery\n", | 293 | "on port 0x%016Lx in recovery\n", |
294 | zfcp_get_busid_by_unit(unit), | 294 | zfcp_get_busid_by_unit(unit), |
295 | unit->fcp_lun, unit->port->wwpn); | 295 | unit->fcp_lun, unit->port->wwpn); |
296 | retval = SCSI_MLQUEUE_DEVICE_BUSY; | 296 | zfcp_scsi_command_fail(scpnt, DID_NO_CONNECT); |
297 | goto out; | 297 | goto out; |
298 | } | 298 | } |
299 | 299 | ||
@@ -448,7 +448,7 @@ zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) | |||
448 | old_fsf_req = (struct zfcp_fsf_req *) scpnt->host_scribble; | 448 | old_fsf_req = (struct zfcp_fsf_req *) scpnt->host_scribble; |
449 | if (!old_fsf_req) { | 449 | if (!old_fsf_req) { |
450 | write_unlock_irqrestore(&adapter->abort_lock, flags); | 450 | write_unlock_irqrestore(&adapter->abort_lock, flags); |
451 | zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, new_fsf_req); | 451 | zfcp_scsi_dbf_event_abort("lte1", adapter, scpnt, NULL, NULL); |
452 | retval = SUCCESS; | 452 | retval = SUCCESS; |
453 | goto out; | 453 | goto out; |
454 | } | 454 | } |
@@ -462,6 +462,8 @@ zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) | |||
462 | adapter, unit, 0); | 462 | adapter, unit, 0); |
463 | if (!new_fsf_req) { | 463 | if (!new_fsf_req) { |
464 | ZFCP_LOG_INFO("error: initiation of Abort FCP Cmnd failed\n"); | 464 | ZFCP_LOG_INFO("error: initiation of Abort FCP Cmnd failed\n"); |
465 | zfcp_scsi_dbf_event_abort("nres", adapter, scpnt, NULL, | ||
466 | old_fsf_req); | ||
465 | retval = FAILED; | 467 | retval = FAILED; |
466 | goto out; | 468 | goto out; |
467 | } | 469 | } |
@@ -472,13 +474,16 @@ zfcp_scsi_eh_abort_handler(struct scsi_cmnd *scpnt) | |||
472 | 474 | ||
473 | /* status should be valid since signals were not permitted */ | 475 | /* status should be valid since signals were not permitted */ |
474 | if (new_fsf_req->status & ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED) { | 476 | if (new_fsf_req->status & ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED) { |
475 | zfcp_scsi_dbf_event_abort("okay", adapter, scpnt, new_fsf_req); | 477 | zfcp_scsi_dbf_event_abort("okay", adapter, scpnt, new_fsf_req, |
478 | NULL); | ||
476 | retval = SUCCESS; | 479 | retval = SUCCESS; |
477 | } else if (new_fsf_req->status & ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED) { | 480 | } else if (new_fsf_req->status & ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED) { |
478 | zfcp_scsi_dbf_event_abort("lte2", adapter, scpnt, new_fsf_req); | 481 | zfcp_scsi_dbf_event_abort("lte2", adapter, scpnt, new_fsf_req, |
482 | NULL); | ||
479 | retval = SUCCESS; | 483 | retval = SUCCESS; |
480 | } else { | 484 | } else { |
481 | zfcp_scsi_dbf_event_abort("fail", adapter, scpnt, new_fsf_req); | 485 | zfcp_scsi_dbf_event_abort("fail", adapter, scpnt, new_fsf_req, |
486 | NULL); | ||
482 | retval = FAILED; | 487 | retval = FAILED; |
483 | } | 488 | } |
484 | zfcp_fsf_req_free(new_fsf_req); | 489 | zfcp_fsf_req_free(new_fsf_req); |
diff --git a/drivers/s390/scsi/zfcp_sysfs_adapter.c b/drivers/s390/scsi/zfcp_sysfs_adapter.c index 9f262250043a..b29ac25e07f3 100644 --- a/drivers/s390/scsi/zfcp_sysfs_adapter.c +++ b/drivers/s390/scsi/zfcp_sysfs_adapter.c | |||
@@ -27,8 +27,6 @@ | |||
27 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 27 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
28 | */ | 28 | */ |
29 | 29 | ||
30 | #define ZFCP_SYSFS_ADAPTER_C_REVISION "$Revision: 1.38 $" | ||
31 | |||
32 | #include "zfcp_ext.h" | 30 | #include "zfcp_ext.h" |
33 | 31 | ||
34 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG | 32 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG |
@@ -57,8 +55,6 @@ ZFCP_DEFINE_ADAPTER_ATTR(status, "0x%08x\n", atomic_read(&adapter->status)); | |||
57 | ZFCP_DEFINE_ADAPTER_ATTR(peer_wwnn, "0x%016llx\n", adapter->peer_wwnn); | 55 | ZFCP_DEFINE_ADAPTER_ATTR(peer_wwnn, "0x%016llx\n", adapter->peer_wwnn); |
58 | ZFCP_DEFINE_ADAPTER_ATTR(peer_wwpn, "0x%016llx\n", adapter->peer_wwpn); | 56 | ZFCP_DEFINE_ADAPTER_ATTR(peer_wwpn, "0x%016llx\n", adapter->peer_wwpn); |
59 | ZFCP_DEFINE_ADAPTER_ATTR(peer_d_id, "0x%06x\n", adapter->peer_d_id); | 57 | ZFCP_DEFINE_ADAPTER_ATTR(peer_d_id, "0x%06x\n", adapter->peer_d_id); |
60 | ZFCP_DEFINE_ADAPTER_ATTR(physical_wwpn, "0x%016llx\n", adapter->physical_wwpn); | ||
61 | ZFCP_DEFINE_ADAPTER_ATTR(physical_s_id, "0x%06x\n", adapter->physical_s_id); | ||
62 | ZFCP_DEFINE_ADAPTER_ATTR(card_version, "0x%04x\n", adapter->hydra_version); | 58 | ZFCP_DEFINE_ADAPTER_ATTR(card_version, "0x%04x\n", adapter->hydra_version); |
63 | ZFCP_DEFINE_ADAPTER_ATTR(lic_version, "0x%08x\n", adapter->fsf_lic_version); | 59 | ZFCP_DEFINE_ADAPTER_ATTR(lic_version, "0x%08x\n", adapter->fsf_lic_version); |
64 | ZFCP_DEFINE_ADAPTER_ATTR(hardware_version, "0x%08x\n", | 60 | ZFCP_DEFINE_ADAPTER_ATTR(hardware_version, "0x%08x\n", |
@@ -243,8 +239,6 @@ static struct attribute *zfcp_adapter_attrs[] = { | |||
243 | &dev_attr_peer_wwnn.attr, | 239 | &dev_attr_peer_wwnn.attr, |
244 | &dev_attr_peer_wwpn.attr, | 240 | &dev_attr_peer_wwpn.attr, |
245 | &dev_attr_peer_d_id.attr, | 241 | &dev_attr_peer_d_id.attr, |
246 | &dev_attr_physical_wwpn.attr, | ||
247 | &dev_attr_physical_s_id.attr, | ||
248 | &dev_attr_card_version.attr, | 242 | &dev_attr_card_version.attr, |
249 | &dev_attr_lic_version.attr, | 243 | &dev_attr_lic_version.attr, |
250 | &dev_attr_status.attr, | 244 | &dev_attr_status.attr, |
diff --git a/drivers/s390/scsi/zfcp_sysfs_driver.c b/drivers/s390/scsi/zfcp_sysfs_driver.c index 77a5e2dcc0ff..6622d55e0a45 100644 --- a/drivers/s390/scsi/zfcp_sysfs_driver.c +++ b/drivers/s390/scsi/zfcp_sysfs_driver.c | |||
@@ -27,8 +27,6 @@ | |||
27 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 27 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
28 | */ | 28 | */ |
29 | 29 | ||
30 | #define ZFCP_SYSFS_DRIVER_C_REVISION "$Revision: 1.17 $" | ||
31 | |||
32 | #include "zfcp_ext.h" | 30 | #include "zfcp_ext.h" |
33 | 31 | ||
34 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG | 32 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG |
diff --git a/drivers/s390/scsi/zfcp_sysfs_port.c b/drivers/s390/scsi/zfcp_sysfs_port.c index 3924eb38805c..f401d42db21c 100644 --- a/drivers/s390/scsi/zfcp_sysfs_port.c +++ b/drivers/s390/scsi/zfcp_sysfs_port.c | |||
@@ -28,8 +28,6 @@ | |||
28 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 28 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #define ZFCP_SYSFS_PORT_C_REVISION "$Revision: 1.47 $" | ||
32 | |||
33 | #include "zfcp_ext.h" | 31 | #include "zfcp_ext.h" |
34 | 32 | ||
35 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG | 33 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG |
diff --git a/drivers/s390/scsi/zfcp_sysfs_unit.c b/drivers/s390/scsi/zfcp_sysfs_unit.c index 2f50815f65c7..ad5dfb889bee 100644 --- a/drivers/s390/scsi/zfcp_sysfs_unit.c +++ b/drivers/s390/scsi/zfcp_sysfs_unit.c | |||
@@ -28,8 +28,6 @@ | |||
28 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 28 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #define ZFCP_SYSFS_UNIT_C_REVISION "$Revision: 1.30 $" | ||
32 | |||
33 | #include "zfcp_ext.h" | 31 | #include "zfcp_ext.h" |
34 | 32 | ||
35 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG | 33 | #define ZFCP_LOG_AREA ZFCP_LOG_AREA_CONFIG |