Commit b4796679 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux

Pull s390 fixes from Martin Schwidefsky:
 "Two small bug fixes and a follow-up to the CONFIG_NR_CPUS change.

  A kernel compiled with CONFIG_NR_CPUS=256 will waste quite a bit of
  memory for the per-cpu arrays.  Under z/VM the maximum number of CPUs
  is 64, the code now limits the possible cpu mask to 64 if running
  under z/VM"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  s390/pci: obtain function handle in hotplug notifier
  s390/3270: fix allocation of tty3270_screen structure
  s390/smp: improve setup of possible cpu mask
parents 9a0bb296 fcf2f402
...@@ -135,7 +135,6 @@ config S390 ...@@ -135,7 +135,6 @@ config S390
select HAVE_SYSCALL_TRACEPOINTS select HAVE_SYSCALL_TRACEPOINTS
select HAVE_UID16 if 32BIT select HAVE_UID16 if 32BIT
select HAVE_VIRT_CPU_ACCOUNTING select HAVE_VIRT_CPU_ACCOUNTING
select INIT_ALL_POSSIBLE
select KTIME_SCALAR if 32BIT select KTIME_SCALAR if 32BIT
select MODULES_USE_ELF_RELA select MODULES_USE_ELF_RELA
select OLD_SIGACTION select OLD_SIGACTION
......
...@@ -31,6 +31,7 @@ extern void smp_yield(void); ...@@ -31,6 +31,7 @@ extern void smp_yield(void);
extern void smp_stop_cpu(void); extern void smp_stop_cpu(void);
extern void smp_cpu_set_polarization(int cpu, int val); extern void smp_cpu_set_polarization(int cpu, int val);
extern int smp_cpu_get_polarization(int cpu); extern int smp_cpu_get_polarization(int cpu);
extern void smp_fill_possible_mask(void);
#else /* CONFIG_SMP */ #else /* CONFIG_SMP */
...@@ -50,6 +51,7 @@ static inline int smp_vcpu_scheduled(int cpu) { return 1; } ...@@ -50,6 +51,7 @@ static inline int smp_vcpu_scheduled(int cpu) { return 1; }
static inline void smp_yield_cpu(int cpu) { } static inline void smp_yield_cpu(int cpu) { }
static inline void smp_yield(void) { } static inline void smp_yield(void) { }
static inline void smp_stop_cpu(void) { } static inline void smp_stop_cpu(void) { }
static inline void smp_fill_possible_mask(void) { }
#endif /* CONFIG_SMP */ #endif /* CONFIG_SMP */
......
...@@ -1023,6 +1023,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -1023,6 +1023,7 @@ void __init setup_arch(char **cmdline_p)
setup_vmcoreinfo(); setup_vmcoreinfo();
setup_lowcore(); setup_lowcore();
smp_fill_possible_mask();
cpu_init(); cpu_init();
s390_init_cpu_topology(); s390_init_cpu_topology();
......
...@@ -721,18 +721,14 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle) ...@@ -721,18 +721,14 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle)
return 0; return 0;
} }
static int __init setup_possible_cpus(char *s) static unsigned int setup_possible_cpus __initdata;
{
int max, cpu;
if (kstrtoint(s, 0, &max) < 0) static int __init _setup_possible_cpus(char *s)
return 0; {
init_cpu_possible(cpumask_of(0)); get_option(&s, &setup_possible_cpus);
for (cpu = 1; cpu < max && cpu < nr_cpu_ids; cpu++)
set_cpu_possible(cpu, true);
return 0; return 0;
} }
early_param("possible_cpus", setup_possible_cpus); early_param("possible_cpus", _setup_possible_cpus);
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
...@@ -775,6 +771,17 @@ void __noreturn cpu_die(void) ...@@ -775,6 +771,17 @@ void __noreturn cpu_die(void)
#endif /* CONFIG_HOTPLUG_CPU */ #endif /* CONFIG_HOTPLUG_CPU */
void __init smp_fill_possible_mask(void)
{
unsigned int possible, cpu;
possible = setup_possible_cpus;
if (!possible)
possible = MACHINE_IS_VM ? 64 : nr_cpu_ids;
for (cpu = 0; cpu < possible && cpu < nr_cpu_ids; cpu++)
set_cpu_possible(cpu, true);
}
void __init smp_prepare_cpus(unsigned int max_cpus) void __init smp_prepare_cpus(unsigned int max_cpus)
{ {
/* request the 0x1201 emergency signal external interrupt */ /* request the 0x1201 emergency signal external interrupt */
......
...@@ -75,6 +75,7 @@ void zpci_event_availability(void *data) ...@@ -75,6 +75,7 @@ void zpci_event_availability(void *data)
if (!zdev || zdev->state == ZPCI_FN_STATE_CONFIGURED) if (!zdev || zdev->state == ZPCI_FN_STATE_CONFIGURED)
break; break;
zdev->state = ZPCI_FN_STATE_CONFIGURED; zdev->state = ZPCI_FN_STATE_CONFIGURED;
zdev->fh = ccdf->fh;
ret = zpci_enable_device(zdev); ret = zpci_enable_device(zdev);
if (ret) if (ret)
break; break;
...@@ -101,6 +102,7 @@ void zpci_event_availability(void *data) ...@@ -101,6 +102,7 @@ void zpci_event_availability(void *data)
if (pdev) if (pdev)
pci_stop_and_remove_bus_device(pdev); pci_stop_and_remove_bus_device(pdev);
zdev->fh = ccdf->fh;
zpci_disable_device(zdev); zpci_disable_device(zdev);
zdev->state = ZPCI_FN_STATE_STANDBY; zdev->state = ZPCI_FN_STATE_STANDBY;
break; break;
......
...@@ -942,7 +942,7 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty) ...@@ -942,7 +942,7 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty)
return rc; return rc;
} }
tp->screen = tty3270_alloc_screen(tp->view.cols, tp->view.rows); tp->screen = tty3270_alloc_screen(tp->view.rows, tp->view.cols);
if (IS_ERR(tp->screen)) { if (IS_ERR(tp->screen)) {
rc = PTR_ERR(tp->screen); rc = PTR_ERR(tp->screen);
raw3270_put_view(&tp->view); raw3270_put_view(&tp->view);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment