Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4796679 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -135,7 +135,6 @@ config S390
	select HAVE_SYSCALL_TRACEPOINTS
	select HAVE_UID16 if 32BIT
	select HAVE_VIRT_CPU_ACCOUNTING
	select INIT_ALL_POSSIBLE
	select KTIME_SCALAR if 32BIT
	select MODULES_USE_ELF_RELA
	select OLD_SIGACTION
+2 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ extern void smp_yield(void);
extern void smp_stop_cpu(void);
extern void smp_cpu_set_polarization(int cpu, int val);
extern int smp_cpu_get_polarization(int cpu);
extern void smp_fill_possible_mask(void);

#else /* CONFIG_SMP */

@@ -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(void) { }
static inline void smp_stop_cpu(void) { }
static inline void smp_fill_possible_mask(void) { }

#endif /* CONFIG_SMP */

+1 −0
Original line number Diff line number Diff line
@@ -1023,6 +1023,7 @@ void __init setup_arch(char **cmdline_p)
	setup_vmcoreinfo();
	setup_lowcore();

	smp_fill_possible_mask();
        cpu_init();
	s390_init_cpu_topology();

+16 −9
Original line number Diff line number Diff line
@@ -721,18 +721,14 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle)
	return 0;
}

static int __init setup_possible_cpus(char *s)
{
	int max, cpu;
static unsigned int setup_possible_cpus __initdata;

	if (kstrtoint(s, 0, &max) < 0)
		return 0;
	init_cpu_possible(cpumask_of(0));
	for (cpu = 1; cpu < max && cpu < nr_cpu_ids; cpu++)
		set_cpu_possible(cpu, true);
static int __init _setup_possible_cpus(char *s)
{
	get_option(&s, &setup_possible_cpus);
	return 0;
}
early_param("possible_cpus", setup_possible_cpus);
early_param("possible_cpus", _setup_possible_cpus);

#ifdef CONFIG_HOTPLUG_CPU

@@ -775,6 +771,17 @@ void __noreturn cpu_die(void)

#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)
{
	/* request the 0x1201 emergency signal external interrupt */
+2 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ void zpci_event_availability(void *data)
		if (!zdev || zdev->state == ZPCI_FN_STATE_CONFIGURED)
			break;
		zdev->state = ZPCI_FN_STATE_CONFIGURED;
		zdev->fh = ccdf->fh;
		ret = zpci_enable_device(zdev);
		if (ret)
			break;
@@ -101,6 +102,7 @@ void zpci_event_availability(void *data)
		if (pdev)
			pci_stop_and_remove_bus_device(pdev);

		zdev->fh = ccdf->fh;
		zpci_disable_device(zdev);
		zdev->state = ZPCI_FN_STATE_STANDBY;
		break;
Loading