mirror of https://gitee.com/openkylin/linux.git
Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6
* 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6: [S390] fix "mem=" handling in case of standby memory [S390] Fix timeval regression on s390 [S390] sclp: handle empty event buffers
This commit is contained in:
commit
83ff1af9d3
|
@ -145,7 +145,7 @@ cputime_to_timeval(const cputime_t cputime, struct timeval *value)
|
||||||
value->tv_usec = rp.subreg.even / 4096;
|
value->tv_usec = rp.subreg.even / 4096;
|
||||||
value->tv_sec = rp.subreg.odd;
|
value->tv_sec = rp.subreg.odd;
|
||||||
#else
|
#else
|
||||||
value->tv_usec = cputime % 4096000000ULL;
|
value->tv_usec = (cputime % 4096000000ULL) / 4096;
|
||||||
value->tv_sec = cputime / 4096000000ULL;
|
value->tv_sec = cputime / 4096000000ULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,8 @@ struct mem_chunk {
|
||||||
|
|
||||||
extern struct mem_chunk memory_chunk[];
|
extern struct mem_chunk memory_chunk[];
|
||||||
extern unsigned long real_memory_size;
|
extern unsigned long real_memory_size;
|
||||||
|
extern int memory_end_set;
|
||||||
|
extern unsigned long memory_end;
|
||||||
|
|
||||||
void detect_memory_layout(struct mem_chunk chunk[]);
|
void detect_memory_layout(struct mem_chunk chunk[]);
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,9 @@ char elf_platform[ELF_PLATFORM_SIZE];
|
||||||
|
|
||||||
struct mem_chunk __initdata memory_chunk[MEMORY_CHUNKS];
|
struct mem_chunk __initdata memory_chunk[MEMORY_CHUNKS];
|
||||||
volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */
|
volatile int __cpu_logical_map[NR_CPUS]; /* logical cpu to cpu address */
|
||||||
static unsigned long __initdata memory_end;
|
|
||||||
|
int __initdata memory_end_set;
|
||||||
|
unsigned long __initdata memory_end;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is set up by the setup-routine at boot-time
|
* This is set up by the setup-routine at boot-time
|
||||||
|
@ -281,6 +283,7 @@ void (*pm_power_off)(void) = machine_power_off;
|
||||||
static int __init early_parse_mem(char *p)
|
static int __init early_parse_mem(char *p)
|
||||||
{
|
{
|
||||||
memory_end = memparse(p, &p);
|
memory_end = memparse(p, &p);
|
||||||
|
memory_end_set = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
early_param("mem", early_parse_mem);
|
early_param("mem", early_parse_mem);
|
||||||
|
@ -508,8 +511,10 @@ static void __init setup_memory_end(void)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#if defined(CONFIG_ZFCPDUMP) || defined(CONFIG_ZFCPDUMP_MODULE)
|
#if defined(CONFIG_ZFCPDUMP) || defined(CONFIG_ZFCPDUMP_MODULE)
|
||||||
if (ipl_info.type == IPL_TYPE_FCP_DUMP)
|
if (ipl_info.type == IPL_TYPE_FCP_DUMP) {
|
||||||
memory_end = ZFCPDUMP_HSA_SIZE;
|
memory_end = ZFCPDUMP_HSA_SIZE;
|
||||||
|
memory_end_set = 1;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
memory_size = 0;
|
memory_size = 0;
|
||||||
memory_end &= PAGE_MASK;
|
memory_end &= PAGE_MASK;
|
||||||
|
|
|
@ -280,8 +280,11 @@ sclp_dispatch_evbufs(struct sccb_header *sccb)
|
||||||
rc = 0;
|
rc = 0;
|
||||||
for (offset = sizeof(struct sccb_header); offset < sccb->length;
|
for (offset = sizeof(struct sccb_header); offset < sccb->length;
|
||||||
offset += evbuf->length) {
|
offset += evbuf->length) {
|
||||||
/* Search for event handler */
|
|
||||||
evbuf = (struct evbuf_header *) ((addr_t) sccb + offset);
|
evbuf = (struct evbuf_header *) ((addr_t) sccb + offset);
|
||||||
|
/* Check for malformed hardware response */
|
||||||
|
if (evbuf->length == 0)
|
||||||
|
break;
|
||||||
|
/* Search for event handler */
|
||||||
reg = NULL;
|
reg = NULL;
|
||||||
list_for_each(l, &sclp_reg_list) {
|
list_for_each(l, &sclp_reg_list) {
|
||||||
reg = list_entry(l, struct sclp_register, list);
|
reg = list_entry(l, struct sclp_register, list);
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include <linux/memory.h>
|
#include <linux/memory.h>
|
||||||
#include <asm/chpid.h>
|
#include <asm/chpid.h>
|
||||||
#include <asm/sclp.h>
|
#include <asm/sclp.h>
|
||||||
|
#include <asm/setup.h>
|
||||||
|
|
||||||
#include "sclp.h"
|
#include "sclp.h"
|
||||||
|
|
||||||
|
@ -474,6 +475,10 @@ static void __init add_memory_merged(u16 rn)
|
||||||
goto skip_add;
|
goto skip_add;
|
||||||
if (start + size > VMEM_MAX_PHYS)
|
if (start + size > VMEM_MAX_PHYS)
|
||||||
size = VMEM_MAX_PHYS - start;
|
size = VMEM_MAX_PHYS - start;
|
||||||
|
if (memory_end_set && (start >= memory_end))
|
||||||
|
goto skip_add;
|
||||||
|
if (memory_end_set && (start + size > memory_end))
|
||||||
|
size = memory_end - start;
|
||||||
add_memory(0, start, size);
|
add_memory(0, start, size);
|
||||||
skip_add:
|
skip_add:
|
||||||
first_rn = rn;
|
first_rn = rn;
|
||||||
|
|
Loading…
Reference in New Issue