Merge remote-tracking branch 'upstream' into next
- bring back critical fixes (esp. aa67f6096c
)
- provide an updated base for development
* upstream: (4334 commits)
missed mnt_drop_write() in do_dentry_open()
UBIFS: nuke pdflush from comments
gfs2: nuke pdflush from comments
drbd: nuke pdflush from comments
nilfs2: nuke write_super from comments
hfs: nuke write_super from comments
vfs: nuke pdflush from comments
jbd/jbd2: nuke write_super from comments
btrfs: nuke pdflush from comments
btrfs: nuke write_super from comments
ext4: nuke pdflush from comments
ext4: nuke write_super from comments
ext3: nuke write_super from comments
Documentation: fix the VM knobs descritpion WRT pdflush
Documentation: get rid of write_super
vfs: kill write_super and sync_supers
ACPI processor: Fix tick_broadcast_mask online/offline regression
ACPI: Only count valid srat memory structures
ACPI: Untangle a return statement for better readability
Linux 3.6-rc1
...
Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
@@ -110,6 +110,7 @@ struct debug_view debug_raw_view = {
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
EXPORT_SYMBOL(debug_raw_view);
|
||||
|
||||
struct debug_view debug_hex_ascii_view = {
|
||||
"hex_ascii",
|
||||
@@ -119,6 +120,7 @@ struct debug_view debug_hex_ascii_view = {
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
EXPORT_SYMBOL(debug_hex_ascii_view);
|
||||
|
||||
static struct debug_view debug_level_view = {
|
||||
"level",
|
||||
@@ -155,6 +157,7 @@ struct debug_view debug_sprintf_view = {
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
EXPORT_SYMBOL(debug_sprintf_view);
|
||||
|
||||
/* used by dump analysis tools to determine version of debug feature */
|
||||
static unsigned int __used debug_feature_version = __DEBUG_FEATURE_VERSION;
|
||||
@@ -730,6 +733,7 @@ debug_info_t *debug_register(const char *name, int pages_per_area,
|
||||
return debug_register_mode(name, pages_per_area, nr_areas, buf_size,
|
||||
S_IRUSR | S_IWUSR, 0, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(debug_register);
|
||||
|
||||
/*
|
||||
* debug_unregister:
|
||||
@@ -748,6 +752,7 @@ debug_unregister(debug_info_t * id)
|
||||
out:
|
||||
return;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_unregister);
|
||||
|
||||
/*
|
||||
* debug_set_size:
|
||||
@@ -810,7 +815,7 @@ debug_set_level(debug_info_t* id, int new_level)
|
||||
}
|
||||
spin_unlock_irqrestore(&id->lock,flags);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(debug_set_level);
|
||||
|
||||
/*
|
||||
* proceed_active_entry:
|
||||
@@ -930,7 +935,7 @@ debug_stop_all(void)
|
||||
if (debug_stoppable)
|
||||
debug_active = 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(debug_stop_all);
|
||||
|
||||
void debug_set_critical(void)
|
||||
{
|
||||
@@ -963,6 +968,7 @@ debug_event_common(debug_info_t * id, int level, const void *buf, int len)
|
||||
|
||||
return active;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_event_common);
|
||||
|
||||
/*
|
||||
* debug_exception_common:
|
||||
@@ -990,6 +996,7 @@ debug_entry_t
|
||||
|
||||
return active;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_exception_common);
|
||||
|
||||
/*
|
||||
* counts arguments in format string for sprintf view
|
||||
@@ -1043,6 +1050,7 @@ debug_sprintf_event(debug_info_t* id, int level,char *string,...)
|
||||
|
||||
return active;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_sprintf_event);
|
||||
|
||||
/*
|
||||
* debug_sprintf_exception:
|
||||
@@ -1081,25 +1089,7 @@ debug_sprintf_exception(debug_info_t* id, int level,char *string,...)
|
||||
|
||||
return active;
|
||||
}
|
||||
|
||||
/*
|
||||
* debug_init:
|
||||
* - is called exactly once to initialize the debug feature
|
||||
*/
|
||||
|
||||
static int
|
||||
__init debug_init(void)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
s390dbf_sysctl_header = register_sysctl_table(s390dbf_dir_table);
|
||||
mutex_lock(&debug_mutex);
|
||||
debug_debugfs_root_entry = debugfs_create_dir(DEBUG_DIR_ROOT,NULL);
|
||||
initialized = 1;
|
||||
mutex_unlock(&debug_mutex);
|
||||
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_sprintf_exception);
|
||||
|
||||
/*
|
||||
* debug_register_view:
|
||||
@@ -1147,6 +1137,7 @@ debug_register_view(debug_info_t * id, struct debug_view *view)
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_register_view);
|
||||
|
||||
/*
|
||||
* debug_unregister_view:
|
||||
@@ -1176,6 +1167,7 @@ debug_unregister_view(debug_info_t * id, struct debug_view *view)
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_unregister_view);
|
||||
|
||||
static inline char *
|
||||
debug_get_user_string(const char __user *user_buf, size_t user_len)
|
||||
@@ -1485,6 +1477,7 @@ debug_dflt_header_fn(debug_info_t * id, struct debug_view *view,
|
||||
except_str, entry->id.fields.cpuid, (void *) caller);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(debug_dflt_header_fn);
|
||||
|
||||
/*
|
||||
* prints debug data sprintf-formated:
|
||||
@@ -1533,33 +1526,16 @@ out:
|
||||
}
|
||||
|
||||
/*
|
||||
* clean up module
|
||||
* debug_init:
|
||||
* - is called exactly once to initialize the debug feature
|
||||
*/
|
||||
static void __exit debug_exit(void)
|
||||
static int __init debug_init(void)
|
||||
{
|
||||
debugfs_remove(debug_debugfs_root_entry);
|
||||
unregister_sysctl_table(s390dbf_sysctl_header);
|
||||
return;
|
||||
s390dbf_sysctl_header = register_sysctl_table(s390dbf_dir_table);
|
||||
mutex_lock(&debug_mutex);
|
||||
debug_debugfs_root_entry = debugfs_create_dir(DEBUG_DIR_ROOT, NULL);
|
||||
initialized = 1;
|
||||
mutex_unlock(&debug_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* module definitions
|
||||
*/
|
||||
postcore_initcall(debug_init);
|
||||
module_exit(debug_exit);
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
EXPORT_SYMBOL(debug_register);
|
||||
EXPORT_SYMBOL(debug_unregister);
|
||||
EXPORT_SYMBOL(debug_set_level);
|
||||
EXPORT_SYMBOL(debug_stop_all);
|
||||
EXPORT_SYMBOL(debug_register_view);
|
||||
EXPORT_SYMBOL(debug_unregister_view);
|
||||
EXPORT_SYMBOL(debug_event_common);
|
||||
EXPORT_SYMBOL(debug_exception_common);
|
||||
EXPORT_SYMBOL(debug_hex_ascii_view);
|
||||
EXPORT_SYMBOL(debug_raw_view);
|
||||
EXPORT_SYMBOL(debug_dflt_header_fn);
|
||||
EXPORT_SYMBOL(debug_sprintf_view);
|
||||
EXPORT_SYMBOL(debug_sprintf_exception);
|
||||
EXPORT_SYMBOL(debug_sprintf_event);
|
||||
|
@@ -1558,7 +1558,7 @@ static int print_insn(char *buffer, unsigned char *code, unsigned long addr)
|
||||
|
||||
void show_code(struct pt_regs *regs)
|
||||
{
|
||||
char *mode = (regs->psw.mask & PSW_MASK_PSTATE) ? "User" : "Krnl";
|
||||
char *mode = user_mode(regs) ? "User" : "Krnl";
|
||||
unsigned char code[64];
|
||||
char buffer[64], *ptr;
|
||||
mm_segment_t old_fs;
|
||||
@@ -1567,7 +1567,7 @@ void show_code(struct pt_regs *regs)
|
||||
|
||||
/* Get a snapshot of the 64 bytes surrounding the fault address. */
|
||||
old_fs = get_fs();
|
||||
set_fs((regs->psw.mask & PSW_MASK_PSTATE) ? USER_DS : KERNEL_DS);
|
||||
set_fs(user_mode(regs) ? USER_DS : KERNEL_DS);
|
||||
for (start = 32; start && regs->psw.addr >= 34 - start; start -= 2) {
|
||||
addr = regs->psw.addr - 34 + start;
|
||||
if (__copy_from_user(code + start - 2,
|
||||
|
@@ -455,7 +455,6 @@ void __init startup_init(void)
|
||||
init_kernel_storage_key();
|
||||
lockdep_init();
|
||||
lockdep_off();
|
||||
sort_main_extable();
|
||||
setup_lowcore_early();
|
||||
setup_facility_list();
|
||||
detect_machine_type();
|
||||
|
@@ -1583,7 +1583,7 @@ static struct kset *vmcmd_kset;
|
||||
|
||||
static void vmcmd_run(struct shutdown_trigger *trigger)
|
||||
{
|
||||
char *cmd, *next_cmd;
|
||||
char *cmd;
|
||||
|
||||
if (strcmp(trigger->name, ON_REIPL_STR) == 0)
|
||||
cmd = vmcmd_on_reboot;
|
||||
@@ -1600,15 +1600,7 @@ static void vmcmd_run(struct shutdown_trigger *trigger)
|
||||
|
||||
if (strlen(cmd) == 0)
|
||||
return;
|
||||
do {
|
||||
next_cmd = strchr(cmd, '\n');
|
||||
if (next_cmd) {
|
||||
next_cmd[0] = 0;
|
||||
next_cmd += 1;
|
||||
}
|
||||
__cpcmd(cmd, NULL, 0, NULL);
|
||||
cmd = next_cmd;
|
||||
} while (cmd != NULL);
|
||||
__cpcmd(cmd, NULL, 0, NULL);
|
||||
}
|
||||
|
||||
static int vmcmd_init(void)
|
||||
|
@@ -302,8 +302,8 @@ static int __init parse_vmalloc(char *arg)
|
||||
}
|
||||
early_param("vmalloc", parse_vmalloc);
|
||||
|
||||
unsigned int user_mode = HOME_SPACE_MODE;
|
||||
EXPORT_SYMBOL_GPL(user_mode);
|
||||
unsigned int addressing_mode = HOME_SPACE_MODE;
|
||||
EXPORT_SYMBOL_GPL(addressing_mode);
|
||||
|
||||
static int set_amode_primary(void)
|
||||
{
|
||||
@@ -328,7 +328,7 @@ static int set_amode_primary(void)
|
||||
*/
|
||||
static int __init early_parse_switch_amode(char *p)
|
||||
{
|
||||
user_mode = PRIMARY_SPACE_MODE;
|
||||
addressing_mode = PRIMARY_SPACE_MODE;
|
||||
return 0;
|
||||
}
|
||||
early_param("switch_amode", early_parse_switch_amode);
|
||||
@@ -336,9 +336,9 @@ early_param("switch_amode", early_parse_switch_amode);
|
||||
static int __init early_parse_user_mode(char *p)
|
||||
{
|
||||
if (p && strcmp(p, "primary") == 0)
|
||||
user_mode = PRIMARY_SPACE_MODE;
|
||||
addressing_mode = PRIMARY_SPACE_MODE;
|
||||
else if (!p || strcmp(p, "home") == 0)
|
||||
user_mode = HOME_SPACE_MODE;
|
||||
addressing_mode = HOME_SPACE_MODE;
|
||||
else
|
||||
return 1;
|
||||
return 0;
|
||||
@@ -347,7 +347,7 @@ early_param("user_mode", early_parse_user_mode);
|
||||
|
||||
static void setup_addressing_mode(void)
|
||||
{
|
||||
if (user_mode == PRIMARY_SPACE_MODE) {
|
||||
if (addressing_mode == PRIMARY_SPACE_MODE) {
|
||||
if (set_amode_primary())
|
||||
pr_info("Address spaces switched, "
|
||||
"mvcos available\n");
|
||||
|
@@ -185,7 +185,7 @@ void show_registers(struct pt_regs *regs)
|
||||
{
|
||||
char *mode;
|
||||
|
||||
mode = (regs->psw.mask & PSW_MASK_PSTATE) ? "User" : "Krnl";
|
||||
mode = user_mode(regs) ? "User" : "Krnl";
|
||||
printk("%s PSW : %p %p",
|
||||
mode, (void *) regs->psw.mask,
|
||||
(void *) regs->psw.addr);
|
||||
@@ -225,7 +225,7 @@ void show_regs(struct pt_regs *regs)
|
||||
(void *) current->thread.ksp);
|
||||
show_registers(regs);
|
||||
/* Show stack backtrace if pt_regs is from kernel mode */
|
||||
if (!(regs->psw.mask & PSW_MASK_PSTATE))
|
||||
if (!user_mode(regs))
|
||||
show_trace(NULL, (unsigned long *) regs->gprs[15]);
|
||||
show_last_breaking_event(regs);
|
||||
}
|
||||
@@ -300,7 +300,7 @@ static void __kprobes do_trap(struct pt_regs *regs,
|
||||
regs->int_code, si_signo) == NOTIFY_STOP)
|
||||
return;
|
||||
|
||||
if (regs->psw.mask & PSW_MASK_PSTATE) {
|
||||
if (user_mode(regs)) {
|
||||
info.si_signo = si_signo;
|
||||
info.si_errno = 0;
|
||||
info.si_code = si_code;
|
||||
@@ -341,7 +341,7 @@ void __kprobes do_per_trap(struct pt_regs *regs)
|
||||
|
||||
static void default_trap_handler(struct pt_regs *regs)
|
||||
{
|
||||
if (regs->psw.mask & PSW_MASK_PSTATE) {
|
||||
if (user_mode(regs)) {
|
||||
report_user_fault(regs, SIGSEGV);
|
||||
do_exit(SIGSEGV);
|
||||
} else
|
||||
@@ -410,7 +410,7 @@ static void __kprobes illegal_op(struct pt_regs *regs)
|
||||
|
||||
location = get_psw_address(regs);
|
||||
|
||||
if (regs->psw.mask & PSW_MASK_PSTATE) {
|
||||
if (user_mode(regs)) {
|
||||
if (get_user(*((__u16 *) opcode), (__u16 __user *) location))
|
||||
return;
|
||||
if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) {
|
||||
@@ -478,7 +478,7 @@ void specification_exception(struct pt_regs *regs)
|
||||
|
||||
location = (__u16 __user *) get_psw_address(regs);
|
||||
|
||||
if (regs->psw.mask & PSW_MASK_PSTATE) {
|
||||
if (user_mode(regs)) {
|
||||
get_user(*((__u16 *) opcode), location);
|
||||
switch (opcode[0]) {
|
||||
case 0x28: /* LDR Rx,Ry */
|
||||
@@ -531,7 +531,7 @@ static void data_exception(struct pt_regs *regs)
|
||||
asm volatile("stfpc %0" : "=m" (current->thread.fp_regs.fpc));
|
||||
|
||||
#ifdef CONFIG_MATHEMU
|
||||
else if (regs->psw.mask & PSW_MASK_PSTATE) {
|
||||
else if (user_mode(regs)) {
|
||||
__u8 opcode[6];
|
||||
get_user(*((__u16 *) opcode), location);
|
||||
switch (opcode[0]) {
|
||||
@@ -598,7 +598,7 @@ static void data_exception(struct pt_regs *regs)
|
||||
static void space_switch_exception(struct pt_regs *regs)
|
||||
{
|
||||
/* Set user psw back to home space mode. */
|
||||
if (regs->psw.mask & PSW_MASK_PSTATE)
|
||||
if (user_mode(regs))
|
||||
regs->psw.mask |= PSW_ASC_HOME;
|
||||
/* Send SIGILL. */
|
||||
do_trap(regs, SIGILL, ILL_PRVOPC, "space switch event");
|
||||
|
@@ -84,7 +84,8 @@ struct vdso_data *vdso_data = &vdso_data_store.data;
|
||||
*/
|
||||
static void vdso_init_data(struct vdso_data *vd)
|
||||
{
|
||||
vd->ectg_available = user_mode != HOME_SPACE_MODE && test_facility(31);
|
||||
vd->ectg_available =
|
||||
addressing_mode != HOME_SPACE_MODE && test_facility(31);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
@@ -101,7 +102,7 @@ int vdso_alloc_per_cpu(struct _lowcore *lowcore)
|
||||
|
||||
lowcore->vdso_per_cpu_data = __LC_PASTE;
|
||||
|
||||
if (user_mode == HOME_SPACE_MODE || !vdso_enabled)
|
||||
if (addressing_mode == HOME_SPACE_MODE || !vdso_enabled)
|
||||
return 0;
|
||||
|
||||
segment_table = __get_free_pages(GFP_KERNEL, SEGMENT_ORDER);
|
||||
@@ -146,7 +147,7 @@ void vdso_free_per_cpu(struct _lowcore *lowcore)
|
||||
unsigned long segment_table, page_table, page_frame;
|
||||
u32 *psal, *aste;
|
||||
|
||||
if (user_mode == HOME_SPACE_MODE || !vdso_enabled)
|
||||
if (addressing_mode == HOME_SPACE_MODE || !vdso_enabled)
|
||||
return;
|
||||
|
||||
psal = (u32 *)(addr_t) lowcore->paste[4];
|
||||
@@ -164,7 +165,7 @@ static void vdso_init_cr5(void)
|
||||
{
|
||||
unsigned long cr5;
|
||||
|
||||
if (user_mode == HOME_SPACE_MODE || !vdso_enabled)
|
||||
if (addressing_mode == HOME_SPACE_MODE || !vdso_enabled)
|
||||
return;
|
||||
cr5 = offsetof(struct _lowcore, paste);
|
||||
__ctl_load(cr5, 5, 5);
|
||||
|
@@ -45,7 +45,7 @@ SECTIONS
|
||||
|
||||
.dummy : { *(.dummy) } :data
|
||||
|
||||
RODATA
|
||||
RO_DATA_SECTION(PAGE_SIZE)
|
||||
|
||||
#ifdef CONFIG_SHARED_KERNEL
|
||||
. = ALIGN(0x100000); /* VM shared segments are 1MB aligned */
|
||||
|
Reference in New Issue
Block a user