diff options
| -rw-r--r-- | arch/x86/kernel/i387.c | 15 | ||||
| -rw-r--r-- | arch/x86/kernel/quirks.c | 2 |
2 files changed, 13 insertions, 4 deletions
diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c index e8368c6dd2a2..d5dd80814419 100644 --- a/arch/x86/kernel/i387.c +++ b/arch/x86/kernel/i387.c | |||
| @@ -86,10 +86,19 @@ EXPORT_SYMBOL(__kernel_fpu_begin); | |||
| 86 | 86 | ||
| 87 | void __kernel_fpu_end(void) | 87 | void __kernel_fpu_end(void) |
| 88 | { | 88 | { |
| 89 | if (use_eager_fpu()) | 89 | if (use_eager_fpu()) { |
| 90 | math_state_restore(); | 90 | /* |
| 91 | else | 91 | * For eager fpu, most the time, tsk_used_math() is true. |
| 92 | * Restore the user math as we are done with the kernel usage. | ||
| 93 | * At few instances during thread exit, signal handling etc, | ||
| 94 | * tsk_used_math() is false. Those few places will take proper | ||
| 95 | * actions, so we don't need to restore the math here. | ||
| 96 | */ | ||
| 97 | if (likely(tsk_used_math(current))) | ||
| 98 | math_state_restore(); | ||
| 99 | } else { | ||
| 92 | stts(); | 100 | stts(); |
| 101 | } | ||
| 93 | } | 102 | } |
| 94 | EXPORT_SYMBOL(__kernel_fpu_end); | 103 | EXPORT_SYMBOL(__kernel_fpu_end); |
| 95 | 104 | ||
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c index 7c6acd4b8995..ff898bbf579d 100644 --- a/arch/x86/kernel/quirks.c +++ b/arch/x86/kernel/quirks.c | |||
| @@ -529,7 +529,7 @@ static void quirk_amd_nb_node(struct pci_dev *dev) | |||
| 529 | return; | 529 | return; |
| 530 | 530 | ||
| 531 | pci_read_config_dword(nb_ht, 0x60, &val); | 531 | pci_read_config_dword(nb_ht, 0x60, &val); |
| 532 | node = val & 7; | 532 | node = pcibus_to_node(dev->bus) | (val & 7); |
| 533 | /* | 533 | /* |
| 534 | * Some hardware may return an invalid node ID, | 534 | * Some hardware may return an invalid node ID, |
| 535 | * so check it first: | 535 | * so check it first: |
