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] sclp_vt220 build fix [S390] cio: change misleading console logic [S390] call home support: fix proc handler [S390] dasd: use idal for device characteristics [S390] Add highgprs facility to /proc/cpuinfo [S390] dasd: fix locking bug [S390] tape390: Fix request queue handling in block driver [S390] hypfs: Use subcode 6 if subcode 7 is not available
This commit is contained in:
commit
e7d688ec86
|
@ -438,7 +438,7 @@ static int diag204_probe(void)
|
|||
}
|
||||
if (diag204((unsigned long)SUBC_STIB6 |
|
||||
(unsigned long)INFO_EXT, pages, buf) >= 0) {
|
||||
diag204_store_sc = SUBC_STIB7;
|
||||
diag204_store_sc = SUBC_STIB6;
|
||||
diag204_info_type = INFO_EXT;
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -31,9 +31,9 @@ void __cpuinit print_cpu_info(void)
|
|||
|
||||
static int show_cpuinfo(struct seq_file *m, void *v)
|
||||
{
|
||||
static const char *hwcap_str[9] = {
|
||||
static const char *hwcap_str[10] = {
|
||||
"esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp",
|
||||
"edat", "etf3eh"
|
||||
"edat", "etf3eh", "highgprs"
|
||||
};
|
||||
struct _lowcore *lc;
|
||||
unsigned long n = (unsigned long) v - 1;
|
||||
|
@ -48,7 +48,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
|||
num_online_cpus(), loops_per_jiffy/(500000/HZ),
|
||||
(loops_per_jiffy/(5000/HZ))%100);
|
||||
seq_puts(m, "features\t: ");
|
||||
for (i = 0; i < 9; i++)
|
||||
for (i = 0; i < 10; i++)
|
||||
if (hwcap_str[i] && (elf_hwcap & (1UL << i)))
|
||||
seq_printf(m, "%s ", hwcap_str[i]);
|
||||
seq_puts(m, "\n");
|
||||
|
|
|
@ -2533,6 +2533,7 @@ static struct dasd_ccw_req *dasd_generic_build_rdc(struct dasd_device *device,
|
|||
{
|
||||
struct dasd_ccw_req *cqr;
|
||||
struct ccw1 *ccw;
|
||||
unsigned long *idaw;
|
||||
|
||||
cqr = dasd_smalloc_request(magic, 1 /* RDC */, rdc_buffer_size, device);
|
||||
|
||||
|
@ -2546,9 +2547,17 @@ static struct dasd_ccw_req *dasd_generic_build_rdc(struct dasd_device *device,
|
|||
|
||||
ccw = cqr->cpaddr;
|
||||
ccw->cmd_code = CCW_CMD_RDC;
|
||||
ccw->cda = (__u32)(addr_t)rdc_buffer;
|
||||
ccw->count = rdc_buffer_size;
|
||||
if (idal_is_needed(rdc_buffer, rdc_buffer_size)) {
|
||||
idaw = (unsigned long *) (cqr->data);
|
||||
ccw->cda = (__u32)(addr_t) idaw;
|
||||
ccw->flags = CCW_FLAG_IDA;
|
||||
idaw = idal_create_words(idaw, rdc_buffer, rdc_buffer_size);
|
||||
} else {
|
||||
ccw->cda = (__u32)(addr_t) rdc_buffer;
|
||||
ccw->flags = 0;
|
||||
}
|
||||
|
||||
ccw->count = rdc_buffer_size;
|
||||
cqr->startdev = device;
|
||||
cqr->memdev = device;
|
||||
cqr->expires = 10*HZ;
|
||||
|
|
|
@ -3216,6 +3216,7 @@ int dasd_eckd_restore_device(struct dasd_device *device)
|
|||
struct dasd_eckd_characteristics temp_rdc_data;
|
||||
int is_known, rc;
|
||||
struct dasd_uid temp_uid;
|
||||
unsigned long flags;
|
||||
|
||||
private = (struct dasd_eckd_private *) device->private;
|
||||
|
||||
|
@ -3228,7 +3229,8 @@ int dasd_eckd_restore_device(struct dasd_device *device)
|
|||
rc = dasd_eckd_generate_uid(device, &private->uid);
|
||||
dasd_get_uid(device->cdev, &temp_uid);
|
||||
if (memcmp(&private->uid, &temp_uid, sizeof(struct dasd_uid)) != 0)
|
||||
dev_err(&device->cdev->dev, "The UID of the DASD has changed\n");
|
||||
dev_err(&device->cdev->dev, "The UID of the DASD has "
|
||||
"changed\n");
|
||||
if (rc)
|
||||
goto out_err;
|
||||
dasd_set_uid(device->cdev, &private->uid);
|
||||
|
@ -3256,9 +3258,9 @@ int dasd_eckd_restore_device(struct dasd_device *device)
|
|||
"device: %s", rc, dev_name(&device->cdev->dev));
|
||||
goto out_err;
|
||||
}
|
||||
spin_lock(get_ccwdev_lock(device->cdev));
|
||||
spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags);
|
||||
memcpy(&private->rdc_data, &temp_rdc_data, sizeof(temp_rdc_data));
|
||||
spin_unlock(get_ccwdev_lock(device->cdev));
|
||||
spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags);
|
||||
|
||||
/* add device to alias management */
|
||||
dasd_alias_add_device(device);
|
||||
|
|
|
@ -62,7 +62,7 @@ static struct notifier_block call_home_panic_nb = {
|
|||
.priority = INT_MAX,
|
||||
};
|
||||
|
||||
static int proc_handler_callhome(ctl_table *ctl, int write, struct file *filp,
|
||||
static int proc_handler_callhome(struct ctl_table *ctl, int write,
|
||||
void __user *buffer, size_t *count,
|
||||
loff_t *ppos)
|
||||
{
|
||||
|
@ -100,7 +100,7 @@ static struct ctl_table callhome_table[] = {
|
|||
{
|
||||
.procname = "callhome",
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_handler_callhome,
|
||||
.proc_handler = proc_handler_callhome,
|
||||
},
|
||||
{ .ctl_name = 0 }
|
||||
};
|
||||
|
|
|
@ -705,21 +705,6 @@ static int __init sclp_vt220_tty_init(void)
|
|||
}
|
||||
__initcall(sclp_vt220_tty_init);
|
||||
|
||||
#ifdef CONFIG_SCLP_VT220_CONSOLE
|
||||
|
||||
static void
|
||||
sclp_vt220_con_write(struct console *con, const char *buf, unsigned int count)
|
||||
{
|
||||
__sclp_vt220_write((const unsigned char *) buf, count, 1, 1, 0);
|
||||
}
|
||||
|
||||
static struct tty_driver *
|
||||
sclp_vt220_con_device(struct console *c, int *index)
|
||||
{
|
||||
*index = 0;
|
||||
return sclp_vt220_driver;
|
||||
}
|
||||
|
||||
static void __sclp_vt220_flush_buffer(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
@ -776,6 +761,21 @@ static void sclp_vt220_pm_event_fn(struct sclp_register *reg,
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SCLP_VT220_CONSOLE
|
||||
|
||||
static void
|
||||
sclp_vt220_con_write(struct console *con, const char *buf, unsigned int count)
|
||||
{
|
||||
__sclp_vt220_write((const unsigned char *) buf, count, 1, 1, 0);
|
||||
}
|
||||
|
||||
static struct tty_driver *
|
||||
sclp_vt220_con_device(struct console *c, int *index)
|
||||
{
|
||||
*index = 0;
|
||||
return sclp_vt220_driver;
|
||||
}
|
||||
|
||||
static int
|
||||
sclp_vt220_notify(struct notifier_block *self,
|
||||
unsigned long event, void *data)
|
||||
|
|
|
@ -162,9 +162,10 @@ tapeblock_requeue(struct work_struct *work) {
|
|||
spin_lock_irq(&device->blk_data.request_queue_lock);
|
||||
while (
|
||||
!blk_queue_plugged(queue) &&
|
||||
(req = blk_fetch_request(queue)) &&
|
||||
blk_peek_request(queue) &&
|
||||
nr_queued < TAPEBLOCK_MIN_REQUEUE
|
||||
) {
|
||||
req = blk_fetch_request(queue);
|
||||
if (rq_data_dir(req) == WRITE) {
|
||||
DBF_EVENT(1, "TBLOCK: Rejecting write request\n");
|
||||
spin_unlock_irq(&device->blk_data.request_queue_lock);
|
||||
|
|
|
@ -1250,8 +1250,7 @@ static int io_subchannel_probe(struct subchannel *sch)
|
|||
unsigned long flags;
|
||||
struct ccw_dev_id dev_id;
|
||||
|
||||
cdev = sch_get_cdev(sch);
|
||||
if (cdev) {
|
||||
if (cio_is_console(sch->schid)) {
|
||||
rc = sysfs_create_group(&sch->dev.kobj,
|
||||
&io_subchannel_attr_group);
|
||||
if (rc)
|
||||
|
@ -1260,13 +1259,13 @@ static int io_subchannel_probe(struct subchannel *sch)
|
|||
"0.%x.%04x (rc=%d)\n",
|
||||
sch->schid.ssid, sch->schid.sch_no, rc);
|
||||
/*
|
||||
* This subchannel already has an associated ccw_device.
|
||||
* The console subchannel already has an associated ccw_device.
|
||||
* Throw the delayed uevent for the subchannel, register
|
||||
* the ccw_device and exit. This happens for all early
|
||||
* devices, e.g. the console.
|
||||
* the ccw_device and exit.
|
||||
*/
|
||||
dev_set_uevent_suppress(&sch->dev, 0);
|
||||
kobject_uevent(&sch->dev.kobj, KOBJ_ADD);
|
||||
cdev = sch_get_cdev(sch);
|
||||
cdev->dev.groups = ccwdev_attr_groups;
|
||||
device_initialize(&cdev->dev);
|
||||
ccw_device_register(cdev);
|
||||
|
|
Loading…
Reference in New Issue