|
@@ -26,7 +26,7 @@
|
|
#define OCF_LENGTH_CPC_NAME 8UL
|
|
#define OCF_LENGTH_CPC_NAME 8UL
|
|
|
|
|
|
static char hmc_network[OCF_LENGTH_HMC_NETWORK + 1];
|
|
static char hmc_network[OCF_LENGTH_HMC_NETWORK + 1];
|
|
-static char cpc_name[OCF_LENGTH_CPC_NAME + 1];
|
|
|
|
|
|
+static char cpc_name[OCF_LENGTH_CPC_NAME]; /* in EBCDIC */
|
|
|
|
|
|
static DEFINE_SPINLOCK(sclp_ocf_lock);
|
|
static DEFINE_SPINLOCK(sclp_ocf_lock);
|
|
static struct work_struct sclp_ocf_change_work;
|
|
static struct work_struct sclp_ocf_change_work;
|
|
@@ -72,9 +72,8 @@ static void sclp_ocf_handler(struct evbuf_header *evbuf)
|
|
}
|
|
}
|
|
if (cpc) {
|
|
if (cpc) {
|
|
size = min(OCF_LENGTH_CPC_NAME, (size_t) cpc->length);
|
|
size = min(OCF_LENGTH_CPC_NAME, (size_t) cpc->length);
|
|
|
|
+ memset(cpc_name, 0, OCF_LENGTH_CPC_NAME);
|
|
memcpy(cpc_name, cpc + 1, size);
|
|
memcpy(cpc_name, cpc + 1, size);
|
|
- EBCASC(cpc_name, size);
|
|
|
|
- cpc_name[size] = 0;
|
|
|
|
}
|
|
}
|
|
spin_unlock(&sclp_ocf_lock);
|
|
spin_unlock(&sclp_ocf_lock);
|
|
schedule_work(&sclp_ocf_change_work);
|
|
schedule_work(&sclp_ocf_change_work);
|
|
@@ -85,15 +84,23 @@ static struct sclp_register sclp_ocf_event = {
|
|
.receiver_fn = sclp_ocf_handler,
|
|
.receiver_fn = sclp_ocf_handler,
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+void sclp_ocf_cpc_name_copy(char *dst)
|
|
|
|
+{
|
|
|
|
+ spin_lock_irq(&sclp_ocf_lock);
|
|
|
|
+ memcpy(dst, cpc_name, OCF_LENGTH_CPC_NAME);
|
|
|
|
+ spin_unlock_irq(&sclp_ocf_lock);
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL(sclp_ocf_cpc_name_copy);
|
|
|
|
+
|
|
static ssize_t cpc_name_show(struct kobject *kobj,
|
|
static ssize_t cpc_name_show(struct kobject *kobj,
|
|
struct kobj_attribute *attr, char *page)
|
|
struct kobj_attribute *attr, char *page)
|
|
{
|
|
{
|
|
- int rc;
|
|
|
|
|
|
+ char name[OCF_LENGTH_CPC_NAME + 1];
|
|
|
|
|
|
- spin_lock_irq(&sclp_ocf_lock);
|
|
|
|
- rc = snprintf(page, PAGE_SIZE, "%s\n", cpc_name);
|
|
|
|
- spin_unlock_irq(&sclp_ocf_lock);
|
|
|
|
- return rc;
|
|
|
|
|
|
+ sclp_ocf_cpc_name_copy(name);
|
|
|
|
+ name[OCF_LENGTH_CPC_NAME] = 0;
|
|
|
|
+ EBCASC(name, OCF_LENGTH_CPC_NAME);
|
|
|
|
+ return snprintf(page, PAGE_SIZE, "%s\n", name);
|
|
}
|
|
}
|
|
|
|
|
|
static struct kobj_attribute cpc_name_attr =
|
|
static struct kobj_attribute cpc_name_attr =
|