mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:04:41 +01:00
s390 fixes for 7.0 merge window
- Make KEXEC_SIG available again for CONFIG_MODULES=n - The s390 topology code used to call rebuild_sched_domains() before common code scheduling domains were setup. This was silently ignored by common code, but now results in a warning. Address by avoiding the early call - Convert debug area lock from spinlock to raw spinlock to address lockdep warnings - The recent 3490 tape device driver rework resulted in a different device driver name, which is visible via sysfs for user space. This breaks at least one user space application. Change the device driver name back to its old name to fix this -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEECMNfWEw3SLnmiLkZIg7DeRspbsIFAmmYUo8ACgkQIg7DeRsp bsL+rw//f6AadV9X3tCPe/vaNdxQWkVtd1Ov+eKYkIohSFvghBo4+4c6qXlsc4jp Opedqs2+YUdx2/tR3nTPkfG/Nm49rGpB+i4CYAjBUlAjIN1czyUlvICJ6ZVQbpQt zR+I7Ej/QsBR0XMqbUfPNWMwbdZlW395kXNhCAKckbjM1M+Hezp9WZjuaQ1vWCUv wGXAUI+/fTgPKUu3nIQRw2JkG2M+IfFj3jkYMXTW8D8WzoqLXPwtjmjcDtTU/VDr otq97rDUd8MvNsxV5hX+T7nI0JQIFrdb32bCy0mhWhnvc7rHdewLfp5+793vKG/K DcOouXr/vJcPUhAUQI3ksREAwAEJV1phKeILXbbUhpkAZUQAozVG6+YrzMk/4VSW Zm6BGcOLVo0DQtn97I55gKSPFiNoCQwSdU+CcrbzA8aEDBMfxLFKBvh50sAx/0I3 zXbXYDjgPdqOKuyUprB8Y6PJTrCnHebXPGs2Kgl2XU3k4m61h/60EHIXe6w0ErM8 1hl8+Rdn4jmWDcAOFKTBpo8Y/o+WZVcNssPr4F7ArcjJTWmAtxWP3NQAux3UM2HW 3dOV6dcdbmndKSmKwtWrvMVv0GvcgWAp/NhjwKx37EovYLFJg4DqtiioqiOFjWKD 4gwIB8gKxbWjNSGq3cKTiH021iWoRIDoCeAFJWRdrH5xt7rxCWc= =7EJS -----END PGP SIGNATURE----- Merge tag 's390-7.0-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux Pull s390 fixes from Heiko Carstens: - Make KEXEC_SIG available again for CONFIG_MODULES=n - The s390 topology code used to call rebuild_sched_domains() before common code scheduling domains were setup. This was silently ignored by common code, but now results in a warning. Address by avoiding the early call - Convert debug area lock from spinlock to raw spinlock to address lockdep warnings - The recent 3490 tape device driver rework resulted in a different device driver name, which is visible via sysfs for user space. This breaks at least one user space application. Change the device driver name back to its old name to fix this * tag 's390-7.0-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/tape: Fix device driver name s390/debug: Convert debug area lock from a spinlock to a raw spinlock s390/smp: Avoid calling rebuild_sched_domains() early s390/kexec: Make KEXEC_SIG available when CONFIG_MODULES=n
This commit is contained in:
commit
9806790115
5 changed files with 36 additions and 35 deletions
|
|
@ -279,6 +279,7 @@ config S390
|
|||
select SPARSE_IRQ
|
||||
select SWIOTLB
|
||||
select SYSCTL_EXCEPTION_TRACE
|
||||
select SYSTEM_DATA_VERIFICATION if KEXEC_SIG
|
||||
select THREAD_INFO_IN_TASK
|
||||
select TRACE_IRQFLAGS_SUPPORT
|
||||
select TTY
|
||||
|
|
@ -313,7 +314,7 @@ config ARCH_SUPPORTS_KEXEC_FILE
|
|||
def_bool y
|
||||
|
||||
config ARCH_SUPPORTS_KEXEC_SIG
|
||||
def_bool MODULE_SIG_FORMAT
|
||||
def_bool y
|
||||
|
||||
config ARCH_SUPPORTS_KEXEC_PURGATORY
|
||||
def_bool y
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ typedef struct debug_info {
|
|||
struct debug_info *next;
|
||||
struct debug_info *prev;
|
||||
refcount_t ref_count;
|
||||
spinlock_t lock;
|
||||
raw_spinlock_t lock;
|
||||
int level;
|
||||
int nr_areas;
|
||||
int pages_per_area;
|
||||
|
|
@ -440,7 +440,7 @@ static int VNAME(var, active_entries)[EARLY_AREAS] __initdata
|
|||
.next = NULL, \
|
||||
.prev = NULL, \
|
||||
.ref_count = REFCOUNT_INIT(1), \
|
||||
.lock = __SPIN_LOCK_UNLOCKED(var.lock), \
|
||||
.lock = __RAW_SPIN_LOCK_UNLOCKED(var.lock), \
|
||||
.level = DEBUG_DEFAULT_LEVEL, \
|
||||
.nr_areas = EARLY_AREAS, \
|
||||
.pages_per_area = EARLY_PAGES, \
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ static debug_info_t *debug_info_alloc(const char *name, int pages_per_area,
|
|||
}
|
||||
|
||||
/* initialize members */
|
||||
spin_lock_init(&rc->lock);
|
||||
raw_spin_lock_init(&rc->lock);
|
||||
rc->pages_per_area = pages_per_area;
|
||||
rc->nr_areas = nr_areas;
|
||||
rc->active_area = 0;
|
||||
|
|
@ -333,7 +333,7 @@ static debug_info_t *debug_info_copy(debug_info_t *in, int mode)
|
|||
do {
|
||||
rc = debug_info_alloc(in->name, in->pages_per_area,
|
||||
in->nr_areas, in->buf_size, in->level, mode);
|
||||
spin_lock_irqsave(&in->lock, flags);
|
||||
raw_spin_lock_irqsave(&in->lock, flags);
|
||||
if (!rc)
|
||||
goto out;
|
||||
/* has something changed in the meantime ? */
|
||||
|
|
@ -341,7 +341,7 @@ static debug_info_t *debug_info_copy(debug_info_t *in, int mode)
|
|||
(rc->nr_areas == in->nr_areas)) {
|
||||
break;
|
||||
}
|
||||
spin_unlock_irqrestore(&in->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&in->lock, flags);
|
||||
debug_info_free(rc);
|
||||
} while (1);
|
||||
|
||||
|
|
@ -356,7 +356,7 @@ static debug_info_t *debug_info_copy(debug_info_t *in, int mode)
|
|||
}
|
||||
rc->active_area = in->active_area;
|
||||
out:
|
||||
spin_unlock_irqrestore(&in->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&in->lock, flags);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
@ -879,20 +879,20 @@ void debug_register_static(debug_info_t *id, int pages_per_area, int nr_areas)
|
|||
pr_err("Registering debug feature %s failed\n", id->name);
|
||||
|
||||
/* Clear pointers to prevent tracing into released initdata. */
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
id->areas = NULL;
|
||||
id->active_pages = NULL;
|
||||
id->active_entries = NULL;
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* Replace static trace area with dynamic copy. */
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
debug_events_append(copy, id);
|
||||
debug_areas_swap(id, copy);
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
|
||||
/* Clear pointers to initdata and discard copy. */
|
||||
copy->areas = NULL;
|
||||
|
|
@ -966,11 +966,11 @@ static int debug_set_size(debug_info_t *id, int nr_areas, int pages_per_area)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
debug_events_append(new_id, id);
|
||||
debug_areas_swap(new_id, id);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
debug_info_free(new_id);
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
pr_info("%s: set new size (%i pages)\n", id->name, pages_per_area);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1000,9 +1000,9 @@ void debug_set_level(debug_info_t *id, int new_level)
|
|||
return;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
id->level = new_level;
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(debug_set_level);
|
||||
|
||||
|
|
@ -1184,10 +1184,10 @@ debug_entry_t *debug_event_common(debug_info_t *id, int level, const void *buf,
|
|||
if (!debug_active || !id->areas)
|
||||
return NULL;
|
||||
if (debug_critical) {
|
||||
if (!spin_trylock_irqsave(&id->lock, flags))
|
||||
if (!raw_spin_trylock_irqsave(&id->lock, flags))
|
||||
return NULL;
|
||||
} else {
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
}
|
||||
do {
|
||||
active = get_active_entry(id);
|
||||
|
|
@ -1199,7 +1199,7 @@ debug_entry_t *debug_event_common(debug_info_t *id, int level, const void *buf,
|
|||
buf += id->buf_size;
|
||||
} while (len > 0);
|
||||
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
return active;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_event_common);
|
||||
|
|
@ -1217,10 +1217,10 @@ debug_entry_t *debug_exception_common(debug_info_t *id, int level,
|
|||
if (!debug_active || !id->areas)
|
||||
return NULL;
|
||||
if (debug_critical) {
|
||||
if (!spin_trylock_irqsave(&id->lock, flags))
|
||||
if (!raw_spin_trylock_irqsave(&id->lock, flags))
|
||||
return NULL;
|
||||
} else {
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
}
|
||||
do {
|
||||
active = get_active_entry(id);
|
||||
|
|
@ -1232,7 +1232,7 @@ debug_entry_t *debug_exception_common(debug_info_t *id, int level,
|
|||
buf += id->buf_size;
|
||||
} while (len > 0);
|
||||
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
return active;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_exception_common);
|
||||
|
|
@ -1267,10 +1267,10 @@ debug_entry_t *__debug_sprintf_event(debug_info_t *id, int level, char *string,
|
|||
numargs = debug_count_numargs(string);
|
||||
|
||||
if (debug_critical) {
|
||||
if (!spin_trylock_irqsave(&id->lock, flags))
|
||||
if (!raw_spin_trylock_irqsave(&id->lock, flags))
|
||||
return NULL;
|
||||
} else {
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
}
|
||||
active = get_active_entry(id);
|
||||
curr_event = (debug_sprintf_entry_t *) DEBUG_DATA(active);
|
||||
|
|
@ -1280,7 +1280,7 @@ debug_entry_t *__debug_sprintf_event(debug_info_t *id, int level, char *string,
|
|||
curr_event->args[idx] = va_arg(ap, long);
|
||||
va_end(ap);
|
||||
debug_finish_entry(id, active, level, 0);
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
|
||||
return active;
|
||||
}
|
||||
|
|
@ -1303,10 +1303,10 @@ debug_entry_t *__debug_sprintf_exception(debug_info_t *id, int level, char *stri
|
|||
numargs = debug_count_numargs(string);
|
||||
|
||||
if (debug_critical) {
|
||||
if (!spin_trylock_irqsave(&id->lock, flags))
|
||||
if (!raw_spin_trylock_irqsave(&id->lock, flags))
|
||||
return NULL;
|
||||
} else {
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
}
|
||||
active = get_active_entry(id);
|
||||
curr_event = (debug_sprintf_entry_t *)DEBUG_DATA(active);
|
||||
|
|
@ -1316,7 +1316,7 @@ debug_entry_t *__debug_sprintf_exception(debug_info_t *id, int level, char *stri
|
|||
curr_event->args[idx] = va_arg(ap, long);
|
||||
va_end(ap);
|
||||
debug_finish_entry(id, active, level, 1);
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
|
||||
return active;
|
||||
}
|
||||
|
|
@ -1350,7 +1350,7 @@ int debug_register_view(debug_info_t *id, struct debug_view *view)
|
|||
mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
|
||||
pde = debugfs_create_file(view->name, mode, id->debugfs_root_entry,
|
||||
id, &debug_file_ops);
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
for (i = 0; i < DEBUG_MAX_VIEWS; i++) {
|
||||
if (!id->views[i])
|
||||
break;
|
||||
|
|
@ -1361,7 +1361,7 @@ int debug_register_view(debug_info_t *id, struct debug_view *view)
|
|||
id->views[i] = view;
|
||||
id->debugfs_entries[i] = pde;
|
||||
}
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
if (rc) {
|
||||
pr_err("Registering view %s/%s would exceed the maximum "
|
||||
"number of views %i\n", id->name, view->name, i);
|
||||
|
|
@ -1391,7 +1391,7 @@ int debug_unregister_view(debug_info_t *id, struct debug_view *view)
|
|||
|
||||
if (!id)
|
||||
goto out;
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
for (i = 0; i < DEBUG_MAX_VIEWS; i++) {
|
||||
if (id->views[i] == view)
|
||||
break;
|
||||
|
|
@ -1403,7 +1403,7 @@ int debug_unregister_view(debug_info_t *id, struct debug_view *view)
|
|||
id->views[i] = NULL;
|
||||
id->debugfs_entries[i] = NULL;
|
||||
}
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
debugfs_remove(dentry);
|
||||
out:
|
||||
return rc;
|
||||
|
|
@ -1557,7 +1557,7 @@ static void debug_flush(debug_info_t *id, int area)
|
|||
|
||||
if (!id || !id->areas)
|
||||
return;
|
||||
spin_lock_irqsave(&id->lock, flags);
|
||||
raw_spin_lock_irqsave(&id->lock, flags);
|
||||
if (area == DEBUG_FLUSH_ALL) {
|
||||
id->active_area = 0;
|
||||
memset(id->active_entries, 0, id->nr_areas * sizeof(int));
|
||||
|
|
@ -1572,7 +1572,7 @@ static void debug_flush(debug_info_t *id, int area)
|
|||
for (i = 0; i < id->pages_per_area; i++)
|
||||
memset(id->areas[area][i], 0, PAGE_SIZE);
|
||||
}
|
||||
spin_unlock_irqrestore(&id->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&id->lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1151,7 +1151,7 @@ int __ref smp_rescan_cpus(bool early)
|
|||
smp_get_core_info(info, 0);
|
||||
nr = __smp_rescan_cpus(info, early);
|
||||
kfree(info);
|
||||
if (nr)
|
||||
if (nr && !early)
|
||||
topology_schedule_update();
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -784,7 +784,7 @@ tape_3490_online(struct ccw_device *cdev)
|
|||
|
||||
static struct ccw_driver tape_3490_driver = {
|
||||
.driver = {
|
||||
.name = "tape_3490",
|
||||
.name = "tape_34xx",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.ids = tape_3490_ids,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue