Browse Source

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.
Linus Torvalds 17 years ago
parent
commit
19f2b8dfea

+ 1 - 0
arch/s390/Kconfig

@@ -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

+ 1 - 1
arch/s390/kernel/smp.c

@@ -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");

+ 1 - 1
arch/s390/mm/vmem.c

@@ -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;
 
 

+ 1 - 0
drivers/s390/char/sclp_vt220.c

@@ -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();

+ 1 - 1
drivers/s390/char/tape_3590.c

@@ -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)

+ 3 - 3
drivers/s390/cio/blacklist.c

@@ -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,
-		       int msgtrigger)
+static int parse_busid(char *str, unsigned int *cssid, unsigned int *ssid,
+		       unsigned int *devno, int msgtrigger)
 {
 {
 	char *str_work;
 	char *str_work;
 	int val, rc, ret;
 	int val, rc, ret;
@@ -148,7 +148,7 @@ out:
 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;

+ 11 - 9
drivers/s390/cio/cio.c

@@ -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->isc = 3;
+	}
 	sch->lpm = sch->schib.pmcw.pam & sch->opm;
 	sch->lpm = sch->schib.pmcw.pam & sch->opm;
-	sch->isc = 3;
 
 
 	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)
 	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)
 	}
 	}
 
 
 	/*
 	/*
-	 * enable console I/O-interrupt subclass 7
+	 * enable console I/O-interrupt subclass 1
 	 */
 	 */
-	ctl_set_bit(6, 24);
-	console_subchannel.isc = 7;
-	console_subchannel.schib.pmcw.isc = 7;
+	ctl_set_bit(6, 30);
+	console_subchannel.isc = 1;
+	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);

+ 4 - 4
include/asm-s390/system.h

@@ -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)
 	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));		\
 	})
 	})