Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a77d2e08 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'x86-apic-for-linus' of...

Merge branch 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (30 commits)
  x86, apic: Enable lapic nmi watchdog on AMD Family 11h
  x86: Remove unnecessary mdelay() from cpu_disable_common()
  x86, ioapic: Document another case when level irq is seen as an edge
  x86, ioapic: Fix the EOI register detection mechanism
  x86, io-apic: Move the effort of clearing remoteIRR explicitly before migrating the irq
  x86: SGI UV: Map low MMR ranges
  x86: apic: Print out SRAT table APIC id in hex
  x86: Re-get cfg_new in case reuse/move irq_desc
  x86: apic: Remove not needed #ifdef
  x86: io-apic: IO-APIC MMIO should not fail on resource insertion
  x86: Remove asm/apicnum.h
  x86: apic: Do not use stacked physid_mask_t
  x86, apic: Get rid of apicid_to_cpu_present assign on 64-bit
  x86, ioapic: Use snrpintf while set names for IO-APIC resourses
  x86, apic: Use PAGE_SIZE instead of numbers
  x86: Remove local_irq_enable()/local_irq_disable() in fixup_irqs()
  x86: Use EOI register in io-apic on intel platforms
  x86: Force irq complete move during cpu offline
  x86: Remove move_cleanup_count from irq_cfg
  x86, intr-remap: Avoid irq_chip mask/unmask in fixup_irqs() for intr-remapping
  ...
parents 897e81be 7d1849af
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -344,6 +344,15 @@ and is between 256 and 4096 characters. It is defined in the file
			Change the amount of debugging information output
			Change the amount of debugging information output
			when initialising the APIC and IO-APIC components.
			when initialising the APIC and IO-APIC components.


	show_lapic=	[APIC,X86] Advanced Programmable Interrupt Controller
			Limit apic dumping. The parameter defines the maximal
			number of local apics being dumped. Also it is possible
			to set it to "all" by meaning -- no limit here.
			Format: { 1 (default) | 2 | ... | all }.
			The parameter valid if only apic=debug or
			apic=verbose is specified.
			Example: apic=debug show_lapic=all

	apm=		[APM] Advanced Power Management
	apm=		[APM] Advanced Power Management
			See header of arch/x86/kernel/apm_32.c.
			See header of arch/x86/kernel/apm_32.c.


+9 −12
Original line number Original line Diff line number Diff line
@@ -297,20 +297,20 @@ struct apic {
	int disable_esr;
	int disable_esr;


	int dest_logical;
	int dest_logical;
	unsigned long (*check_apicid_used)(physid_mask_t bitmap, int apicid);
	unsigned long (*check_apicid_used)(physid_mask_t *map, int apicid);
	unsigned long (*check_apicid_present)(int apicid);
	unsigned long (*check_apicid_present)(int apicid);


	void (*vector_allocation_domain)(int cpu, struct cpumask *retmask);
	void (*vector_allocation_domain)(int cpu, struct cpumask *retmask);
	void (*init_apic_ldr)(void);
	void (*init_apic_ldr)(void);


	physid_mask_t (*ioapic_phys_id_map)(physid_mask_t map);
	void (*ioapic_phys_id_map)(physid_mask_t *phys_map, physid_mask_t *retmap);


	void (*setup_apic_routing)(void);
	void (*setup_apic_routing)(void);
	int (*multi_timer_check)(int apic, int irq);
	int (*multi_timer_check)(int apic, int irq);
	int (*apicid_to_node)(int logical_apicid);
	int (*apicid_to_node)(int logical_apicid);
	int (*cpu_to_logical_apicid)(int cpu);
	int (*cpu_to_logical_apicid)(int cpu);
	int (*cpu_present_to_apicid)(int mps_cpu);
	int (*cpu_present_to_apicid)(int mps_cpu);
	physid_mask_t (*apicid_to_cpu_present)(int phys_apicid);
	void (*apicid_to_cpu_present)(int phys_apicid, physid_mask_t *retmap);
	void (*setup_portio_remap)(void);
	void (*setup_portio_remap)(void);
	int (*check_phys_apicid_present)(int phys_apicid);
	int (*check_phys_apicid_present)(int phys_apicid);
	void (*enable_apic_mode)(void);
	void (*enable_apic_mode)(void);
@@ -488,6 +488,8 @@ static inline unsigned int read_apic_id(void)


extern void default_setup_apic_routing(void);
extern void default_setup_apic_routing(void);


extern struct apic apic_noop;

#ifdef CONFIG_X86_32
#ifdef CONFIG_X86_32


extern struct apic apic_default;
extern struct apic apic_default;
@@ -532,9 +534,9 @@ default_cpu_mask_to_apicid_and(const struct cpumask *cpumask,
	return (unsigned int)(mask1 & mask2 & mask3);
	return (unsigned int)(mask1 & mask2 & mask3);
}
}


