#define OCF_LENGTH_CPC_NAME 8UL
 
 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 struct work_struct sclp_ocf_change_work;
        }
        if (cpc) {
                size = min(OCF_LENGTH_CPC_NAME, (size_t) cpc->length);
+               memset(cpc_name, 0, OCF_LENGTH_CPC_NAME);
                memcpy(cpc_name, cpc + 1, size);
-               EBCASC(cpc_name, size);
-               cpc_name[size] = 0;
        }
        spin_unlock(&sclp_ocf_lock);
        schedule_work(&sclp_ocf_change_work);
        .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,
                             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 =