Commit 19f2b8df authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6

* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6:
  [S390] tape_3590.c: introduce missing kfree
  [S390] Fix __ctl_load/__ctl_store inline assembly constraints
  [S390] Fix build failure in __cpu_up()
  [S390] vt220 console, initialize list head before use
  [S390] cio: Fix inverted isc priorities.
  [S390] vmemmap: fix off-by-one bug.
  [S390] cio: Fix sparse warnings in blacklist.c.
  [S390] sparsemem: use SPARSEMEM_STATIC if !64BIT.
parents c592713b 1783e60f
...@@ -304,6 +304,7 @@ config ARCH_SPARSEMEM_ENABLE ...@@ -304,6 +304,7 @@ config ARCH_SPARSEMEM_ENABLE
def_bool y def_bool y
select SPARSEMEM_VMEMMAP_ENABLE select SPARSEMEM_VMEMMAP_ENABLE
select SPARSEMEM_VMEMMAP select SPARSEMEM_VMEMMAP
select SPARSEMEM_STATIC if !64BIT
config ARCH_SPARSEMEM_DEFAULT config ARCH_SPARSEMEM_DEFAULT
def_bool y def_bool y
......
...@@ -711,7 +711,7 @@ int __cpuinit __cpu_up(unsigned int cpu) ...@@ -711,7 +711,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
memset(sf, 0, sizeof(struct stack_frame)); memset(sf, 0, sizeof(struct stack_frame));
sf->gprs[9] = (unsigned long) sf; sf->gprs[9] = (unsigned long) sf;
cpu_lowcore->save_area[15] = (unsigned long) sf; cpu_lowcore->save_area[15] = (unsigned long) sf;
__ctl_store(cpu_lowcore->cregs_save_area[0], 0, 15); __ctl_store(cpu_lowcore->cregs_save_area, 0, 15);
asm volatile( asm volatile(
" stam 0,15,0(%0)" " stam 0,15,0(%0)"
: : "a" (&cpu_lowcore->access_regs_save_area) : "memory"); : : "a" (&cpu_lowcore->access_regs_save_area) : "memory");
......
...@@ -236,7 +236,7 @@ static int insert_memory_segment(struct memory_segment *seg) ...@@ -236,7 +236,7 @@ static int insert_memory_segment(struct memory_segment *seg)
{ {
struct memory_segment *tmp; struct memory_segment *tmp;
if (seg->start + seg->size >= VMEM_MAX_PHYS || if (seg->start + seg->size > VMEM_MAX_PHYS ||
seg->start + seg->size < seg->start) seg->start + seg->size < seg->start)
return -ERANGE; return -ERANGE;
......
...@@ -773,6 +773,7 @@ sclp_vt220_con_init(void) ...@@ -773,6 +773,7 @@ sclp_vt220_con_init(void)
{ {
int rc; int rc;
INIT_LIST_HEAD(&sclp_vt220_register.list);
if (!CONSOLE_IS_SCLP) if (!CONSOLE_IS_SCLP)
return 0; return 0;
rc = __sclp_vt220_init(); rc = __sclp_vt220_init();
......
...@@ -1598,7 +1598,7 @@ tape_3590_setup_device(struct tape_device *device) ...@@ -1598,7 +1598,7 @@ tape_3590_setup_device(struct tape_device *device)
rc = tape_3590_read_dev_chars(device, rdc_data); rc = tape_3590_read_dev_chars(device, rdc_data);
if (rc) { if (rc) {
DBF_LH(3, "Read device characteristics failed!\n"); DBF_LH(3, "Read device characteristics failed!\n");
goto fail_kmalloc; goto fail_rdc_data;
} }
rc = tape_std_assign(device); rc = tape_std_assign(device);
if (rc) if (rc)
......
...@@ -97,8 +97,8 @@ static int pure_hex(char **cp, unsigned int *val, int min_digit, ...@@ -97,8 +97,8 @@ static int pure_hex(char **cp, unsigned int *val, int min_digit,
return 0; return 0;
} }
static int parse_busid(char *str, int *cssid, int *ssid, int *devno, static int parse_busid(char *str, unsigned int *cssid, unsigned int *ssid,
int msgtrigger) unsigned int *devno, int msgtrigger)
{ {
char *str_work; char *str_work;
int val, rc, ret; int val, rc, ret;
...@@ -148,7 +148,7 @@ static int parse_busid(char *str, int *cssid, int *ssid, int *devno, ...@@ -148,7 +148,7 @@ static int parse_busid(char *str, int *cssid, int *ssid, int *devno,
static int blacklist_parse_parameters(char *str, range_action action, static int blacklist_parse_parameters(char *str, range_action action,
int msgtrigger) int msgtrigger)
{ {
int from_cssid, to_cssid, from_ssid, to_ssid, from, to; unsigned int from_cssid, to_cssid, from_ssid, to_ssid, from, to;
int rc, totalrc; int rc, totalrc;
char *parm; char *parm;
range_action ra; range_action ra;
......
...@@ -576,12 +576,14 @@ cio_validate_subchannel (struct subchannel *sch, struct subchannel_id schid) ...@@ -576,12 +576,14 @@ cio_validate_subchannel (struct subchannel *sch, struct subchannel_id schid)
err = -ENODEV; err = -ENODEV;
goto out; goto out;
} }
if (cio_is_console(sch->schid)) if (cio_is_console(sch->schid)) {
sch->opm = 0xff; sch->opm = 0xff;
else sch->isc = 1;
} else {
sch->opm = chp_get_sch_opm(sch); sch->opm = chp_get_sch_opm(sch);
sch->lpm = sch->schib.pmcw.pam & sch->opm;
sch->isc = 3; sch->isc = 3;
}
sch->lpm = sch->schib.pmcw.pam & sch->opm;
CIO_MSG_EVENT(6, "Detected device %04x on subchannel 0.%x.%04X " CIO_MSG_EVENT(6, "Detected device %04x on subchannel 0.%x.%04X "
"- PIM = %02X, PAM = %02X, POM = %02X\n", "- PIM = %02X, PAM = %02X, POM = %02X\n",
...@@ -704,9 +706,9 @@ void wait_cons_dev(void) ...@@ -704,9 +706,9 @@ void wait_cons_dev(void)
if (!console_subchannel_in_use) if (!console_subchannel_in_use)
return; return;
/* disable all but isc 7 (console device) */ /* disable all but isc 1 (console device) */
__ctl_store (save_cr6, 6, 6); __ctl_store (save_cr6, 6, 6);
cr6 = 0x01000000; cr6 = 0x40000000;
__ctl_load (cr6, 6, 6); __ctl_load (cr6, 6, 6);
do { do {
...@@ -788,11 +790,11 @@ cio_probe_console(void) ...@@ -788,11 +790,11 @@ cio_probe_console(void)
} }
/* /*
* enable console I/O-interrupt subclass 7 * enable console I/O-interrupt subclass 1
*/ */
ctl_set_bit(6, 24); ctl_set_bit(6, 30);
console_subchannel.isc = 7; console_subchannel.isc = 1;
console_subchannel.schib.pmcw.isc = 7; console_subchannel.schib.pmcw.isc = 1;
console_subchannel.schib.pmcw.intparm = console_subchannel.schib.pmcw.intparm =
(u32)(addr_t)&console_subchannel; (u32)(addr_t)&console_subchannel;
ret = cio_modify(&console_subchannel); ret = cio_modify(&console_subchannel);
......
...@@ -315,14 +315,14 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size) ...@@ -315,14 +315,14 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size)
asm volatile( \ asm volatile( \
" lctlg %1,%2,0(%0)\n" \ " lctlg %1,%2,0(%0)\n" \
: : "a" (&array), "i" (low), "i" (high), \ : : "a" (&array), "i" (low), "i" (high), \
"m" (*(addrtype *)(array))); \ "m" (*(addrtype *)(&array))); \
}) })
#define __ctl_store(array, low, high) ({ \ #define __ctl_store(array, low, high) ({ \
typedef struct { char _[sizeof(array)]; } addrtype; \ typedef struct { char _[sizeof(array)]; } addrtype; \
asm volatile( \ asm volatile( \
" stctg %2,%3,0(%1)\n" \ " stctg %2,%3,0(%1)\n" \
: "=m" (*(addrtype *)(array)) \ : "=m" (*(addrtype *)(&array)) \
: "a" (&array), "i" (low), "i" (high)); \ : "a" (&array), "i" (low), "i" (high)); \
}) })
...@@ -333,14 +333,14 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size) ...@@ -333,14 +333,14 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size)
asm volatile( \ asm volatile( \
" lctl %1,%2,0(%0)\n" \ " lctl %1,%2,0(%0)\n" \
: : "a" (&array), "i" (low), "i" (high), \ : : "a" (&array), "i" (low), "i" (high), \
"m" (*(addrtype *)(array))); \ "m" (*(addrtype *)(&array))); \
}) })
#define __ctl_store(array, low, high) ({ \ #define __ctl_store(array, low, high) ({ \
typedef struct { char _[sizeof(array)]; } addrtype; \ typedef struct { char _[sizeof(array)]; } addrtype; \
asm volatile( \ asm volatile( \
" stctl %2,%3,0(%1)\n" \ " stctl %2,%3,0(%1)\n" \
: "=m" (*(addrtype *)(array)) \ : "=m" (*(addrtype *)(&array)) \
: "a" (&array), "i" (low), "i" (high)); \ : "a" (&array), "i" (low), "i" (high)); \
}) })
......
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