mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 01:22:07 +00:00
- fix reference counting for ap devices
- fix paes selftest - fix pmd_deref()/pud_deref() so they can also handle large pages - remove unused vdso file and defines - update defconfigs - call rcu_cpu_starting() early in smp init code to avoid lockdep warnings - fix hotplug of PCI function missing bus -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEECMNfWEw3SLnmiLkZIg7DeRspbsIFAl+kWR8ACgkQIg7DeRsp bsIauA//QVZfg+1c1qEArd3MiFebG4wDg/URNmxv+0acS0/gaJtTLcSQaojCpweX Nx62vs2KZhxXnQd+FlGEVUvTSz68+Uy5fh09ghBg1QlsLvdF9ZVI0R2gm5JvDQb1 V9fnrF6aKbzin8ed7EsiuFMcP88ZgdFn1Tl4ZwHezAoIilluNtogsq6qxmy9C05l 1MR4Hco4h2VptyFbjs/uSGimlrJbYEy9puqyRhBEvPrS/4vxjPu5z505xLRIcoNG Vg6Z+mBkTnXgDJq2SKaaUKkKH4qicux1it7SkwKG0rJjbP0c5gHv/9kX1cnM1Q9Q d/S4VdKHdr/Iwnnr4ga7IoeovFThx8dhvvaXPRhm8g0jMxeEDA0deTfKZOFUZw9j dkf5CZ4Mx9YUHClfqcCf0iHhyKE9vEQAEvi1sQR5lUfGI716mGB6RSZB/p9q78nL Ggpb6fUe3ZXew8lXPu68Om/tF9t9tKUtcFoLiAP9DSplxaYru61WmK7H43uw0bhC zzDpF5uXqtvFRZilh5atTnmBtISlHOTtJP0ivUOqj2Cwlj34nDZBHTWIBylAfd3Y IIPHxWuCcXSvwbXpRgZ4xoZolSEO+4CRGHDWeAkH6mFl3gPECSf385oz4yW8O3Rl vdMgw55AIh6DLyDt6YXGaT/ECLnvv2K+XXedbON+j4kPQzNpyxQ= =zrHq -----END PGP SIGNATURE----- Merge tag 's390-5.10-3' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux Pull s390 fixes from Heiko Carstens: - fix reference counting for ap devices - fix paes selftest - fix pmd_deref()/pud_deref() so they can also handle large pages - remove unused vdso file and defines - update defconfigs - call rcu_cpu_starting() early in smp init code to avoid lockdep warnings - fix hotplug of PCI function missing bus * tag 's390-5.10-3' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/pci: fix hot-plug of PCI function missing bus s390/smp: move rcu_cpu_starting() earlier s390/pkey: fix paes selftest failure with paes and pkey static build s390: update defconfigs s390/vdso: remove unused constants s390/vdso: remove empty unused file s390/mm: make pmd/pud_deref() large page aware s390/ap: fix ap devices reference counting
This commit is contained in:
commit
ee51814888
@ -93,9 +93,10 @@ CONFIG_CLEANCACHE=y
|
||||
CONFIG_FRONTSWAP=y
|
||||
CONFIG_CMA_DEBUG=y
|
||||
CONFIG_CMA_DEBUGFS=y
|
||||
CONFIG_CMA_AREAS=7
|
||||
CONFIG_MEM_SOFT_DIRTY=y
|
||||
CONFIG_ZSWAP=y
|
||||
CONFIG_ZSMALLOC=m
|
||||
CONFIG_ZSMALLOC=y
|
||||
CONFIG_ZSMALLOC_STAT=y
|
||||
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
||||
CONFIG_IDLE_PAGE_TRACKING=y
|
||||
@ -378,7 +379,6 @@ CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_CGROUP_NET_PRIO=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_NET_PKTGEN=m
|
||||
# CONFIG_NET_DROP_MONITOR is not set
|
||||
CONFIG_PCI=y
|
||||
# CONFIG_PCIEASPM is not set
|
||||
CONFIG_PCI_DEBUG=y
|
||||
@ -386,7 +386,7 @@ CONFIG_HOTPLUG_PCI=y
|
||||
CONFIG_HOTPLUG_PCI_S390=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_CONNECTOR=y
|
||||
CONFIG_ZRAM=m
|
||||
CONFIG_ZRAM=y
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
@ -689,6 +689,7 @@ CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_DH=m
|
||||
CONFIG_CRYPTO_ECDH=m
|
||||
CONFIG_CRYPTO_ECRDSA=m
|
||||
CONFIG_CRYPTO_SM2=m
|
||||
CONFIG_CRYPTO_CURVE25519=m
|
||||
CONFIG_CRYPTO_GCM=y
|
||||
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||
@ -709,7 +710,6 @@ CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA3=m
|
||||
CONFIG_CRYPTO_SM3=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_AES_TI=m
|
||||
@ -753,6 +753,7 @@ CONFIG_CRYPTO_DES_S390=m
|
||||
CONFIG_CRYPTO_AES_S390=m
|
||||
CONFIG_CRYPTO_GHASH_S390=m
|
||||
CONFIG_CRYPTO_CRC32_S390=y
|
||||
CONFIG_CRYPTO_DEV_VIRTIO=m
|
||||
CONFIG_CORDIC=m
|
||||
CONFIG_CRC32_SELFTEST=y
|
||||
CONFIG_CRC4=m
|
||||
@ -829,6 +830,7 @@ CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
|
||||
CONFIG_FAULT_INJECTION=y
|
||||
CONFIG_FAILSLAB=y
|
||||
CONFIG_FAIL_PAGE_ALLOC=y
|
||||
CONFIG_FAULT_INJECTION_USERCOPY=y
|
||||
CONFIG_FAIL_MAKE_REQUEST=y
|
||||
CONFIG_FAIL_IO_TIMEOUT=y
|
||||
CONFIG_FAIL_FUTEX=y
|
||||
|
@ -87,9 +87,10 @@ CONFIG_KSM=y
|
||||
CONFIG_TRANSPARENT_HUGEPAGE=y
|
||||
CONFIG_CLEANCACHE=y
|
||||
CONFIG_FRONTSWAP=y
|
||||
CONFIG_CMA_AREAS=7
|
||||
CONFIG_MEM_SOFT_DIRTY=y
|
||||
CONFIG_ZSWAP=y
|
||||
CONFIG_ZSMALLOC=m
|
||||
CONFIG_ZSMALLOC=y
|
||||
CONFIG_ZSMALLOC_STAT=y
|
||||
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
||||
CONFIG_IDLE_PAGE_TRACKING=y
|
||||
@ -371,7 +372,6 @@ CONFIG_NETLINK_DIAG=m
|
||||
CONFIG_CGROUP_NET_PRIO=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_NET_PKTGEN=m
|
||||
# CONFIG_NET_DROP_MONITOR is not set
|
||||
CONFIG_PCI=y
|
||||
# CONFIG_PCIEASPM is not set
|
||||
CONFIG_HOTPLUG_PCI=y
|
||||
@ -379,7 +379,7 @@ CONFIG_HOTPLUG_PCI_S390=y
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_CONNECTOR=y
|
||||
CONFIG_ZRAM=m
|
||||
CONFIG_ZRAM=y
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
CONFIG_BLK_DEV_DRBD=m
|
||||
@ -680,6 +680,7 @@ CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_DH=m
|
||||
CONFIG_CRYPTO_ECDH=m
|
||||
CONFIG_CRYPTO_ECRDSA=m
|
||||
CONFIG_CRYPTO_SM2=m
|
||||
CONFIG_CRYPTO_CURVE25519=m
|
||||
CONFIG_CRYPTO_GCM=y
|
||||
CONFIG_CRYPTO_CHACHA20POLY1305=m
|
||||
@ -701,7 +702,6 @@ CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_RMD256=m
|
||||
CONFIG_CRYPTO_RMD320=m
|
||||
CONFIG_CRYPTO_SHA3=m
|
||||
CONFIG_CRYPTO_SM3=m
|
||||
CONFIG_CRYPTO_TGR192=m
|
||||
CONFIG_CRYPTO_WP512=m
|
||||
CONFIG_CRYPTO_AES_TI=m
|
||||
@ -745,6 +745,7 @@ CONFIG_CRYPTO_DES_S390=m
|
||||
CONFIG_CRYPTO_AES_S390=m
|
||||
CONFIG_CRYPTO_GHASH_S390=m
|
||||
CONFIG_CRYPTO_CRC32_S390=y
|
||||
CONFIG_CRYPTO_DEV_VIRTIO=m
|
||||
CONFIG_CORDIC=m
|
||||
CONFIG_PRIME_NUMBERS=m
|
||||
CONFIG_CRC4=m
|
||||
|
@ -17,11 +17,11 @@ CONFIG_HZ_100=y
|
||||
# CONFIG_CHSC_SCH is not set
|
||||
# CONFIG_SCM_BUS is not set
|
||||
CONFIG_CRASH_DUMP=y
|
||||
# CONFIG_SECCOMP is not set
|
||||
# CONFIG_PFAULT is not set
|
||||
# CONFIG_S390_HYPFS_FS is not set
|
||||
# CONFIG_VIRTUALIZATION is not set
|
||||
# CONFIG_S390_GUEST is not set
|
||||
# CONFIG_SECCOMP is not set
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_IBM_PARTITION=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
|
@ -692,16 +692,6 @@ static inline int pud_large(pud_t pud)
|
||||
return !!(pud_val(pud) & _REGION3_ENTRY_LARGE);
|
||||
}
|
||||
|
||||
static inline unsigned long pud_pfn(pud_t pud)
|
||||
{
|
||||
unsigned long origin_mask;
|
||||
|
||||
origin_mask = _REGION_ENTRY_ORIGIN;
|
||||
if (pud_large(pud))
|
||||
origin_mask = _REGION3_ENTRY_ORIGIN_LARGE;
|
||||
return (pud_val(pud) & origin_mask) >> PAGE_SHIFT;
|
||||
}
|
||||
|
||||
#define pmd_leaf pmd_large
|
||||
static inline int pmd_large(pmd_t pmd)
|
||||
{
|
||||
@ -747,16 +737,6 @@ static inline int pmd_none(pmd_t pmd)
|
||||
return pmd_val(pmd) == _SEGMENT_ENTRY_EMPTY;
|
||||
}
|
||||
|
||||
static inline unsigned long pmd_pfn(pmd_t pmd)
|
||||
{
|
||||
unsigned long origin_mask;
|
||||
|
||||
origin_mask = _SEGMENT_ENTRY_ORIGIN;
|
||||
if (pmd_large(pmd))
|
||||
origin_mask = _SEGMENT_ENTRY_ORIGIN_LARGE;
|
||||
return (pmd_val(pmd) & origin_mask) >> PAGE_SHIFT;
|
||||
}
|
||||
|
||||
#define pmd_write pmd_write
|
||||
static inline int pmd_write(pmd_t pmd)
|
||||
{
|
||||
@ -1238,11 +1218,39 @@ static inline pte_t mk_pte(struct page *page, pgprot_t pgprot)
|
||||
#define pud_index(address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD-1))
|
||||
#define pmd_index(address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1))
|
||||
|
||||
#define pmd_deref(pmd) (pmd_val(pmd) & _SEGMENT_ENTRY_ORIGIN)
|
||||
#define pud_deref(pud) (pud_val(pud) & _REGION_ENTRY_ORIGIN)
|
||||
#define p4d_deref(pud) (p4d_val(pud) & _REGION_ENTRY_ORIGIN)
|
||||
#define pgd_deref(pgd) (pgd_val(pgd) & _REGION_ENTRY_ORIGIN)
|
||||
|
||||
static inline unsigned long pmd_deref(pmd_t pmd)
|
||||
{
|
||||
unsigned long origin_mask;
|
||||
|
||||
origin_mask = _SEGMENT_ENTRY_ORIGIN;
|
||||
if (pmd_large(pmd))
|
||||
origin_mask = _SEGMENT_ENTRY_ORIGIN_LARGE;
|
||||
return pmd_val(pmd) & origin_mask;
|
||||
}
|
||||
|
||||
static inline unsigned long pmd_pfn(pmd_t pmd)
|
||||
{
|
||||
return pmd_deref(pmd) >> PAGE_SHIFT;
|
||||
}
|
||||
|
||||
static inline unsigned long pud_deref(pud_t pud)
|
||||
{
|
||||
unsigned long origin_mask;
|
||||
|
||||
origin_mask = _REGION_ENTRY_ORIGIN;
|
||||
if (pud_large(pud))
|
||||
origin_mask = _REGION3_ENTRY_ORIGIN_LARGE;
|
||||
return pud_val(pud) & origin_mask;
|
||||
}
|
||||
|
||||
static inline unsigned long pud_pfn(pud_t pud)
|
||||
{
|
||||
return pud_deref(pud) >> PAGE_SHIFT;
|
||||
}
|
||||
|
||||
/*
|
||||
* The pgd_offset function *always* adds the index for the top-level
|
||||
* region/segment table. This is done to get a sequence like the
|
||||
|
@ -61,14 +61,6 @@ int main(void)
|
||||
BLANK();
|
||||
OFFSET(__VDSO_GETCPU_VAL, vdso_per_cpu_data, getcpu_val);
|
||||
BLANK();
|
||||
/* constants used by the vdso */
|
||||
DEFINE(__CLOCK_REALTIME, CLOCK_REALTIME);
|
||||
DEFINE(__CLOCK_MONOTONIC, CLOCK_MONOTONIC);
|
||||
DEFINE(__CLOCK_REALTIME_COARSE, CLOCK_REALTIME_COARSE);
|
||||
DEFINE(__CLOCK_MONOTONIC_COARSE, CLOCK_MONOTONIC_COARSE);
|
||||
DEFINE(__CLOCK_THREAD_CPUTIME_ID, CLOCK_THREAD_CPUTIME_ID);
|
||||
DEFINE(__CLOCK_COARSE_RES, LOW_RES_NSEC);
|
||||
BLANK();
|
||||
/* idle data offsets */
|
||||
OFFSET(__CLOCK_IDLE_ENTER, s390_idle_data, clock_idle_enter);
|
||||
OFFSET(__CLOCK_IDLE_EXIT, s390_idle_data, clock_idle_exit);
|
||||
|
@ -855,13 +855,14 @@ void __init smp_detect_cpus(void)
|
||||
|
||||
static void smp_init_secondary(void)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
int cpu = raw_smp_processor_id();
|
||||
|
||||
S390_lowcore.last_update_clock = get_tod_clock();
|
||||
restore_access_regs(S390_lowcore.access_regs_save_area);
|
||||
set_cpu_flag(CIF_ASCE_PRIMARY);
|
||||
set_cpu_flag(CIF_ASCE_SECONDARY);
|
||||
cpu_init();
|
||||
rcu_cpu_starting(cpu);
|
||||
preempt_disable();
|
||||
init_cpu_timer();
|
||||
vtime_init();
|
||||
|
@ -101,6 +101,10 @@ static void __zpci_event_availability(struct zpci_ccdf_avail *ccdf)
|
||||
if (ret)
|
||||
break;
|
||||
|
||||
/* the PCI function will be scanned once function 0 appears */
|
||||
if (!zdev->zbus->bus)
|
||||
break;
|
||||
|
||||
pdev = pci_scan_single_device(zdev->zbus->bus, zdev->devfn);
|
||||
if (!pdev)
|
||||
break;
|
||||
|
@ -680,7 +680,10 @@ static int ap_device_probe(struct device *dev)
|
||||
{
|
||||
struct ap_device *ap_dev = to_ap_dev(dev);
|
||||
struct ap_driver *ap_drv = to_ap_drv(dev->driver);
|
||||
int card, queue, devres, drvres, rc;
|
||||
int card, queue, devres, drvres, rc = -ENODEV;
|
||||
|
||||
if (!get_device(dev))
|
||||
return rc;
|
||||
|
||||
if (is_queue_dev(dev)) {
|
||||
/*
|
||||
@ -697,7 +700,7 @@ static int ap_device_probe(struct device *dev)
|
||||
mutex_unlock(&ap_perms_mutex);
|
||||
drvres = ap_drv->flags & AP_DRIVER_FLAG_DEFAULT;
|
||||
if (!!devres != !!drvres)
|
||||
return -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Add queue/card to list of active queues/cards */
|
||||
@ -718,6 +721,9 @@ static int ap_device_probe(struct device *dev)
|
||||
ap_dev->drv = NULL;
|
||||
}
|
||||
|
||||
out:
|
||||
if (rc)
|
||||
put_device(dev);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -744,6 +750,8 @@ static int ap_device_remove(struct device *dev)
|
||||
hash_del(&to_ap_queue(dev)->hnode);
|
||||
spin_unlock_bh(&ap_queues_lock);
|
||||
|
||||
put_device(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1371,6 +1379,8 @@ static inline void ap_scan_domains(struct ap_card *ac)
|
||||
__func__, ac->id, dom);
|
||||
goto put_dev_and_continue;
|
||||
}
|
||||
/* get it and thus adjust reference counter */
|
||||
get_device(dev);
|
||||
if (decfg)
|
||||
AP_DBF_INFO("%s(%d,%d) new (decfg) queue device created\n",
|
||||
__func__, ac->id, dom);
|
||||
|
@ -35,9 +35,6 @@ MODULE_DESCRIPTION("s390 protected key interface");
|
||||
#define PROTKEYBLOBBUFSIZE 256 /* protected key buffer size used internal */
|
||||
#define MAXAPQNSINLIST 64 /* max 64 apqns within a apqn list */
|
||||
|
||||
/* mask of available pckmo subfunctions, fetched once at module init */
|
||||
static cpacf_mask_t pckmo_functions;
|
||||
|
||||
/*
|
||||
* debug feature data and functions
|
||||
*/
|
||||
@ -91,6 +88,9 @@ static int pkey_clr2protkey(u32 keytype,
|
||||
const struct pkey_clrkey *clrkey,
|
||||
struct pkey_protkey *protkey)
|
||||
{
|
||||
/* mask of available pckmo subfunctions */
|
||||
static cpacf_mask_t pckmo_functions;
|
||||
|
||||
long fc;
|
||||
int keysize;
|
||||
u8 paramblock[64];
|
||||
@ -114,11 +114,13 @@ static int pkey_clr2protkey(u32 keytype,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if the needed pckmo subfunction is available.
|
||||
* These subfunctions can be enabled/disabled by customers
|
||||
* in the LPAR profile or may even change on the fly.
|
||||
*/
|
||||
/* Did we already check for PCKMO ? */
|
||||
if (!pckmo_functions.bytes[0]) {
|
||||
/* no, so check now */
|
||||
if (!cpacf_query(CPACF_PCKMO, &pckmo_functions))
|
||||
return -ENODEV;
|
||||
}
|
||||
/* check for the pckmo subfunction we need now */
|
||||
if (!cpacf_test_func(&pckmo_functions, fc)) {
|
||||
DEBUG_ERR("%s pckmo functions not available\n", __func__);
|
||||
return -ENODEV;
|
||||
@ -2058,7 +2060,7 @@ static struct miscdevice pkey_dev = {
|
||||
*/
|
||||
static int __init pkey_init(void)
|
||||
{
|
||||
cpacf_mask_t kmc_functions;
|
||||
cpacf_mask_t func_mask;
|
||||
|
||||
/*
|
||||
* The pckmo instruction should be available - even if we don't
|
||||
@ -2066,15 +2068,15 @@ static int __init pkey_init(void)
|
||||
* is also the minimum level for the kmc instructions which
|
||||
* are able to work with protected keys.
|
||||
*/
|
||||
if (!cpacf_query(CPACF_PCKMO, &pckmo_functions))
|
||||
if (!cpacf_query(CPACF_PCKMO, &func_mask))
|
||||
return -ENODEV;
|
||||
|
||||
/* check for kmc instructions available */
|
||||
if (!cpacf_query(CPACF_KMC, &kmc_functions))
|
||||
if (!cpacf_query(CPACF_KMC, &func_mask))
|
||||
return -ENODEV;
|
||||
if (!cpacf_test_func(&kmc_functions, CPACF_KMC_PAES_128) ||
|
||||
!cpacf_test_func(&kmc_functions, CPACF_KMC_PAES_192) ||
|
||||
!cpacf_test_func(&kmc_functions, CPACF_KMC_PAES_256))
|
||||
if (!cpacf_test_func(&func_mask, CPACF_KMC_PAES_128) ||
|
||||
!cpacf_test_func(&func_mask, CPACF_KMC_PAES_192) ||
|
||||
!cpacf_test_func(&func_mask, CPACF_KMC_PAES_256))
|
||||
return -ENODEV;
|
||||
|
||||
pkey_debug_init();
|
||||
|
@ -157,11 +157,6 @@ int zcrypt_card_register(struct zcrypt_card *zc)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = sysfs_create_group(&zc->card->ap_dev.device.kobj,
|
||||
&zcrypt_card_attr_group);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
spin_lock(&zcrypt_list_lock);
|
||||
list_add_tail(&zc->list, &zcrypt_card_list);
|
||||
spin_unlock(&zcrypt_list_lock);
|
||||
@ -170,6 +165,14 @@ int zcrypt_card_register(struct zcrypt_card *zc)
|
||||
|
||||
ZCRYPT_DBF(DBF_INFO, "card=%02x register online=1\n", zc->card->id);
|
||||
|
||||
rc = sysfs_create_group(&zc->card->ap_dev.device.kobj,
|
||||
&zcrypt_card_attr_group);
|
||||
if (rc) {
|
||||
spin_lock(&zcrypt_list_lock);
|
||||
list_del_init(&zc->list);
|
||||
spin_unlock(&zcrypt_list_lock);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(zcrypt_card_register);
|
||||
|
@ -180,7 +180,6 @@ int zcrypt_queue_register(struct zcrypt_queue *zq)
|
||||
&zcrypt_queue_attr_group);
|
||||
if (rc)
|
||||
goto out;
|
||||
get_device(&zq->queue->ap_dev.device);
|
||||
|
||||
if (zq->ops->rng) {
|
||||
rc = zcrypt_rng_device_add();
|
||||
@ -192,7 +191,6 @@ int zcrypt_queue_register(struct zcrypt_queue *zq)
|
||||
out_unregister:
|
||||
sysfs_remove_group(&zq->queue->ap_dev.device.kobj,
|
||||
&zcrypt_queue_attr_group);
|
||||
put_device(&zq->queue->ap_dev.device);
|
||||
out:
|
||||
spin_lock(&zcrypt_list_lock);
|
||||
list_del_init(&zq->list);
|
||||
@ -220,12 +218,10 @@ void zcrypt_queue_unregister(struct zcrypt_queue *zq)
|
||||
list_del_init(&zq->list);
|
||||
zcrypt_device_count--;
|
||||
spin_unlock(&zcrypt_list_lock);
|
||||
zcrypt_card_put(zc);
|
||||
if (zq->ops->rng)
|
||||
zcrypt_rng_device_remove();
|
||||
sysfs_remove_group(&zq->queue->ap_dev.device.kobj,
|
||||
&zcrypt_queue_attr_group);
|
||||
put_device(&zq->queue->ap_dev.device);
|
||||
zcrypt_queue_put(zq);
|
||||
zcrypt_card_put(zc);
|
||||
}
|
||||
EXPORT_SYMBOL(zcrypt_queue_unregister);
|
||||
|
Loading…
Reference in New Issue
Block a user