Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: Revert "x86: default to reboot via ACPI" x86: align DirectMap in /proc/meminfo AMD IOMMU: fix lazy IO/TLB flushing in unmap path x86: add smp_mb() before sending INVALIDATE_TLB_VECTOR x86: remove VISWS and PARAVIRT around NR_IRQS puzzle x86: mention ACPI in top-level Kconfig menu x86: size NR_IRQS on 32-bit systems the same way as 64-bit x86: don't allow nr_irqs > NR_IRQS x86/docs: remove noirqbalance param docs x86: don't use tsc_khz to calculate lpj if notsc is passed x86, voyager: fix smp_intr_init() compile breakage AMD IOMMU: fix detection of NP capable IOMMUs
This commit is contained in:
commit
a15a82f42c
13 changed files with 40 additions and 35 deletions
|
@ -1472,8 +1472,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
Valid arguments: on, off
|
||||
Default: on
|
||||
|
||||
noirqbalance [X86-32,SMP,KNL] Disable kernel irq balancing
|
||||
|
||||
noirqdebug [X86-32] Disables the code which attempts to detect and
|
||||
disable unhandled interrupt sources.
|
||||
|
||||
|
|
|
@ -1494,7 +1494,7 @@ config HAVE_ARCH_EARLY_PFN_TO_NID
|
|||
def_bool X86_64
|
||||
depends on NUMA
|
||||
|
||||
menu "Power management options"
|
||||
menu "Power management and ACPI options"
|
||||
depends on !X86_VOYAGER
|
||||
|
||||
config ARCH_HIBERNATION_HEADER
|
||||
|
|
|
@ -101,30 +101,22 @@
|
|||
#define LAST_VM86_IRQ 15
|
||||
#define invalid_vm86_irq(irq) ((irq) < 3 || (irq) > 15)
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
#if defined(CONFIG_X86_IO_APIC) && !defined(CONFIG_X86_VOYAGER)
|
||||
# if NR_CPUS < MAX_IO_APICS
|
||||
# define NR_IRQS (NR_VECTORS + (32 * NR_CPUS))
|
||||
# else
|
||||
# define NR_IRQS (NR_VECTORS + (32 * MAX_IO_APICS))
|
||||
# endif
|
||||
|
||||
#elif !defined(CONFIG_X86_VOYAGER)
|
||||
|
||||
# if defined(CONFIG_X86_IO_APIC) || defined(CONFIG_PARAVIRT) || defined(CONFIG_X86_VISWS)
|
||||
|
||||
# define NR_IRQS 224
|
||||
|
||||
# else /* IO_APIC || PARAVIRT */
|
||||
|
||||
# define NR_IRQS 16
|
||||
|
||||
# endif
|
||||
|
||||
#else /* !VISWS && !VOYAGER */
|
||||
#elif defined(CONFIG_X86_VOYAGER)
|
||||
|
||||
# define NR_IRQS 224
|
||||
|
||||
#endif /* VISWS */
|
||||
#else /* IO_APIC || VOYAGER */
|
||||
|
||||
# define NR_IRQS 16
|
||||
|
||||
#endif
|
||||
|
||||
/* Voyager specific defines */
|
||||
/* These define the CPIs we use in linux */
|
||||
|
|
|
@ -520,6 +520,7 @@ extern void voyager_restart(void);
|
|||
extern void voyager_cat_power_off(void);
|
||||
extern void voyager_cat_do_common_interrupt(void);
|
||||
extern void voyager_handle_nmi(void);
|
||||
extern void voyager_smp_intr_init(void);
|
||||
/* Commands for the following are */
|
||||
#define VOYAGER_PSI_READ 0
|
||||
#define VOYAGER_PSI_WRITE 1
|
||||
|
|
|
@ -50,7 +50,7 @@ static int dma_ops_unity_map(struct dma_ops_domain *dma_dom,
|
|||
/* returns !0 if the IOMMU is caching non-present entries in its TLB */
|
||||
static int iommu_has_npcache(struct amd_iommu *iommu)
|
||||
{
|
||||
return iommu->cap & IOMMU_CAP_NPCACHE;
|
||||
return iommu->cap & (1UL << IOMMU_CAP_NPCACHE);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -536,6 +536,9 @@ static void dma_ops_free_addresses(struct dma_ops_domain *dom,
|
|||
{
|
||||
address >>= PAGE_SHIFT;
|
||||
iommu_area_free(dom->bitmap, address, pages);
|
||||
|
||||
if (address + pages >= dom->next_bit)
|
||||
dom->need_flush = true;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -992,8 +995,10 @@ static void __unmap_single(struct amd_iommu *iommu,
|
|||
|
||||
dma_ops_free_addresses(dma_dom, dma_addr, pages);
|
||||
|
||||
if (amd_iommu_unmap_flush)
|
||||
if (amd_iommu_unmap_flush || dma_dom->need_flush) {
|
||||
iommu_flush_pages(iommu, dma_dom->domain.id, dma_addr, size);
|
||||
dma_dom->need_flush = false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -3611,6 +3611,8 @@ int __init probe_nr_irqs(void)
|
|||
/* something wrong ? */
|
||||
if (nr < nr_min)
|
||||
nr = nr_min;
|
||||
if (WARN_ON(nr > NR_IRQS))
|
||||
nr = NR_IRQS;
|
||||
|
||||
return nr;
|
||||
}
|
||||
|
|
|
@ -29,11 +29,7 @@ EXPORT_SYMBOL(pm_power_off);
|
|||
|
||||
static const struct desc_ptr no_idt = {};
|
||||
static int reboot_mode;
|
||||
/*
|
||||
* Keyboard reset and triple fault may result in INIT, not RESET, which
|
||||
* doesn't work when we're in vmx root mode. Try ACPI first.
|
||||
*/
|
||||
enum reboot_type reboot_type = BOOT_ACPI;
|
||||
enum reboot_type reboot_type = BOOT_KBD;
|
||||
int reboot_force;
|
||||
|
||||
#if defined(CONFIG_X86_32) && defined(CONFIG_SMP)
|
||||
|
|
|
@ -154,6 +154,12 @@ void native_flush_tlb_others(const cpumask_t *cpumaskp, struct mm_struct *mm,
|
|||
flush_mm = mm;
|
||||
flush_va = va;
|
||||
cpus_or(flush_cpumask, cpumask, flush_cpumask);
|
||||
|
||||
/*
|
||||
* Make the above memory operations globally visible before
|
||||
* sending the IPI.
|
||||
*/
|
||||
smp_mb();
|
||||
/*
|
||||
* We have to send the IPI only to
|
||||
* CPUs affected.
|
||||
|
|
|
@ -182,6 +182,11 @@ void native_flush_tlb_others(const cpumask_t *cpumaskp, struct mm_struct *mm,
|
|||
f->flush_va = va;
|
||||
cpus_or(f->flush_cpumask, cpumask, f->flush_cpumask);
|
||||
|
||||
/*
|
||||
* Make the above memory operations globally visible before
|
||||
* sending the IPI.
|
||||
*/
|
||||
smp_mb();
|
||||
/*
|
||||
* We have to send the IPI only to
|
||||
* CPUs affected.
|
||||
|
|
|
@ -813,10 +813,6 @@ void __init tsc_init(void)
|
|||
cpu_khz = calibrate_cpu();
|
||||
#endif
|
||||
|
||||
lpj = ((u64)tsc_khz * 1000);
|
||||
do_div(lpj, HZ);
|
||||
lpj_fine = lpj;
|
||||
|
||||
printk("Detected %lu.%03lu MHz processor.\n",
|
||||
(unsigned long)cpu_khz / 1000,
|
||||
(unsigned long)cpu_khz % 1000);
|
||||
|
@ -836,6 +832,10 @@ void __init tsc_init(void)
|
|||
/* now allow native_sched_clock() to use rdtsc */
|
||||
tsc_disabled = 0;
|
||||
|
||||
lpj = ((u64)tsc_khz * 1000);
|
||||
do_div(lpj, HZ);
|
||||
lpj_fine = lpj;
|
||||
|
||||
use_tsc_delay();
|
||||
/* Check and install the TSC clocksource */
|
||||
dmi_check_system(bad_tsc_dmi_table);
|
||||
|
|
|
@ -27,7 +27,7 @@ static struct irqaction irq2 = {
|
|||
void __init intr_init_hook(void)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
smp_intr_init();
|
||||
voyager_smp_intr_init();
|
||||
#endif
|
||||
|
||||
setup_irq(2, &irq2);
|
||||
|
|
|
@ -1258,7 +1258,7 @@ static void handle_vic_irq(unsigned int irq, struct irq_desc *desc)
|
|||
#define QIC_SET_GATE(cpi, vector) \
|
||||
set_intr_gate((cpi) + QIC_DEFAULT_CPI_BASE, (vector))
|
||||
|
||||
void __init smp_intr_init(void)
|
||||
void __init voyager_smp_intr_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
|
@ -67,18 +67,18 @@ static void split_page_count(int level)
|
|||
|
||||
void arch_report_meminfo(struct seq_file *m)
|
||||
{
|
||||
seq_printf(m, "DirectMap4k: %8lu kB\n",
|
||||
seq_printf(m, "DirectMap4k: %8lu kB\n",
|
||||
direct_pages_count[PG_LEVEL_4K] << 2);
|
||||
#if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
|
||||
seq_printf(m, "DirectMap2M: %8lu kB\n",
|
||||
seq_printf(m, "DirectMap2M: %8lu kB\n",
|
||||
direct_pages_count[PG_LEVEL_2M] << 11);
|
||||
#else
|
||||
seq_printf(m, "DirectMap4M: %8lu kB\n",
|
||||
seq_printf(m, "DirectMap4M: %8lu kB\n",
|
||||
direct_pages_count[PG_LEVEL_2M] << 12);
|
||||
#endif
|
||||
#ifdef CONFIG_X86_64
|
||||
if (direct_gbpages)
|
||||
seq_printf(m, "DirectMap1G: %8lu kB\n",
|
||||
seq_printf(m, "DirectMap1G: %8lu kB\n",
|
||||
direct_pages_count[PG_LEVEL_1G] << 20);
|
||||
#endif
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue