提交 2ac3307f 编写于 作者: C Christian Ehrhardt 提交者: Martin Schwidefsky

[S390] fix dfp elf hwcap/facility bit detection

The old dfp detection wanted to check bit 43 (dfp high performance), but due
to a wrong calculation always used to check bit 42. Additionally the
"userspace expectation" is, that the dfp capability bit is set is if facility
bit 42 (decimal floating point facility available) and bit 44 (perform floating
point operation facility avail).
The patch fixes the bit calculation and extends the check to work like:
  elf hw cap dfp bit = facility bits 42 (dfp) & 44 (pfpo) available
Signed-off-by: NChristian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
上级 d0d3cdf4
...@@ -713,13 +713,15 @@ static void __init setup_hwcaps(void) ...@@ -713,13 +713,15 @@ static void __init setup_hwcaps(void)
* How many facility words are stored depends on the number of * How many facility words are stored depends on the number of
* doublewords passed to the instruction. The additional facilites * doublewords passed to the instruction. The additional facilites
* are: * are:
* Bit 43: decimal floating point facility is installed * Bit 42: decimal floating point facility is installed
* Bit 44: perform floating point operation facility is installed
* translated to: * translated to:
* HWCAP_S390_DFP bit 6. * HWCAP_S390_DFP bit 6.
*/ */
if ((elf_hwcap & (1UL << 2)) && if ((elf_hwcap & (1UL << 2)) &&
__stfle(&facility_list_extended, 1) > 0) { __stfle(&facility_list_extended, 1) > 0) {
if (facility_list_extended & (1ULL << (64 - 43))) if ((facility_list_extended & (1ULL << (63 - 42)))
&& (facility_list_extended & (1ULL << (63 - 44))))
elf_hwcap |= 1UL << 6; elf_hwcap |= 1UL << 6;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册