diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-30 11:38:30 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-30 11:38:30 -0400 |
| commit | d67c6f869c0a7f275689855161c93d714197e052 (patch) | |
| tree | 17024af84087d216c62144d21a41beb74eca80dc /drivers/s390/char | |
| parent | ec31b2124158f60c515ed84bd5e40db1a883c7b6 (diff) | |
| parent | 1175cdc670f2d4197b033f823b32435031a6daa8 (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] Update default configuration.
[S390] use generic sys_ptrace
[S390] Remove self ptrace IEEE_IP hack.
[S390] Convert to SPARSEMEM & SPARSEMEM_VMEMMAP
[S390] System z large page support.
[S390] Convert machine feature detection code to C.
[S390] vmemmap: use clear_table to initialise page tables.
[S390] Move stfl to system.h and delete duplicated version.
[S390] uaccess_mvcos: #ifdef config dependent code.
[S390] cpu topology: Fix possible deadlock.
[S390] Add topology_core_siblings to topology.h
[S390] cio: Make isc handling more robust.
[S390] remove -traditional
[S390] Automatically detect added cpus.
[S390] smp: Fix locking order.
[S390] Add missing ifndef/define to include/asm-s390/sysinfo.h.
[S390] Move show_regs to traps.c.
[S390] cio: Use strict_strtoul() for attributes.
Diffstat (limited to 'drivers/s390/char')
| -rw-r--r-- | drivers/s390/char/sclp_config.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/s390/char/sclp_config.c b/drivers/s390/char/sclp_config.c index b8f35bc52b7b..9e784d5f7f57 100644 --- a/drivers/s390/char/sclp_config.c +++ b/drivers/s390/char/sclp_config.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/cpu.h> | 10 | #include <linux/cpu.h> |
| 11 | #include <linux/sysdev.h> | 11 | #include <linux/sysdev.h> |
| 12 | #include <linux/workqueue.h> | 12 | #include <linux/workqueue.h> |
| 13 | #include <asm/smp.h> | ||
| 13 | #include "sclp.h" | 14 | #include "sclp.h" |
| 14 | 15 | ||
| 15 | #define TAG "sclp_config: " | 16 | #define TAG "sclp_config: " |
| @@ -19,9 +20,11 @@ struct conf_mgm_data { | |||
| 19 | u8 ev_qualifier; | 20 | u8 ev_qualifier; |
| 20 | } __attribute__((packed)); | 21 | } __attribute__((packed)); |
| 21 | 22 | ||
| 23 | #define EV_QUAL_CPU_CHANGE 1 | ||
| 22 | #define EV_QUAL_CAP_CHANGE 3 | 24 | #define EV_QUAL_CAP_CHANGE 3 |
| 23 | 25 | ||
| 24 | static struct work_struct sclp_cpu_capability_work; | 26 | static struct work_struct sclp_cpu_capability_work; |
| 27 | static struct work_struct sclp_cpu_change_work; | ||
| 25 | 28 | ||
| 26 | static void sclp_cpu_capability_notify(struct work_struct *work) | 29 | static void sclp_cpu_capability_notify(struct work_struct *work) |
| 27 | { | 30 | { |
| @@ -37,13 +40,24 @@ static void sclp_cpu_capability_notify(struct work_struct *work) | |||
| 37 | put_online_cpus(); | 40 | put_online_cpus(); |
| 38 | } | 41 | } |
| 39 | 42 | ||
| 43 | static void sclp_cpu_change_notify(struct work_struct *work) | ||
| 44 | { | ||
| 45 | smp_rescan_cpus(); | ||
| 46 | } | ||
| 47 | |||
| 40 | static void sclp_conf_receiver_fn(struct evbuf_header *evbuf) | 48 | static void sclp_conf_receiver_fn(struct evbuf_header *evbuf) |
| 41 | { | 49 | { |
| 42 | struct conf_mgm_data *cdata; | 50 | struct conf_mgm_data *cdata; |
| 43 | 51 | ||
| 44 | cdata = (struct conf_mgm_data *)(evbuf + 1); | 52 | cdata = (struct conf_mgm_data *)(evbuf + 1); |
| 45 | if (cdata->ev_qualifier == EV_QUAL_CAP_CHANGE) | 53 | switch (cdata->ev_qualifier) { |
| 54 | case EV_QUAL_CPU_CHANGE: | ||
| 55 | schedule_work(&sclp_cpu_change_work); | ||
| 56 | break; | ||
| 57 | case EV_QUAL_CAP_CHANGE: | ||
| 46 | schedule_work(&sclp_cpu_capability_work); | 58 | schedule_work(&sclp_cpu_capability_work); |
| 59 | break; | ||
| 60 | } | ||
| 47 | } | 61 | } |
| 48 | 62 | ||
| 49 | static struct sclp_register sclp_conf_register = | 63 | static struct sclp_register sclp_conf_register = |
| @@ -57,6 +71,7 @@ static int __init sclp_conf_init(void) | |||
| 57 | int rc; | 71 | int rc; |
| 58 | 72 | ||
| 59 | INIT_WORK(&sclp_cpu_capability_work, sclp_cpu_capability_notify); | 73 | INIT_WORK(&sclp_cpu_capability_work, sclp_cpu_capability_notify); |
| 74 | INIT_WORK(&sclp_cpu_change_work, sclp_cpu_change_notify); | ||
| 60 | 75 | ||
| 61 | rc = sclp_register(&sclp_conf_register); | 76 | rc = sclp_register(&sclp_conf_register); |
| 62 | if (rc) { | 77 | if (rc) { |
