From a9ee0c6dc26c5bb8907c95964f50942c6334fd81 Mon Sep 17 00:00:00 2001 From: Menno Lageman Date: Tue, 2 May 2017 05:53:53 -0400 Subject: [PATCH] sparc64: set the ISCNTRLD bit for SP service handles Service handles generated by the ds driver can collide with service handles generated by the SP, causing failures with Domain Services on the SP such as 'ldom_req_sp_token: set-token failed: no reply' errors. Ensure that service handles generated by the ds driver do not collide with service handles generated by the SP by setting the ISCNTRLD bit in the lower half of the service handle for SP Domain Services. This is similar to what Solaris does. Orabug: 25983868 Signed-off-by: Menno Lageman Reviewed-by: Liam Merwick Reviewed-by: Aaron Young Signed-off-by: Shannon Nelson --- arch/sparc/kernel/ds.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/sparc/kernel/ds.c b/arch/sparc/kernel/ds.c index 0493d825d938..f9ad22767615 100644 --- a/arch/sparc/kernel/ds.c +++ b/arch/sparc/kernel/ds.c @@ -2389,6 +2389,13 @@ static u64 ds_get_new_service_handle(struct ds_dev *ds, bool is_client) if (is_client) handle |= DS_HDL_ISCLIENT_BIT; + /* + * Set the ISCNTRLD bit for SP services to ensure the handle doesn't + * collide with a GM-generated handle. + */ + if (ds->handle == DS_SP_DMN_HANDLE) + handle |= DS_HDL_ISCNTRLD_BIT; + return handle; } -- 2.50.1