Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
9e40ade04c
17 changed files with 152 additions and 112 deletions
|
@ -3561,6 +3561,8 @@ P: Christoph Lameter
|
||||||
M: clameter@sgi.com
|
M: clameter@sgi.com
|
||||||
P: Pekka Enberg
|
P: Pekka Enberg
|
||||||
M: penberg@cs.helsinki.fi
|
M: penberg@cs.helsinki.fi
|
||||||
|
P: Matt Mackall
|
||||||
|
M: mpm@selenic.com
|
||||||
L: linux-mm@kvack.org
|
L: linux-mm@kvack.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
|
|
@ -232,7 +232,14 @@ config PGTABLE_4
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
|
if IA64_HP_SIM
|
||||||
|
config HZ
|
||||||
|
default 32
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !IA64_HP_SIM
|
||||||
source kernel/Kconfig.hz
|
source kernel/Kconfig.hz
|
||||||
|
endif
|
||||||
|
|
||||||
config IA64_BRL_EMU
|
config IA64_BRL_EMU
|
||||||
bool
|
bool
|
||||||
|
|
|
@ -40,7 +40,6 @@ struct split_state {
|
||||||
static int print_split(struct split_state *s)
|
static int print_split(struct split_state *s)
|
||||||
{
|
{
|
||||||
long i, expected, missed = 0;
|
long i, expected, missed = 0;
|
||||||
int printed = 0;
|
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
s->lpg = s->gpg = s->spg = s->exec = 0;
|
s->lpg = s->gpg = s->spg = s->exec = 0;
|
||||||
|
@ -53,12 +52,6 @@ static int print_split(struct split_state *s)
|
||||||
|
|
||||||
pte = lookup_address(addr, &level);
|
pte = lookup_address(addr, &level);
|
||||||
if (!pte) {
|
if (!pte) {
|
||||||
if (!printed) {
|
|
||||||
dump_pagetable(addr);
|
|
||||||
printk(KERN_INFO "CPA %lx no pte level %d\n",
|
|
||||||
addr, level);
|
|
||||||
printed = 1;
|
|
||||||
}
|
|
||||||
missed++;
|
missed++;
|
||||||
i++;
|
i++;
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -7,7 +7,7 @@ VDSO32-$(CONFIG_X86_32) := y
|
||||||
VDSO32-$(CONFIG_COMPAT) := y
|
VDSO32-$(CONFIG_COMPAT) := y
|
||||||
|
|
||||||
vdso-install-$(VDSO64-y) += vdso.so
|
vdso-install-$(VDSO64-y) += vdso.so
|
||||||
vdso-install-$(VDSO32-y) += $(vdso32-y:=.so)
|
vdso-install-$(VDSO32-y) += $(vdso32-images)
|
||||||
|
|
||||||
|
|
||||||
# files to link into the vdso
|
# files to link into the vdso
|
||||||
|
@ -63,6 +63,8 @@ vdso32.so-$(CONFIG_X86_32) += int80
|
||||||
vdso32.so-$(CONFIG_COMPAT) += syscall
|
vdso32.so-$(CONFIG_COMPAT) += syscall
|
||||||
vdso32.so-$(VDSO32-y) += sysenter
|
vdso32.so-$(VDSO32-y) += sysenter
|
||||||
|
|
||||||
|
vdso32-images = $(vdso32.so-y:%=vdso32-%.so)
|
||||||
|
|
||||||
CPPFLAGS_vdso32.lds = $(CPPFLAGS_vdso.lds)
|
CPPFLAGS_vdso32.lds = $(CPPFLAGS_vdso.lds)
|
||||||
VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
|
VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
|
||||||
|
|
||||||
|
@ -71,21 +73,21 @@ VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
|
||||||
override obj-dirs = $(dir $(obj)) $(obj)/vdso32/
|
override obj-dirs = $(dir $(obj)) $(obj)/vdso32/
|
||||||
|
|
||||||
targets += vdso32/vdso32.lds
|
targets += vdso32/vdso32.lds
|
||||||
targets += $(vdso32.so-y:%=vdso32-%.so.dbg) $(vdso32.so-y:%=vdso32-%.so)
|
targets += $(vdso32-images) $(vdso32-images:=.dbg)
|
||||||
targets += vdso32/note.o $(vdso32.so-y:%=vdso32/%.o)
|
targets += vdso32/note.o $(vdso32.so-y:%=vdso32/%.o)
|
||||||
|
|
||||||
extra-y += $(vdso32.so-y:%=vdso32-%.so)
|
extra-y += $(vdso32-images)
|
||||||
|
|
||||||
$(obj)/vdso32.o: $(vdso32.so-y:%=$(obj)/vdso32-%.so)
|
$(obj)/vdso32.o: $(vdso32-images:%=$(obj)/%)
|
||||||
|
|
||||||
KBUILD_AFLAGS_32 := $(filter-out -m64,$(KBUILD_AFLAGS))
|
KBUILD_AFLAGS_32 := $(filter-out -m64,$(KBUILD_AFLAGS))
|
||||||
$(vdso32.so-y:%=$(obj)/vdso32-%.so.dbg): KBUILD_AFLAGS = $(KBUILD_AFLAGS_32)
|
$(vdso32-images:%=$(obj)/%.dbg): KBUILD_AFLAGS = $(KBUILD_AFLAGS_32)
|
||||||
$(vdso32.so-y:%=$(obj)/vdso32-%.so.dbg): asflags-$(CONFIG_X86_64) += -m32
|
$(vdso32-images:%=$(obj)/%.dbg): asflags-$(CONFIG_X86_64) += -m32
|
||||||
|
|
||||||
$(vdso32.so-y:%=$(obj)/vdso32-%.so.dbg): $(obj)/vdso32-%.so.dbg: FORCE \
|
$(vdso32-images:%=$(obj)/%.dbg): $(obj)/vdso32-%.so.dbg: FORCE \
|
||||||
$(obj)/vdso32/vdso32.lds \
|
$(obj)/vdso32/vdso32.lds \
|
||||||
$(obj)/vdso32/note.o \
|
$(obj)/vdso32/note.o \
|
||||||
$(obj)/vdso32/%.o
|
$(obj)/vdso32/%.o
|
||||||
$(call if_changed,vdso)
|
$(call if_changed,vdso)
|
||||||
|
|
||||||
# Make vdso32-*-syms.lds from each image, and then make sure they match.
|
# Make vdso32-*-syms.lds from each image, and then make sure they match.
|
||||||
|
|
|
@ -673,11 +673,11 @@ static int __init acpi_wmi_init(void)
|
||||||
{
|
{
|
||||||
acpi_status result;
|
acpi_status result;
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&wmi_blocks.list);
|
||||||
|
|
||||||
if (acpi_disabled)
|
if (acpi_disabled)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&wmi_blocks.list);
|
|
||||||
|
|
||||||
result = acpi_bus_register_driver(&acpi_wmi_driver);
|
result = acpi_bus_register_driver(&acpi_wmi_driver);
|
||||||
|
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
|
|
|
@ -3048,6 +3048,8 @@ int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel)
|
||||||
static int ata_dev_set_mode(struct ata_device *dev)
|
static int ata_dev_set_mode(struct ata_device *dev)
|
||||||
{
|
{
|
||||||
struct ata_eh_context *ehc = &dev->link->eh_context;
|
struct ata_eh_context *ehc = &dev->link->eh_context;
|
||||||
|
const char *dev_err_whine = "";
|
||||||
|
int ign_dev_err = 0;
|
||||||
unsigned int err_mask;
|
unsigned int err_mask;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
@ -3057,41 +3059,57 @@ static int ata_dev_set_mode(struct ata_device *dev)
|
||||||
|
|
||||||
err_mask = ata_dev_set_xfermode(dev);
|
err_mask = ata_dev_set_xfermode(dev);
|
||||||
|
|
||||||
/* Old CFA may refuse this command, which is just fine */
|
if (err_mask & ~AC_ERR_DEV)
|
||||||
if (dev->xfer_shift == ATA_SHIFT_PIO && ata_id_is_cfa(dev->id))
|
goto fail;
|
||||||
err_mask &= ~AC_ERR_DEV;
|
|
||||||
|
|
||||||
/* Some very old devices and some bad newer ones fail any kind of
|
|
||||||
SET_XFERMODE request but support PIO0-2 timings and no IORDY */
|
|
||||||
if (dev->xfer_shift == ATA_SHIFT_PIO && !ata_id_has_iordy(dev->id) &&
|
|
||||||
dev->pio_mode <= XFER_PIO_2)
|
|
||||||
err_mask &= ~AC_ERR_DEV;
|
|
||||||
|
|
||||||
/* Early MWDMA devices do DMA but don't allow DMA mode setting.
|
|
||||||
Don't fail an MWDMA0 set IFF the device indicates it is in MWDMA0 */
|
|
||||||
if (dev->xfer_shift == ATA_SHIFT_MWDMA &&
|
|
||||||
dev->dma_mode == XFER_MW_DMA_0 &&
|
|
||||||
(dev->id[63] >> 8) & 1)
|
|
||||||
err_mask &= ~AC_ERR_DEV;
|
|
||||||
|
|
||||||
if (err_mask) {
|
|
||||||
ata_dev_printk(dev, KERN_ERR, "failed to set xfermode "
|
|
||||||
"(err_mask=0x%x)\n", err_mask);
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/* revalidate */
|
||||||
ehc->i.flags |= ATA_EHI_POST_SETMODE;
|
ehc->i.flags |= ATA_EHI_POST_SETMODE;
|
||||||
rc = ata_dev_revalidate(dev, ATA_DEV_UNKNOWN, 0);
|
rc = ata_dev_revalidate(dev, ATA_DEV_UNKNOWN, 0);
|
||||||
ehc->i.flags &= ~ATA_EHI_POST_SETMODE;
|
ehc->i.flags &= ~ATA_EHI_POST_SETMODE;
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
/* Old CFA may refuse this command, which is just fine */
|
||||||
|
if (dev->xfer_shift == ATA_SHIFT_PIO && ata_id_is_cfa(dev->id))
|
||||||
|
ign_dev_err = 1;
|
||||||
|
|
||||||
|
/* Some very old devices and some bad newer ones fail any kind of
|
||||||
|
SET_XFERMODE request but support PIO0-2 timings and no IORDY */
|
||||||
|
if (dev->xfer_shift == ATA_SHIFT_PIO && !ata_id_has_iordy(dev->id) &&
|
||||||
|
dev->pio_mode <= XFER_PIO_2)
|
||||||
|
ign_dev_err = 1;
|
||||||
|
|
||||||
|
/* Early MWDMA devices do DMA but don't allow DMA mode setting.
|
||||||
|
Don't fail an MWDMA0 set IFF the device indicates it is in MWDMA0 */
|
||||||
|
if (dev->xfer_shift == ATA_SHIFT_MWDMA &&
|
||||||
|
dev->dma_mode == XFER_MW_DMA_0 &&
|
||||||
|
(dev->id[63] >> 8) & 1)
|
||||||
|
ign_dev_err = 1;
|
||||||
|
|
||||||
|
/* if the device is actually configured correctly, ignore dev err */
|
||||||
|
if (dev->xfer_mode == ata_xfer_mask2mode(ata_id_xfermask(dev->id)))
|
||||||
|
ign_dev_err = 1;
|
||||||
|
|
||||||
|
if (err_mask & AC_ERR_DEV) {
|
||||||
|
if (!ign_dev_err)
|
||||||
|
goto fail;
|
||||||
|
else
|
||||||
|
dev_err_whine = " (device error ignored)";
|
||||||
|
}
|
||||||
|
|
||||||
DPRINTK("xfer_shift=%u, xfer_mode=0x%x\n",
|
DPRINTK("xfer_shift=%u, xfer_mode=0x%x\n",
|
||||||
dev->xfer_shift, (int)dev->xfer_mode);
|
dev->xfer_shift, (int)dev->xfer_mode);
|
||||||
|
|
||||||
ata_dev_printk(dev, KERN_INFO, "configured for %s\n",
|
ata_dev_printk(dev, KERN_INFO, "configured for %s%s\n",
|
||||||
ata_mode_string(ata_xfer_mode2mask(dev->xfer_mode)));
|
ata_mode_string(ata_xfer_mode2mask(dev->xfer_mode)),
|
||||||
|
dev_err_whine);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
ata_dev_printk(dev, KERN_ERR, "failed to set xfermode "
|
||||||
|
"(err_mask=0x%x)\n", err_mask);
|
||||||
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -772,7 +772,7 @@ static void __exit amd_exit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
MODULE_AUTHOR("Alan Cox");
|
MODULE_AUTHOR("Alan Cox");
|
||||||
MODULE_DESCRIPTION("low-level driver for AMD PATA IDE");
|
MODULE_DESCRIPTION("low-level driver for AMD and Nvidia PATA IDE");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_DEVICE_TABLE(pci, amd);
|
MODULE_DEVICE_TABLE(pci, amd);
|
||||||
MODULE_VERSION(DRV_VERSION);
|
MODULE_VERSION(DRV_VERSION);
|
||||||
|
|
|
@ -127,7 +127,7 @@ static int opti82c611a; /* Opti82c611A on primary 1, sec 2, both 3 */
|
||||||
static int opti82c46x; /* Opti 82c465MV present(pri/sec autodetect) */
|
static int opti82c46x; /* Opti 82c465MV present(pri/sec autodetect) */
|
||||||
static int qdi; /* Set to probe QDI controllers */
|
static int qdi; /* Set to probe QDI controllers */
|
||||||
static int winbond; /* Set to probe Winbond controllers,
|
static int winbond; /* Set to probe Winbond controllers,
|
||||||
give I/O port if non stdanard */
|
give I/O port if non standard */
|
||||||
static int autospeed; /* Chip present which snoops speed changes */
|
static int autospeed; /* Chip present which snoops speed changes */
|
||||||
static int pio_mask = 0x1F; /* PIO range for autospeed devices */
|
static int pio_mask = 0x1F; /* PIO range for autospeed devices */
|
||||||
static int iordy_mask = 0xFFFFFFFF; /* Use iordy if available */
|
static int iordy_mask = 0xFFFFFFFF; /* Use iordy if available */
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
* Base + 0x00 IRQ Status
|
* Base + 0x00 IRQ Status
|
||||||
* Base + 0x01 IRQ control
|
* Base + 0x01 IRQ control
|
||||||
* Base + 0x02 Chipset control
|
* Base + 0x02 Chipset control
|
||||||
|
* Base + 0x03 Unknown
|
||||||
* Base + 0x04 VDMA and reset control + wait bits
|
* Base + 0x04 VDMA and reset control + wait bits
|
||||||
* Base + 0x08 BMIMBA
|
* Base + 0x08 BMIMBA
|
||||||
* Base + 0x0C DMA Length
|
* Base + 0x0C DMA Length
|
||||||
|
@ -174,8 +175,12 @@ static int ninja32_init_one(struct pci_dev *dev, const struct pci_device_id *id)
|
||||||
ata_std_ports(&ap->ioaddr);
|
ata_std_ports(&ap->ioaddr);
|
||||||
|
|
||||||
iowrite8(0x05, base + 0x01); /* Enable interrupt lines */
|
iowrite8(0x05, base + 0x01); /* Enable interrupt lines */
|
||||||
iowrite8(0xB3, base + 0x02); /* Burst, ?? setup */
|
iowrite8(0xBE, base + 0x02); /* Burst, ?? setup */
|
||||||
iowrite8(0x00, base + 0x04); /* WAIT0 ? */
|
iowrite8(0x01, base + 0x03); /* Unknown */
|
||||||
|
iowrite8(0x20, base + 0x04); /* WAIT0 */
|
||||||
|
iowrite8(0x8f, base + 0x05); /* Unknown */
|
||||||
|
iowrite8(0xa4, base + 0x1c); /* Unknown */
|
||||||
|
iowrite8(0x83, base + 0x1d); /* BMDMA control: WAIT0 */
|
||||||
/* FIXME: Should we disable them at remove ? */
|
/* FIXME: Should we disable them at remove ? */
|
||||||
return ata_host_activate(host, dev->irq, ata_interrupt,
|
return ata_host_activate(host, dev->irq, ata_interrupt,
|
||||||
IRQF_SHARED, &ninja32_sht);
|
IRQF_SHARED, &ninja32_sht);
|
||||||
|
|
|
@ -84,6 +84,7 @@ enum {
|
||||||
VIA_BAD_ID = 0x100, /* Has wrong vendor ID (0x1107) */
|
VIA_BAD_ID = 0x100, /* Has wrong vendor ID (0x1107) */
|
||||||
VIA_BAD_AST = 0x200, /* Don't touch Address Setup Timing */
|
VIA_BAD_AST = 0x200, /* Don't touch Address Setup Timing */
|
||||||
VIA_NO_ENABLES = 0x400, /* Has no enablebits */
|
VIA_NO_ENABLES = 0x400, /* Has no enablebits */
|
||||||
|
VIA_SATA_PATA = 0x800, /* SATA/PATA combined configuration */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -100,7 +101,7 @@ static const struct via_isa_bridge {
|
||||||
{ "vx800", PCI_DEVICE_ID_VIA_VX800, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
{ "vx800", PCI_DEVICE_ID_VIA_VX800, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
||||||
{ "vt8237s", PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
{ "vt8237s", PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
||||||
{ "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
{ "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
||||||
{ "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
{ "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA },
|
||||||
{ "vt6410", PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES},
|
{ "vt6410", PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES},
|
||||||
{ "vt8237a", PCI_DEVICE_ID_VIA_8237A, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
{ "vt8237a", PCI_DEVICE_ID_VIA_8237A, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
||||||
{ "vt8237", PCI_DEVICE_ID_VIA_8237, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
{ "vt8237", PCI_DEVICE_ID_VIA_8237, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
|
||||||
|
@ -172,6 +173,9 @@ static int via_cable_detect(struct ata_port *ap) {
|
||||||
if (via_cable_override(pdev))
|
if (via_cable_override(pdev))
|
||||||
return ATA_CBL_PATA40_SHORT;
|
return ATA_CBL_PATA40_SHORT;
|
||||||
|
|
||||||
|
if ((config->flags & VIA_SATA_PATA) && ap->port_no == 0)
|
||||||
|
return ATA_CBL_SATA;
|
||||||
|
|
||||||
/* Early chips are 40 wire */
|
/* Early chips are 40 wire */
|
||||||
if ((config->flags & VIA_UDMA) < VIA_UDMA_66)
|
if ((config->flags & VIA_UDMA) < VIA_UDMA_66)
|
||||||
return ATA_CBL_PATA40;
|
return ATA_CBL_PATA40;
|
||||||
|
|
|
@ -1716,14 +1716,16 @@ static void mv_host_intr(struct ata_host *host, u32 relevant, unsigned int hc)
|
||||||
VPRINTK("ENTER, hc%u relevant=0x%08x HC IRQ cause=0x%08x\n",
|
VPRINTK("ENTER, hc%u relevant=0x%08x HC IRQ cause=0x%08x\n",
|
||||||
hc, relevant, hc_irq_cause);
|
hc, relevant, hc_irq_cause);
|
||||||
|
|
||||||
for (port = port0; port < port0 + last_port; port++) {
|
for (port = port0; port < last_port; port++) {
|
||||||
struct ata_port *ap = host->ports[port];
|
struct ata_port *ap = host->ports[port];
|
||||||
struct mv_port_priv *pp = ap->private_data;
|
struct mv_port_priv *pp;
|
||||||
int have_err_bits, hard_port, shift;
|
int have_err_bits, hard_port, shift;
|
||||||
|
|
||||||
if ((!ap) || (ap->flags & ATA_FLAG_DISABLED))
|
if ((!ap) || (ap->flags & ATA_FLAG_DISABLED))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
pp = ap->private_data;
|
||||||
|
|
||||||
shift = port << 1; /* (port * 2) */
|
shift = port << 1; /* (port * 2) */
|
||||||
if (port >= MV_PORTS_PER_HC) {
|
if (port >= MV_PORTS_PER_HC) {
|
||||||
shift++; /* skip bit 8 in the HC Main IRQ reg */
|
shift++; /* skip bit 8 in the HC Main IRQ reg */
|
||||||
|
@ -2879,6 +2881,26 @@ done:
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mv_create_dma_pools(struct mv_host_priv *hpriv, struct device *dev)
|
||||||
|
{
|
||||||
|
hpriv->crqb_pool = dmam_pool_create("crqb_q", dev, MV_CRQB_Q_SZ,
|
||||||
|
MV_CRQB_Q_SZ, 0);
|
||||||
|
if (!hpriv->crqb_pool)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
hpriv->crpb_pool = dmam_pool_create("crpb_q", dev, MV_CRPB_Q_SZ,
|
||||||
|
MV_CRPB_Q_SZ, 0);
|
||||||
|
if (!hpriv->crpb_pool)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
hpriv->sg_tbl_pool = dmam_pool_create("sg_tbl", dev, MV_SG_TBL_SZ,
|
||||||
|
MV_SG_TBL_SZ, 0);
|
||||||
|
if (!hpriv->sg_tbl_pool)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mv_platform_probe - handle a positive probe of an soc Marvell
|
* mv_platform_probe - handle a positive probe of an soc Marvell
|
||||||
* host
|
* host
|
||||||
|
@ -2932,6 +2954,10 @@ static int mv_platform_probe(struct platform_device *pdev)
|
||||||
hpriv->base = ioremap(res->start, res->end - res->start + 1);
|
hpriv->base = ioremap(res->start, res->end - res->start + 1);
|
||||||
hpriv->base -= MV_SATAHC0_REG_BASE;
|
hpriv->base -= MV_SATAHC0_REG_BASE;
|
||||||
|
|
||||||
|
rc = mv_create_dma_pools(hpriv, &pdev->dev);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
|
||||||
/* initialize adapter */
|
/* initialize adapter */
|
||||||
rc = mv_init_host(host, chip_soc);
|
rc = mv_init_host(host, chip_soc);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
@ -3068,26 +3094,6 @@ static void mv_print_info(struct ata_host *host)
|
||||||
scc_s, (MV_HP_FLAG_MSI & hpriv->hp_flags) ? "MSI" : "INTx");
|
scc_s, (MV_HP_FLAG_MSI & hpriv->hp_flags) ? "MSI" : "INTx");
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mv_create_dma_pools(struct mv_host_priv *hpriv, struct device *dev)
|
|
||||||
{
|
|
||||||
hpriv->crqb_pool = dmam_pool_create("crqb_q", dev, MV_CRQB_Q_SZ,
|
|
||||||
MV_CRQB_Q_SZ, 0);
|
|
||||||
if (!hpriv->crqb_pool)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
hpriv->crpb_pool = dmam_pool_create("crpb_q", dev, MV_CRPB_Q_SZ,
|
|
||||||
MV_CRPB_Q_SZ, 0);
|
|
||||||
if (!hpriv->crpb_pool)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
hpriv->sg_tbl_pool = dmam_pool_create("sg_tbl", dev, MV_SG_TBL_SZ,
|
|
||||||
MV_SG_TBL_SZ, 0);
|
|
||||||
if (!hpriv->sg_tbl_pool)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mv_pci_init_one - handle a positive probe of a PCI Marvell host
|
* mv_pci_init_one - handle a positive probe of a PCI Marvell host
|
||||||
* @pdev: PCI device found
|
* @pdev: PCI device found
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/bitmap.h>
|
#include <linux/bitmap.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/vmalloc.h>
|
||||||
|
|
||||||
#include "mlx4.h"
|
#include "mlx4.h"
|
||||||
|
|
||||||
|
|
|
@ -30,19 +30,19 @@
|
||||||
/* Other architectures wishing to use this simple topology API should fill
|
/* Other architectures wishing to use this simple topology API should fill
|
||||||
in the below functions as appropriate in their own <asm/topology.h> file. */
|
in the below functions as appropriate in their own <asm/topology.h> file. */
|
||||||
#ifndef cpu_to_node
|
#ifndef cpu_to_node
|
||||||
#define cpu_to_node(cpu) (0)
|
#define cpu_to_node(cpu) ((void)(cpu),0)
|
||||||
#endif
|
#endif
|
||||||
#ifndef parent_node
|
#ifndef parent_node
|
||||||
#define parent_node(node) (0)
|
#define parent_node(node) ((void)(node),0)
|
||||||
#endif
|
#endif
|
||||||
#ifndef node_to_cpumask
|
#ifndef node_to_cpumask
|
||||||
#define node_to_cpumask(node) (cpu_online_map)
|
#define node_to_cpumask(node) ((void)node, cpu_online_map)
|
||||||
#endif
|
#endif
|
||||||
#ifndef node_to_first_cpu
|
#ifndef node_to_first_cpu
|
||||||
#define node_to_first_cpu(node) (0)
|
#define node_to_first_cpu(node) ((void)(node),0)
|
||||||
#endif
|
#endif
|
||||||
#ifndef pcibus_to_node
|
#ifndef pcibus_to_node
|
||||||
#define pcibus_to_node(node) (-1)
|
#define pcibus_to_node(bus) ((void)(bus), -1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef pcibus_to_cpumask
|
#ifndef pcibus_to_cpumask
|
||||||
|
|
|
@ -19,15 +19,7 @@
|
||||||
#define MAXHOSTNAMELEN 64 /* max length of hostname */
|
#define MAXHOSTNAMELEN 64 /* max length of hostname */
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
# ifdef CONFIG_IA64_HP_SIM
|
# define HZ CONFIG_HZ
|
||||||
/*
|
|
||||||
* Yeah, simulating stuff is slow, so let us catch some breath between
|
|
||||||
* timer interrupts...
|
|
||||||
*/
|
|
||||||
# define HZ 32
|
|
||||||
# else
|
|
||||||
# define HZ CONFIG_HZ
|
|
||||||
# endif
|
|
||||||
# define USER_HZ HZ
|
# define USER_HZ HZ
|
||||||
# define CLOCKS_PER_SEC HZ /* frequency at which times() counts */
|
# define CLOCKS_PER_SEC HZ /* frequency at which times() counts */
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -26,8 +26,6 @@ extern nodemask_t cpuset_mems_allowed(struct task_struct *p);
|
||||||
#define cpuset_current_mems_allowed (current->mems_allowed)
|
#define cpuset_current_mems_allowed (current->mems_allowed)
|
||||||
void cpuset_init_current_mems_allowed(void);
|
void cpuset_init_current_mems_allowed(void);
|
||||||
void cpuset_update_task_memory_state(void);
|
void cpuset_update_task_memory_state(void);
|
||||||
#define cpuset_nodes_subset_current_mems_allowed(nodes) \
|
|
||||||
nodes_subset((nodes), current->mems_allowed)
|
|
||||||
int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl);
|
int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl);
|
||||||
|
|
||||||
extern int __cpuset_zone_allowed_softwall(struct zone *z, gfp_t gfp_mask);
|
extern int __cpuset_zone_allowed_softwall(struct zone *z, gfp_t gfp_mask);
|
||||||
|
@ -103,7 +101,6 @@ static inline nodemask_t cpuset_mems_allowed(struct task_struct *p)
|
||||||
#define cpuset_current_mems_allowed (node_states[N_HIGH_MEMORY])
|
#define cpuset_current_mems_allowed (node_states[N_HIGH_MEMORY])
|
||||||
static inline void cpuset_init_current_mems_allowed(void) {}
|
static inline void cpuset_init_current_mems_allowed(void) {}
|
||||||
static inline void cpuset_update_task_memory_state(void) {}
|
static inline void cpuset_update_task_memory_state(void) {}
|
||||||
#define cpuset_nodes_subset_current_mems_allowed(nodes) (1)
|
|
||||||
|
|
||||||
static inline int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl)
|
static inline int cpuset_zonelist_valid_mems_allowed(struct zonelist *zl)
|
||||||
{
|
{
|
||||||
|
|
|
@ -989,6 +989,8 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
|
||||||
int i;
|
int i;
|
||||||
unsigned int vm_flags;
|
unsigned int vm_flags;
|
||||||
|
|
||||||
|
if (len <= 0)
|
||||||
|
return 0;
|
||||||
/*
|
/*
|
||||||
* Require read or write permissions.
|
* Require read or write permissions.
|
||||||
* If 'force' is set, we only require the "MAY" flags.
|
* If 'force' is set, we only require the "MAY" flags.
|
||||||
|
|
|
@ -116,22 +116,51 @@ static void mpol_rebind_policy(struct mempolicy *pol,
|
||||||
/* Do sanity checking on a policy */
|
/* Do sanity checking on a policy */
|
||||||
static int mpol_check_policy(int mode, nodemask_t *nodes)
|
static int mpol_check_policy(int mode, nodemask_t *nodes)
|
||||||
{
|
{
|
||||||
int empty = nodes_empty(*nodes);
|
int was_empty, is_empty;
|
||||||
|
|
||||||
|
if (!nodes)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "Contextualize" the in-coming nodemast for cpusets:
|
||||||
|
* Remember whether in-coming nodemask was empty, If not,
|
||||||
|
* restrict the nodes to the allowed nodes in the cpuset.
|
||||||
|
* This is guaranteed to be a subset of nodes with memory.
|
||||||
|
*/
|
||||||
|
cpuset_update_task_memory_state();
|
||||||
|
is_empty = was_empty = nodes_empty(*nodes);
|
||||||
|
if (!was_empty) {
|
||||||
|
nodes_and(*nodes, *nodes, cpuset_current_mems_allowed);
|
||||||
|
is_empty = nodes_empty(*nodes); /* after "contextualization" */
|
||||||
|
}
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case MPOL_DEFAULT:
|
case MPOL_DEFAULT:
|
||||||
if (!empty)
|
/*
|
||||||
|
* require caller to specify an empty nodemask
|
||||||
|
* before "contextualization"
|
||||||
|
*/
|
||||||
|
if (!was_empty)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
break;
|
break;
|
||||||
case MPOL_BIND:
|
case MPOL_BIND:
|
||||||
case MPOL_INTERLEAVE:
|
case MPOL_INTERLEAVE:
|
||||||
/* Preferred will only use the first bit, but allow
|
/*
|
||||||
more for now. */
|
* require at least 1 valid node after "contextualization"
|
||||||
if (empty)
|
*/
|
||||||
|
if (is_empty)
|
||||||
|
return -EINVAL;
|
||||||
|
break;
|
||||||
|
case MPOL_PREFERRED:
|
||||||
|
/*
|
||||||
|
* Did caller specify invalid nodes?
|
||||||
|
* Don't silently accept this as "local allocation".
|
||||||
|
*/
|
||||||
|
if (!was_empty && is_empty)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return nodes_subset(*nodes, node_states[N_HIGH_MEMORY]) ? 0 : -EINVAL;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Generate a custom zonelist for the BIND policy. */
|
/* Generate a custom zonelist for the BIND policy. */
|
||||||
|
@ -188,8 +217,6 @@ static struct mempolicy *mpol_new(int mode, nodemask_t *nodes)
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case MPOL_INTERLEAVE:
|
case MPOL_INTERLEAVE:
|
||||||
policy->v.nodes = *nodes;
|
policy->v.nodes = *nodes;
|
||||||
nodes_and(policy->v.nodes, policy->v.nodes,
|
|
||||||
node_states[N_HIGH_MEMORY]);
|
|
||||||
if (nodes_weight(policy->v.nodes) == 0) {
|
if (nodes_weight(policy->v.nodes) == 0) {
|
||||||
kmem_cache_free(policy_cache, policy);
|
kmem_cache_free(policy_cache, policy);
|
||||||
return ERR_PTR(-EINVAL);
|
return ERR_PTR(-EINVAL);
|
||||||
|
@ -421,18 +448,6 @@ static int mbind_range(struct vm_area_struct *vma, unsigned long start,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int contextualize_policy(int mode, nodemask_t *nodes)
|
|
||||||
{
|
|
||||||
if (!nodes)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
cpuset_update_task_memory_state();
|
|
||||||
if (!cpuset_nodes_subset_current_mems_allowed(*nodes))
|
|
||||||
return -EINVAL;
|
|
||||||
return mpol_check_policy(mode, nodes);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update task->flags PF_MEMPOLICY bit: set iff non-default
|
* Update task->flags PF_MEMPOLICY bit: set iff non-default
|
||||||
* mempolicy. Allows more rapid checking of this (combined perhaps
|
* mempolicy. Allows more rapid checking of this (combined perhaps
|
||||||
|
@ -468,7 +483,7 @@ static long do_set_mempolicy(int mode, nodemask_t *nodes)
|
||||||
{
|
{
|
||||||
struct mempolicy *new;
|
struct mempolicy *new;
|
||||||
|
|
||||||
if (contextualize_policy(mode, nodes))
|
if (mpol_check_policy(mode, nodes))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
new = mpol_new(mode, nodes);
|
new = mpol_new(mode, nodes);
|
||||||
if (IS_ERR(new))
|
if (IS_ERR(new))
|
||||||
|
@ -915,10 +930,6 @@ asmlinkage long sys_mbind(unsigned long start, unsigned long len,
|
||||||
err = get_nodes(&nodes, nmask, maxnode);
|
err = get_nodes(&nodes, nmask, maxnode);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
#ifdef CONFIG_CPUSETS
|
|
||||||
/* Restrict the nodes to the allowed nodes in the cpuset */
|
|
||||||
nodes_and(nodes, nodes, current->mems_allowed);
|
|
||||||
#endif
|
|
||||||
return do_mbind(start, len, mode, &nodes, flags);
|
return do_mbind(start, len, mode, &nodes, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue