s390/zcrypt: enable AP bus scan without a valid default domain
[ Upstream commit1c472d4628] The AP bus scan is aborted before doing anything worth mentioning if ap_select_domain() fails, e.g. if the ap_rights.aqm mask is all zeros. As the result of this the ap bus fails to manage (e.g. create and register) devices like it is supposed to. Let us make ap_scan_bus() work even if ap_select_domain() can't select a default domain. Let's also make ap_select_domain() return void, as there are no more callers interested in its return value. Signed-off-by: Halil Pasic <pasic@linux.ibm.com> Reported-by: Michael Mueller <mimu@linux.ibm.com> Fixes:7e0bdbe5c2"s390/zcrypt: AP bus support for alternate driver(s)" [freude@linux.ibm.com: title and patch header slightly modified] Signed-off-by: Harald Freudenberger <freude@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
5e9923e85e
commit
3d510bdf35
1 changed files with 6 additions and 12 deletions
|
|
@ -1223,11 +1223,10 @@ static struct bus_attribute *const ap_bus_attrs[] = {
|
|||
};
|
||||
|
||||
/**
|
||||
* ap_select_domain(): Select an AP domain.
|
||||
*
|
||||
* Pick one of the 16 AP domains.
|
||||
* ap_select_domain(): Select an AP domain if possible and we haven't
|
||||
* already done so before.
|
||||
*/
|
||||
static int ap_select_domain(void)
|
||||
static void ap_select_domain(void)
|
||||
{
|
||||
int count, max_count, best_domain;
|
||||
struct ap_queue_status status;
|
||||
|
|
@ -1242,7 +1241,7 @@ static int ap_select_domain(void)
|
|||
if (ap_domain_index >= 0) {
|
||||
/* Domain has already been selected. */
|
||||
spin_unlock_bh(&ap_domain_lock);
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
best_domain = -1;
|
||||
max_count = 0;
|
||||
|
|
@ -1269,11 +1268,8 @@ static int ap_select_domain(void)
|
|||
if (best_domain >= 0) {
|
||||
ap_domain_index = best_domain;
|
||||
AP_DBF(DBF_DEBUG, "new ap_domain_index=%d\n", ap_domain_index);
|
||||
spin_unlock_bh(&ap_domain_lock);
|
||||
return 0;
|
||||
}
|
||||
spin_unlock_bh(&ap_domain_lock);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -1351,8 +1347,7 @@ static void ap_scan_bus(struct work_struct *unused)
|
|||
AP_DBF(DBF_DEBUG, "%s running\n", __func__);
|
||||
|
||||
ap_query_configuration(ap_configuration);
|
||||
if (ap_select_domain() != 0)
|
||||
goto out;
|
||||
ap_select_domain();
|
||||
|
||||
for (id = 0; id < AP_DEVICES; id++) {
|
||||
/* check if device is registered */
|
||||
|
|
@ -1468,12 +1463,11 @@ static void ap_scan_bus(struct work_struct *unused)
|
|||
}
|
||||
} /* end device loop */
|
||||
|
||||
if (defdomdevs < 1)
|
||||
if (ap_domain_index >= 0 && defdomdevs < 1)
|
||||
AP_DBF(DBF_INFO,
|
||||
"no queue device with default domain %d available\n",
|
||||
ap_domain_index);
|
||||
|
||||
out:
|
||||
mod_timer(&ap_config_timer, jiffies + ap_config_time * HZ);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue