Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a489d159 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6: (44 commits)
  [S390] hypfs crashes with invalid mount option.
  [S390] cio: subchannel evaluation function operates without lock
  [S390] cio: always query all paths on path verification.
  [S390] cio: update path groups on logical CHPID changes.
  [S390] cio: subchannels in no-path state.
  [S390] Replace nopav-message on VM.
  [S390] set modalias for ccw bus uevents.
  [S390] Get rid of DBG macro.
  [S390] Use alternative user-copy operations for new hardware.
  [S390] Make user-copy operations run-time configurable.
  [S390] Cleanup in signal handling code.
  [S390] Cleanup in page table related code.
  [S390] Linux API for writing z/VM APPLDATA Monitor records.
  [S390] xpram off by one error.
  [S390] Remove kexec experimental flag.
  [S390] cleanup appldata.
  [S390] fix typo in vmcp.
  [S390] Kernel stack overflow handling.
  [S390] qdio slsb processing state.
  [S390] Missing initialization in common i/o layer.
  ...
parents a48178a2 388c571c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2452,6 +2452,8 @@ S: Maintained
S390
P:	Martin Schwidefsky
M:	schwidefsky@de.ibm.com
P:	Heiko Carstens
M:	heiko.carstens@de.ibm.com
M:	linux390@de.ibm.com
L:	linux-390@vm.marist.edu
W:	http://www.ibm.com/developerworks/linux/linux390/
+15 −2
Original line number Diff line number Diff line
@@ -460,8 +460,7 @@ config S390_HYPFS_FS
	  information in an s390 hypervisor environment.

config KEXEC
	bool "kexec system call (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	bool "kexec system call"
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
@@ -487,8 +486,22 @@ source "drivers/net/Kconfig"

source "fs/Kconfig"

menu "Instrumentation Support"

source "arch/s390/oprofile/Kconfig"

config KPROBES
	bool "Kprobes (EXPERIMENTAL)"
	depends on EXPERIMENTAL && MODULES
	help
	  Kprobes allows you to trap at almost any kernel address and
	  execute a callback function.	register_kprobe() establishes
	  a probepoint and specifies the callback.  Kprobes is useful
	  for kernel debugging, non-intrusive instrumentation and testing.
	  If in doubt, say "N".

endmenu

source "arch/s390/Kconfig.debug"

source "security/Kconfig"
+0 −16
Original line number Diff line number Diff line
@@ -29,22 +29,6 @@
#define CTL_APPLDATA_NET_SUM	2125
#define CTL_APPLDATA_PROC	2126

#ifndef CONFIG_64BIT

#define APPLDATA_START_INTERVAL_REC 0x00	/* Function codes for */
#define APPLDATA_STOP_REC	    0x01	/* DIAG 0xDC	  */
#define APPLDATA_GEN_EVENT_RECORD   0x02
#define APPLDATA_START_CONFIG_REC   0x03

#else

#define APPLDATA_START_INTERVAL_REC 0x80
#define APPLDATA_STOP_REC	    0x81
#define APPLDATA_GEN_EVENT_RECORD   0x82
#define APPLDATA_START_CONFIG_REC   0x83

#endif /* CONFIG_64BIT */

#define P_INFO(x...)	printk(KERN_INFO MY_PRINT_NAME " info: " x)
#define P_ERROR(x...)	printk(KERN_ERR MY_PRINT_NAME " error: " x)
#define P_WARNING(x...)	printk(KERN_WARNING MY_PRINT_NAME " status: " x)
+12 −69
Original line number Diff line number Diff line
@@ -14,20 +14,20 @@
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <asm/smp.h>
#include <linux/interrupt.h>
#include <linux/proc_fs.h>
#include <linux/page-flags.h>
#include <linux/swap.h>
#include <linux/pagemap.h>
#include <linux/sysctl.h>
#include <asm/timer.h>
//#include <linux/kernel_stat.h>
#include <linux/notifier.h>
#include <linux/cpu.h>
#include <linux/workqueue.h>
#include <asm/appldata.h>
#include <asm/timer.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <asm/smp.h>

#include "appldata.h"

@@ -39,34 +39,6 @@

#define TOD_MICRO	0x01000			/* nr. of TOD clock units
						   for 1 microsecond */

/*
 * Parameter list for DIAGNOSE X'DC'
 */
#ifndef CONFIG_64BIT
struct appldata_parameter_list {
	u16 diag;		/* The DIAGNOSE code X'00DC'          */
	u8  function;		/* The function code for the DIAGNOSE */
	u8  parlist_length;	/* Length of the parameter list       */
	u32 product_id_addr;	/* Address of the 16-byte product ID  */
	u16 reserved;
	u16 buffer_length;	/* Length of the application data buffer  */
	u32 buffer_addr;	/* Address of the application data buffer */
};
#else
struct appldata_parameter_list {
	u16 diag;
	u8  function;
	u8  parlist_length;
	u32 unused01;
	u16 reserved;
	u16 buffer_length;
	u32 unused02;
	u64 product_id_addr;
	u64 buffer_addr;
};
#endif /* CONFIG_64BIT */

/*
 * /proc entries (sysctl)
 */
@@ -181,46 +153,17 @@ static void appldata_work_fn(void *data)
int appldata_diag(char record_nr, u16 function, unsigned long buffer,
			u16 length, char *mod_lvl)
{
	unsigned long ry;
	struct appldata_product_id {
		char prod_nr[7];			/* product nr. */
		char prod_fn[2];			/* product function */
		char record_nr;				/* record nr. */
		char version_nr[2];			/* version */
		char release_nr[2];			/* release */
		char mod_lvl[2];			/* modification lvl. */
	} appldata_product_id = {
	/* all strings are EBCDIC, record_nr is byte */
	struct appldata_product_id id = {
		.prod_nr    = {0xD3, 0xC9, 0xD5, 0xE4,
			       0xE7, 0xD2, 0xD9},	/* "LINUXKR" */
		.prod_fn    = {0xD5, 0xD3},		/* "NL" */
		.prod_fn    = 0xD5D3,			/* "NL" */
		.record_nr  = record_nr,
		.version_nr = {0xF2, 0xF6},		/* "26" */
		.release_nr = {0xF0, 0xF1},		/* "01" */
		.mod_lvl    = {mod_lvl[0], mod_lvl[1]},
	};
	struct appldata_parameter_list appldata_parameter_list = {
				.diag = 0xDC,
				.function = function,
				.parlist_length =
					sizeof(appldata_parameter_list),
				.buffer_length = length,
				.product_id_addr =
					(unsigned long) &appldata_product_id,
				.buffer_addr = virt_to_phys((void *) buffer)
		.version_nr = 0xF2F6,			/* "26" */
		.release_nr = 0xF0F1,			/* "01" */
		.mod_lvl    = (mod_lvl[0]) << 8 | mod_lvl[1],
	};

	if (!MACHINE_IS_VM)
		return -ENOSYS;
	ry = -1;
	asm volatile(
			"diag %1,%0,0xDC\n\t"
			: "=d" (ry)
			: "d" (&appldata_parameter_list),
			  "m" (appldata_parameter_list),
			  "m" (appldata_product_id)
			: "cc");
	return (int) ry;
	return appldata_asm(&id, function, (void *) buffer, length);
}
/************************ timer, work, DIAG <END> ****************************/

+1 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include <linux/kernel_stat.h>
#include <linux/netdevice.h>
#include <linux/sched.h>
#include <asm/appldata.h>
#include <asm/smp.h>

#include "appldata.h"
Loading