static inline unsigned long default_check_apicid_used(physid_mask_t bitmap, int apicid)
static inline unsigned long default_check_apicid_used(physid_mask_t *map, int apicid)
{
{
	return physid_isset(apicid, bitmap);
	return physid_isset(apicid, *map);
}
}


static inline unsigned long default_check_apicid_present(int bit)
static inline unsigned long default_check_apicid_present(int bit)
@@ -542,9 +544,9 @@ static inline unsigned long default_check_apicid_present(int bit)
	return physid_isset(bit, phys_cpu_present_map);
	return physid_isset(bit, phys_cpu_present_map);
}
}


static inline physid_mask_t default_ioapic_phys_id_map(physid_mask_t phys_map)
static inline void default_ioapic_phys_id_map(physid_mask_t *phys_map, physid_mask_t *retmap)
{
{
	return phys_map;
	*retmap = *phys_map;
}
}


/* Mapping from cpu number to logical apicid */
/* Mapping from cpu number to logical apicid */
@@ -583,11 +585,6 @@ extern int default_cpu_present_to_apicid(int mps_cpu);
extern int default_check_phys_apicid_present(int phys_apicid);
extern int default_check_phys_apicid_present(int phys_apicid);
#endif
#endif


static inline physid_mask_t default_apicid_to_cpu_present(int phys_apicid)
{
	return physid_mask_of_physid(phys_apicid);
}

#endif /* CONFIG_X86_LOCAL_APIC */
#endif /* CONFIG_X86_LOCAL_APIC */


#ifdef CONFIG_X86_32
#ifdef CONFIG_X86_32
+6 −0
Original line number Original line Diff line number Diff line
@@ -11,6 +11,12 @@
#define IO_APIC_DEFAULT_PHYS_BASE	0xfec00000
#define IO_APIC_DEFAULT_PHYS_BASE	0xfec00000
#define	APIC_DEFAULT_PHYS_BASE		0xfee00000
#define	APIC_DEFAULT_PHYS_BASE		0xfee00000


/*
 * This is the IO-APIC register space as specified
 * by Intel docs:
 */
#define IO_APIC_SLOT_SIZE		1024

#define	APIC_ID		0x20
#define	APIC_ID		0x20


#define	APIC_LVR	0x30
#define	APIC_LVR	0x30

arch/x86/include/asm/apicnum.h

deleted100644 → 0
+0 −12
Original line number Original line Diff line number Diff line
#ifndef _ASM_X86_APICNUM_H
#define _ASM_X86_APICNUM_H

/* define MAX_IO_APICS */
#ifdef CONFIG_X86_32
# define MAX_IO_APICS 64
#else
# define MAX_IO_APICS 128
# define MAX_LOCAL_APIC 32768
#endif

#endif /* _ASM_X86_APICNUM_H */
+24 −6
Original line number Original line Diff line number Diff line
@@ -85,8 +85,26 @@ static inline void set_io_apic_irq_attr(struct io_apic_irq_attr *irq_attr,
	irq_attr->polarity	= polarity;
	irq_attr->polarity	= polarity;
}
}


extern int IO_APIC_get_PCI_irq_vector(int bus, int devfn, int pin,
/*
					struct io_apic_irq_attr *irq_attr);
 * This is performance-critical, we want to do it O(1)
 *
 * Most irqs are mapped 1:1 with pins.
 */
struct irq_cfg {
	struct irq_pin_list	*irq_2_pin;
	cpumask_var_t		domain;
	cpumask_var_t		old_domain;
	u8			vector;
	u8			move_in_progress : 1;
};

extern struct irq_cfg *irq_cfg(unsigned int);
extern int assign_irq_vector(int, struct irq_cfg *, const struct cpumask *);
extern void send_cleanup_vector(struct irq_cfg *);

struct irq_desc;
extern unsigned int set_desc_affinity(struct irq_desc *, const struct cpumask *);
extern int IO_APIC_get_PCI_irq_vector(int bus, int devfn, int pin, struct io_apic_irq_attr *irq_attr);
extern void setup_ioapic_dest(void);
extern void setup_ioapic_dest(void);


extern void enable_IO_APIC(void);
extern void enable_IO_APIC(void);
Loading