diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-06 12:13:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-06 12:13:53 -0400 |
commit | da104a83692cf07434ab3b20bf10093bdbc3f97e (patch) | |
tree | 6343600c318c600f0dcdf71406bf7d993823afd4 /drivers | |
parent | 96e1a87392293cf895ea99ab70758453897c7bbf (diff) | |
parent | dc64bef5439c8e1fafea225054da4d8882c9d10c (diff) |
Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6
* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6:
[S390] Use CONFIG_GENERIC_TIME and define TOD clock source.
[PATCH] sysrq: irq change build fix.
[S390] irq change build fixes.
[S390] cio: 0 is a valid chpid.
[S390] monwriter buffer limit.
[S390] ap bus poll thread priority.
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/sysrq.c | 1 | ||||
-rw-r--r-- | drivers/s390/block/dasd_diag.c | 2 | ||||
-rw-r--r-- | drivers/s390/char/ctrlchar.c | 2 | ||||
-rw-r--r-- | drivers/s390/char/keyboard.c | 2 | ||||
-rw-r--r-- | drivers/s390/char/monwriter.c | 10 | ||||
-rw-r--r-- | drivers/s390/char/sclp.c | 4 | ||||
-rw-r--r-- | drivers/s390/cio/chsc.c | 25 | ||||
-rw-r--r-- | drivers/s390/cio/cio.c | 6 | ||||
-rw-r--r-- | drivers/s390/crypto/ap_bus.c | 2 | ||||
-rw-r--r-- | drivers/s390/net/iucv.c | 4 |
10 files changed, 35 insertions, 23 deletions
diff --git a/drivers/char/sysrq.c b/drivers/char/sysrq.c index 4c0e08685705..5f49280779fb 100644 --- a/drivers/char/sysrq.c +++ b/drivers/char/sysrq.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <linux/irq.h> | 38 | #include <linux/irq.h> |
39 | 39 | ||
40 | #include <asm/ptrace.h> | 40 | #include <asm/ptrace.h> |
41 | #include <asm/irq_regs.h> | ||
41 | 42 | ||
42 | /* Whether we react on sysrq keys or just ignore them */ | 43 | /* Whether we react on sysrq keys or just ignore them */ |
43 | int sysrq_enabled = 1; | 44 | int sysrq_enabled = 1; |
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index 222a8a71a5e8..53db58a68617 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c | |||
@@ -218,7 +218,7 @@ dasd_diag_term_IO(struct dasd_ccw_req * cqr) | |||
218 | 218 | ||
219 | /* Handle external interruption. */ | 219 | /* Handle external interruption. */ |
220 | static void | 220 | static void |
221 | dasd_ext_handler(struct pt_regs *regs, __u16 code) | 221 | dasd_ext_handler(__u16 code) |
222 | { | 222 | { |
223 | struct dasd_ccw_req *cqr, *next; | 223 | struct dasd_ccw_req *cqr, *next; |
224 | struct dasd_device *device; | 224 | struct dasd_device *device; |
diff --git a/drivers/s390/char/ctrlchar.c b/drivers/s390/char/ctrlchar.c index d83eb6358bac..49e9628d9297 100644 --- a/drivers/s390/char/ctrlchar.c +++ b/drivers/s390/char/ctrlchar.c | |||
@@ -20,7 +20,7 @@ static int ctrlchar_sysrq_key; | |||
20 | static void | 20 | static void |
21 | ctrlchar_handle_sysrq(void *tty) | 21 | ctrlchar_handle_sysrq(void *tty) |
22 | { | 22 | { |
23 | handle_sysrq(ctrlchar_sysrq_key, NULL, (struct tty_struct *) tty); | 23 | handle_sysrq(ctrlchar_sysrq_key, (struct tty_struct *) tty); |
24 | } | 24 | } |
25 | 25 | ||
26 | static DECLARE_WORK(ctrlchar_work, ctrlchar_handle_sysrq, NULL); | 26 | static DECLARE_WORK(ctrlchar_work, ctrlchar_handle_sysrq, NULL); |
diff --git a/drivers/s390/char/keyboard.c b/drivers/s390/char/keyboard.c index 3be06569180d..e3491a5f5219 100644 --- a/drivers/s390/char/keyboard.c +++ b/drivers/s390/char/keyboard.c | |||
@@ -304,7 +304,7 @@ kbd_keycode(struct kbd_data *kbd, unsigned int keycode) | |||
304 | if (kbd->sysrq) { | 304 | if (kbd->sysrq) { |
305 | if (kbd->sysrq == K(KT_LATIN, '-')) { | 305 | if (kbd->sysrq == K(KT_LATIN, '-')) { |
306 | kbd->sysrq = 0; | 306 | kbd->sysrq = 0; |
307 | handle_sysrq(value, NULL, kbd->tty); | 307 | handle_sysrq(value, kbd->tty); |
308 | return; | 308 | return; |
309 | } | 309 | } |
310 | if (value == '-') { | 310 | if (value == '-') { |
diff --git a/drivers/s390/char/monwriter.c b/drivers/s390/char/monwriter.c index 1e3939aeb8ab..4362ff260244 100644 --- a/drivers/s390/char/monwriter.c +++ b/drivers/s390/char/monwriter.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #define MONWRITE_MAX_DATALEN 4024 | 26 | #define MONWRITE_MAX_DATALEN 4024 |
27 | 27 | ||
28 | static int mon_max_bufs = 255; | 28 | static int mon_max_bufs = 255; |
29 | static int mon_buf_count; | ||
29 | 30 | ||
30 | struct mon_buf { | 31 | struct mon_buf { |
31 | struct list_head list; | 32 | struct list_head list; |
@@ -40,7 +41,6 @@ struct mon_private { | |||
40 | size_t hdr_to_read; | 41 | size_t hdr_to_read; |
41 | size_t data_to_read; | 42 | size_t data_to_read; |
42 | struct mon_buf *current_buf; | 43 | struct mon_buf *current_buf; |
43 | int mon_buf_count; | ||
44 | }; | 44 | }; |
45 | 45 | ||
46 | /* | 46 | /* |
@@ -99,13 +99,13 @@ static int monwrite_new_hdr(struct mon_private *monpriv) | |||
99 | rc = monwrite_diag(monhdr, monbuf->data, | 99 | rc = monwrite_diag(monhdr, monbuf->data, |
100 | APPLDATA_STOP_REC); | 100 | APPLDATA_STOP_REC); |
101 | list_del(&monbuf->list); | 101 | list_del(&monbuf->list); |
102 | monpriv->mon_buf_count--; | 102 | mon_buf_count--; |
103 | kfree(monbuf->data); | 103 | kfree(monbuf->data); |
104 | kfree(monbuf); | 104 | kfree(monbuf); |
105 | monbuf = NULL; | 105 | monbuf = NULL; |
106 | } | 106 | } |
107 | } else { | 107 | } else { |
108 | if (monpriv->mon_buf_count >= mon_max_bufs) | 108 | if (mon_buf_count >= mon_max_bufs) |
109 | return -ENOSPC; | 109 | return -ENOSPC; |
110 | monbuf = kzalloc(sizeof(struct mon_buf), GFP_KERNEL); | 110 | monbuf = kzalloc(sizeof(struct mon_buf), GFP_KERNEL); |
111 | if (!monbuf) | 111 | if (!monbuf) |
@@ -118,7 +118,7 @@ static int monwrite_new_hdr(struct mon_private *monpriv) | |||
118 | } | 118 | } |
119 | monbuf->hdr = *monhdr; | 119 | monbuf->hdr = *monhdr; |
120 | list_add_tail(&monbuf->list, &monpriv->list); | 120 | list_add_tail(&monbuf->list, &monpriv->list); |
121 | monpriv->mon_buf_count++; | 121 | mon_buf_count++; |
122 | } | 122 | } |
123 | monpriv->current_buf = monbuf; | 123 | monpriv->current_buf = monbuf; |
124 | return 0; | 124 | return 0; |
@@ -186,7 +186,7 @@ static int monwrite_close(struct inode *inode, struct file *filp) | |||
186 | if (entry->hdr.mon_function != MONWRITE_GEN_EVENT) | 186 | if (entry->hdr.mon_function != MONWRITE_GEN_EVENT) |
187 | monwrite_diag(&entry->hdr, entry->data, | 187 | monwrite_diag(&entry->hdr, entry->data, |
188 | APPLDATA_STOP_REC); | 188 | APPLDATA_STOP_REC); |
189 | monpriv->mon_buf_count--; | 189 | mon_buf_count--; |
190 | list_del(&entry->list); | 190 | list_del(&entry->list); |
191 | kfree(entry->data); | 191 | kfree(entry->data); |
192 | kfree(entry); | 192 | kfree(entry); |
diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c index 31e335751d6d..8a056df09d6b 100644 --- a/drivers/s390/char/sclp.c +++ b/drivers/s390/char/sclp.c | |||
@@ -324,7 +324,7 @@ __sclp_find_req(u32 sccb) | |||
324 | * Prepare read event data request if necessary. Start processing of next | 324 | * Prepare read event data request if necessary. Start processing of next |
325 | * request on queue. */ | 325 | * request on queue. */ |
326 | static void | 326 | static void |
327 | sclp_interrupt_handler(struct pt_regs *regs, __u16 code) | 327 | sclp_interrupt_handler(__u16 code) |
328 | { | 328 | { |
329 | struct sclp_req *req; | 329 | struct sclp_req *req; |
330 | u32 finished_sccb; | 330 | u32 finished_sccb; |
@@ -743,7 +743,7 @@ EXPORT_SYMBOL(sclp_reactivate); | |||
743 | /* Handler for external interruption used during initialization. Modify | 743 | /* Handler for external interruption used during initialization. Modify |
744 | * request state to done. */ | 744 | * request state to done. */ |
745 | static void | 745 | static void |
746 | sclp_check_handler(struct pt_regs *regs, __u16 code) | 746 | sclp_check_handler(__u16 code) |
747 | { | 747 | { |
748 | u32 finished_sccb; | 748 | u32 finished_sccb; |
749 | 749 | ||
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c index 3bb4e472d73d..07c7f19339d2 100644 --- a/drivers/s390/cio/chsc.c +++ b/drivers/s390/cio/chsc.c | |||
@@ -200,11 +200,13 @@ css_get_ssd_info(struct subchannel *sch) | |||
200 | spin_unlock_irq(&sch->lock); | 200 | spin_unlock_irq(&sch->lock); |
201 | free_page((unsigned long)page); | 201 | free_page((unsigned long)page); |
202 | if (!ret) { | 202 | if (!ret) { |
203 | int j, chpid; | 203 | int j, chpid, mask; |
204 | /* Allocate channel path structures, if needed. */ | 204 | /* Allocate channel path structures, if needed. */ |
205 | for (j = 0; j < 8; j++) { | 205 | for (j = 0; j < 8; j++) { |
206 | mask = 0x80 >> j; | ||
206 | chpid = sch->ssd_info.chpid[j]; | 207 | chpid = sch->ssd_info.chpid[j]; |
207 | if (chpid && (get_chp_status(chpid) < 0)) | 208 | if ((sch->schib.pmcw.pim & mask) && |
209 | (get_chp_status(chpid) < 0)) | ||
208 | new_channel_path(chpid); | 210 | new_channel_path(chpid); |
209 | } | 211 | } |
210 | } | 212 | } |
@@ -222,13 +224,15 @@ s390_subchannel_remove_chpid(struct device *dev, void *data) | |||
222 | 224 | ||
223 | sch = to_subchannel(dev); | 225 | sch = to_subchannel(dev); |
224 | chpid = data; | 226 | chpid = data; |
225 | for (j = 0; j < 8; j++) | 227 | for (j = 0; j < 8; j++) { |
226 | if (sch->schib.pmcw.chpid[j] == chpid->id) | 228 | mask = 0x80 >> j; |
229 | if ((sch->schib.pmcw.pim & mask) && | ||
230 | (sch->schib.pmcw.chpid[j] == chpid->id)) | ||
227 | break; | 231 | break; |
232 | } | ||
228 | if (j >= 8) | 233 | if (j >= 8) |
229 | return 0; | 234 | return 0; |
230 | 235 | ||
231 | mask = 0x80 >> j; | ||
232 | spin_lock_irq(&sch->lock); | 236 | spin_lock_irq(&sch->lock); |
233 | 237 | ||
234 | stsch(sch->schid, &schib); | 238 | stsch(sch->schid, &schib); |
@@ -620,7 +624,7 @@ __chp_add_new_sch(struct subchannel_id schid) | |||
620 | static int | 624 | static int |
621 | __chp_add(struct subchannel_id schid, void *data) | 625 | __chp_add(struct subchannel_id schid, void *data) |
622 | { | 626 | { |
623 | int i; | 627 | int i, mask; |
624 | struct channel_path *chp; | 628 | struct channel_path *chp; |
625 | struct subchannel *sch; | 629 | struct subchannel *sch; |
626 | 630 | ||
@@ -630,8 +634,10 @@ __chp_add(struct subchannel_id schid, void *data) | |||
630 | /* Check if the subchannel is now available. */ | 634 | /* Check if the subchannel is now available. */ |
631 | return __chp_add_new_sch(schid); | 635 | return __chp_add_new_sch(schid); |
632 | spin_lock_irq(&sch->lock); | 636 | spin_lock_irq(&sch->lock); |
633 | for (i=0; i<8; i++) | 637 | for (i=0; i<8; i++) { |
634 | if (sch->schib.pmcw.chpid[i] == chp->id) { | 638 | mask = 0x80 >> i; |
639 | if ((sch->schib.pmcw.pim & mask) && | ||
640 | (sch->schib.pmcw.chpid[i] == chp->id)) { | ||
635 | if (stsch(sch->schid, &sch->schib) != 0) { | 641 | if (stsch(sch->schid, &sch->schib) != 0) { |
636 | /* Endgame. */ | 642 | /* Endgame. */ |
637 | spin_unlock_irq(&sch->lock); | 643 | spin_unlock_irq(&sch->lock); |
@@ -639,6 +645,7 @@ __chp_add(struct subchannel_id schid, void *data) | |||
639 | } | 645 | } |
640 | break; | 646 | break; |
641 | } | 647 | } |
648 | } | ||
642 | if (i==8) { | 649 | if (i==8) { |
643 | spin_unlock_irq(&sch->lock); | 650 | spin_unlock_irq(&sch->lock); |
644 | return 0; | 651 | return 0; |
@@ -646,7 +653,7 @@ __chp_add(struct subchannel_id schid, void *data) | |||
646 | sch->lpm = ((sch->schib.pmcw.pim & | 653 | sch->lpm = ((sch->schib.pmcw.pim & |
647 | sch->schib.pmcw.pam & | 654 | sch->schib.pmcw.pam & |
648 | sch->schib.pmcw.pom) | 655 | sch->schib.pmcw.pom) |
649 | | 0x80 >> i) & sch->opm; | 656 | | mask) & sch->opm; |
650 | 657 | ||
651 | if (sch->driver && sch->driver->verify) | 658 | if (sch->driver && sch->driver->verify) |
652 | sch->driver->verify(&sch->dev); | 659 | sch->driver->verify(&sch->dev); |
diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index 2e2882daefbb..f18b1623cad7 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <asm/cio.h> | 19 | #include <asm/cio.h> |
20 | #include <asm/delay.h> | 20 | #include <asm/delay.h> |
21 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
22 | #include <asm/irq_regs.h> | ||
22 | #include <asm/setup.h> | 23 | #include <asm/setup.h> |
23 | #include "airq.h" | 24 | #include "airq.h" |
24 | #include "cio.h" | 25 | #include "cio.h" |
@@ -606,15 +607,17 @@ do_IRQ (struct pt_regs *regs) | |||
606 | struct tpi_info *tpi_info; | 607 | struct tpi_info *tpi_info; |
607 | struct subchannel *sch; | 608 | struct subchannel *sch; |
608 | struct irb *irb; | 609 | struct irb *irb; |
610 | struct pt_regs *old_regs; | ||
609 | 611 | ||
610 | irq_enter (); | 612 | irq_enter (); |
613 | old_regs = set_irq_regs(regs); | ||
611 | asm volatile ("mc 0,0"); | 614 | asm volatile ("mc 0,0"); |
612 | if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) | 615 | if (S390_lowcore.int_clock >= S390_lowcore.jiffy_timer) |
613 | /** | 616 | /** |
614 | * Make sure that the i/o interrupt did not "overtake" | 617 | * Make sure that the i/o interrupt did not "overtake" |
615 | * the last HZ timer interrupt. | 618 | * the last HZ timer interrupt. |
616 | */ | 619 | */ |
617 | account_ticks(regs); | 620 | account_ticks(); |
618 | /* | 621 | /* |
619 | * Get interrupt information from lowcore | 622 | * Get interrupt information from lowcore |
620 | */ | 623 | */ |
@@ -652,6 +655,7 @@ do_IRQ (struct pt_regs *regs) | |||
652 | * out of the sie which costs more cycles than it saves. | 655 | * out of the sie which costs more cycles than it saves. |
653 | */ | 656 | */ |
654 | } while (!MACHINE_IS_VM && tpi (NULL) != 0); | 657 | } while (!MACHINE_IS_VM && tpi (NULL) != 0); |
658 | set_irq_regs(old_regs); | ||
655 | irq_exit (); | 659 | irq_exit (); |
656 | } | 660 | } |
657 | 661 | ||
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index cd30f37fceae..c5ccd20b110c 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c | |||
@@ -1062,7 +1062,7 @@ static int ap_poll_thread(void *data) | |||
1062 | unsigned long flags; | 1062 | unsigned long flags; |
1063 | int requests; | 1063 | int requests; |
1064 | 1064 | ||
1065 | set_user_nice(current, -20); | 1065 | set_user_nice(current, 19); |
1066 | while (1) { | 1066 | while (1) { |
1067 | if (need_resched()) { | 1067 | if (need_resched()) { |
1068 | schedule(); | 1068 | schedule(); |
diff --git a/drivers/s390/net/iucv.c b/drivers/s390/net/iucv.c index 809dd8d7f47a..1476ce2b437c 100644 --- a/drivers/s390/net/iucv.c +++ b/drivers/s390/net/iucv.c | |||
@@ -116,7 +116,7 @@ static DEFINE_SPINLOCK(iucv_irq_queue_lock); | |||
116 | *Internal function prototypes | 116 | *Internal function prototypes |
117 | */ | 117 | */ |
118 | static void iucv_tasklet_handler(unsigned long); | 118 | static void iucv_tasklet_handler(unsigned long); |
119 | static void iucv_irq_handler(struct pt_regs *, __u16); | 119 | static void iucv_irq_handler(__u16); |
120 | 120 | ||
121 | static DECLARE_TASKLET(iucv_tasklet,iucv_tasklet_handler,0); | 121 | static DECLARE_TASKLET(iucv_tasklet,iucv_tasklet_handler,0); |
122 | 122 | ||
@@ -2251,7 +2251,7 @@ iucv_sever(__u16 pathid, __u8 user_data[16]) | |||
2251 | * Places the interrupt buffer on a queue and schedules iucv_tasklet_handler(). | 2251 | * Places the interrupt buffer on a queue and schedules iucv_tasklet_handler(). |
2252 | */ | 2252 | */ |
2253 | static void | 2253 | static void |
2254 | iucv_irq_handler(struct pt_regs *regs, __u16 code) | 2254 | iucv_irq_handler(__u16 code) |
2255 | { | 2255 | { |
2256 | iucv_irqdata *irqdata; | 2256 | iucv_irqdata *irqdata; |
2257 | 2257 | ||