Robert, Patch applied, Thanks.
On Thu, Jun 19, 2008 at 4:04 PM, Robert Richter <[EMAIL PROTECTED]> wrote: > This patch removes the workaround to access the Extended Config Space > that is needed to setup IBS interrupts. PCI functions are replaced by > standard PCI functions that support now ECS access. > > Signed-off-by: Robert Richter <[EMAIL PROTECTED]> > --- > arch/x86/pci/common.c | 1 - > arch/x86/perfmon/perfmon_amd64.c | 100 +------------------------------------ > 2 files changed, 3 insertions(+), 98 deletions(-) > > diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c > index 3e11f47..940185e 100644 > --- a/arch/x86/pci/common.c > +++ b/arch/x86/pci/common.c > @@ -76,7 +76,6 @@ int pcibios_scanned; > * configuration space. > */ > DEFINE_SPINLOCK(pci_config_lock); > -EXPORT_SYMBOL(pci_config_lock); > > static int __devinit can_skip_ioresource_align(const struct dmi_system_id *d) > { > diff --git a/arch/x86/perfmon/perfmon_amd64.c > b/arch/x86/perfmon/perfmon_amd64.c > index 20bafd2..7a9de2e 100644 > --- a/arch/x86/perfmon/perfmon_amd64.c > +++ b/arch/x86/perfmon/perfmon_amd64.c > @@ -140,106 +140,12 @@ static struct pfm_context *pfm_nb_task_owner; > > static struct pfm_pmu_config pfm_amd64_pmu_conf; > > -/* Functions for accessing extended PCI config space. Can be removed > - when Kernel API exists. */ > -extern spinlock_t pci_config_lock; > - > -#define PCI_CONF1_ADDRESS(bus, devfn, reg) \ > - (0x80000000 | ((reg & 0xF00) << 16) | ((bus & 0xFF) << 16) \ > - | (devfn << 8) | (reg & 0xFC)) > - > #define is_ibs_pmc(x) (x == 4 || x == 5) > > -static int pci_read(unsigned int seg, unsigned int bus, > - unsigned int devfn, int reg, int len, u32 *value) > -{ > - unsigned long flags; > - > - if ((bus > 255) || (devfn > 255) || (reg > 4095)) { > - *value = -1; > - return -EINVAL; > - } > - > - spin_lock_irqsave(&pci_config_lock, flags); > - > - outl(PCI_CONF1_ADDRESS(bus, devfn, reg), 0xCF8); > - > - switch (len) { > - case 1: > - *value = inb(0xCFC + (reg & 3)); > - break; > - case 2: > - *value = inw(0xCFC + (reg & 2)); > - break; > - case 4: > - *value = inl(0xCFC); > - break; > - } > - > - spin_unlock_irqrestore(&pci_config_lock, flags); > - > - return 0; > -} > - > -static int pci_write(unsigned int seg, unsigned int bus, > - unsigned int devfn, int reg, int len, u32 value) > -{ > - unsigned long flags; > - > - if ((bus > 255) || (devfn > 255) || (reg > 4095)) > - return -EINVAL; > - > - spin_lock_irqsave(&pci_config_lock, flags); > - > - outl(PCI_CONF1_ADDRESS(bus, devfn, reg), 0xCF8); > - > - switch (len) { > - case 1: > - outb((u8)value, 0xCFC + (reg & 3)); > - break; > - case 2: > - outw((u16)value, 0xCFC + (reg & 2)); > - break; > - case 4: > - outl((u32)value, 0xCFC); > - break; > - } > - > - spin_unlock_irqrestore(&pci_config_lock, flags); > - > - return 0; > -} > - > -static inline int > -pci_read_ext_config_dword(struct pci_dev *dev, int where, u32 *val) > -{ > - return pci_read(0, dev->bus->number, dev->devfn, where, 4, val); > -} > - > -static inline int > -pci_write_ext_config_dword(struct pci_dev *dev, int where, u32 val) > -{ > - return pci_write(0, dev->bus->number, dev->devfn, where, 4, val); > -} > - > -static void pfm_amd64_enable_pci_ecs_per_cpu(void) > -{ > -#define ENABLE_CF8_EXT_CFG (1ULL << 46) > - u64 reg; > - /* enable PCI extended config space */ > - rdmsrl(MSR_AMD64_NB_CFG, reg); > - if (reg & ENABLE_CF8_EXT_CFG) > - return; > - reg |= ENABLE_CF8_EXT_CFG; > - wrmsrl(MSR_AMD64_NB_CFG, reg); > -} > - > static void pfm_amd64_setup_eilvt_per_cpu(void *info) > { > u8 lvt_off; > > - pfm_amd64_enable_pci_ecs_per_cpu(); > - > /* program the IBS vector to the perfmon vector */ > lvt_off = setup_APIC_eilvt_ibs(LOCAL_PERFMON_VECTOR, > APIC_EILVT_MSG_FIX, 0); > @@ -267,9 +173,9 @@ static int pfm_amd64_setup_eilvt(void) > if (!cpu_cfg) > break; > ++nodes; > - pci_write_ext_config_dword(cpu_cfg, IBSCTL, ibs_eilvt_off > - | IBSCTL_LVTOFFSETVAL); > - pci_read_ext_config_dword(cpu_cfg, IBSCTL, &value); > + pci_write_config_dword(cpu_cfg, IBSCTL, ibs_eilvt_off > + | IBSCTL_LVTOFFSETVAL); > + pci_read_config_dword(cpu_cfg, IBSCTL, &value); > if (value != (ibs_eilvt_off | IBSCTL_LVTOFFSETVAL)) { > PFM_DBG("Failed to setup IBS LVT offset, " > "IBSCTL = 0x%08x", value); > -- > 1.5.5.4 > > > ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ perfmon2-devel mailing list perfmon2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perfmon2-devel