update to 2.6.25-rc8-git8
no new conflicts, bunch of small fixes. svn path=/dists/trunk/linux-2.6/; revision=11071
This commit is contained in:
parent
6ed94fea65
commit
6153429a4c
|
@ -614,6 +614,40 @@ index 8590a95..0000000
|
|||
-
|
||||
-
|
||||
-***End of Readme File***
|
||||
diff --git a/Documentation/spi/spi-summary b/Documentation/spi/spi-summary
|
||||
index 8861e47..6d5f181 100644
|
||||
--- a/Documentation/spi/spi-summary
|
||||
+++ b/Documentation/spi/spi-summary
|
||||
@@ -116,6 +116,13 @@ low order bit. So when a chip's timing diagram shows the clock
|
||||
starting low (CPOL=0) and data stabilized for sampling during the
|
||||
trailing clock edge (CPHA=1), that's SPI mode 1.
|
||||
|
||||
+Note that the clock mode is relevant as soon as the chipselect goes
|
||||
+active. So the master must set the clock to inactive before selecting
|
||||
+a slave, and the slave can tell the chosen polarity by sampling the
|
||||
+clock level when its select line goes active. That's why many devices
|
||||
+support for example both modes 0 and 3: they don't care about polarity,
|
||||
+and alway clock data in/out on rising clock edges.
|
||||
+
|
||||
|
||||
How do these driver programming interfaces work?
|
||||
------------------------------------------------
|
||||
@@ -379,8 +386,14 @@ any more such messages.
|
||||
+ when bidirectional reads and writes start ... by how its
|
||||
sequence of spi_transfer requests is arranged;
|
||||
|
||||
+ + which I/O buffers are used ... each spi_transfer wraps a
|
||||
+ buffer for each transfer direction, supporting full duplex
|
||||
+ (two pointers, maybe the same one in both cases) and half
|
||||
+ duplex (one pointer is NULL) transfers;
|
||||
+
|
||||
+ optionally defining short delays after transfers ... using
|
||||
- the spi_transfer.delay_usecs setting;
|
||||
+ the spi_transfer.delay_usecs setting (this delay can be the
|
||||
+ only protocol effect, if the buffer length is zero);
|
||||
|
||||
+ whether the chipselect becomes inactive after a transfer and
|
||||
any delay ... by using the spi_transfer.cs_change flag;
|
||||
diff --git a/Documentation/unaligned-memory-access.txt b/Documentation/unaligned-memory-access.txt
|
||||
index 6223eac..b0472ac 100644
|
||||
--- a/Documentation/unaligned-memory-access.txt
|
||||
|
@ -17240,6 +17274,50 @@ index a0f000b..ae24919 100644
|
|||
}
|
||||
|
||||
void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep, pte_t orig)
|
||||
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
|
||||
index 45d79ea..5fed98c 100644
|
||||
--- a/arch/x86/kernel/alternative.c
|
||||
+++ b/arch/x86/kernel/alternative.c
|
||||
@@ -65,7 +65,8 @@ __setup("noreplace-paravirt", setup_noreplace_paravirt);
|
||||
get them easily into strings. */
|
||||
asm("\t.section .rodata, \"a\"\nintelnops: "
|
||||
GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6
|
||||
- GENERIC_NOP7 GENERIC_NOP8);
|
||||
+ GENERIC_NOP7 GENERIC_NOP8
|
||||
+ "\t.previous");
|
||||
extern const unsigned char intelnops[];
|
||||
static const unsigned char *const intel_nops[ASM_NOP_MAX+1] = {
|
||||
NULL,
|
||||
@@ -83,7 +84,8 @@ static const unsigned char *const intel_nops[ASM_NOP_MAX+1] = {
|
||||
#ifdef K8_NOP1
|
||||
asm("\t.section .rodata, \"a\"\nk8nops: "
|
||||
K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6
|
||||
- K8_NOP7 K8_NOP8);
|
||||
+ K8_NOP7 K8_NOP8
|
||||
+ "\t.previous");
|
||||
extern const unsigned char k8nops[];
|
||||
static const unsigned char *const k8_nops[ASM_NOP_MAX+1] = {
|
||||
NULL,
|
||||
@@ -101,7 +103,8 @@ static const unsigned char *const k8_nops[ASM_NOP_MAX+1] = {
|
||||
#ifdef K7_NOP1
|
||||
asm("\t.section .rodata, \"a\"\nk7nops: "
|
||||
K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6
|
||||
- K7_NOP7 K7_NOP8);
|
||||
+ K7_NOP7 K7_NOP8
|
||||
+ "\t.previous");
|
||||
extern const unsigned char k7nops[];
|
||||
static const unsigned char *const k7_nops[ASM_NOP_MAX+1] = {
|
||||
NULL,
|
||||
@@ -119,7 +122,8 @@ static const unsigned char *const k7_nops[ASM_NOP_MAX+1] = {
|
||||
#ifdef P6_NOP1
|
||||
asm("\t.section .rodata, \"a\"\np6nops: "
|
||||
P6_NOP1 P6_NOP2 P6_NOP3 P6_NOP4 P6_NOP5 P6_NOP6
|
||||
- P6_NOP7 P6_NOP8);
|
||||
+ P6_NOP7 P6_NOP8
|
||||
+ "\t.previous");
|
||||
extern const unsigned char p6nops[];
|
||||
static const unsigned char *const p6_nops[ASM_NOP_MAX+1] = {
|
||||
NULL,
|
||||
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
|
||||
index 027e5c0..170d2f5 100644
|
||||
--- a/arch/x86/kernel/cpu/bugs.c
|
||||
|
@ -17687,6 +17765,32 @@ index 2feb0f2..b63b633 100644
|
|||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
|
||||
index 36a68fa..a825b43 100644
|
||||
--- a/drivers/acpi/processor_core.c
|
||||
+++ b/drivers/acpi/processor_core.c
|
||||
@@ -822,7 +822,7 @@ static int acpi_processor_remove(struct acpi_device *device, int type)
|
||||
}
|
||||
|
||||
processors[pr->id] = NULL;
|
||||
-
|
||||
+ processor_device_array[pr->id] = NULL;
|
||||
kfree(pr);
|
||||
|
||||
return 0;
|
||||
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
|
||||
index c4e00ac..1bcecc7 100644
|
||||
--- a/drivers/acpi/thermal.c
|
||||
+++ b/drivers/acpi/thermal.c
|
||||
@@ -1125,7 +1125,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
|
||||
tz->trips.active[i].flags.valid; i++, trips++);
|
||||
tz->thermal_zone = thermal_zone_device_register("ACPI thermal zone",
|
||||
trips, tz, &acpi_thermal_zone_ops);
|
||||
- if (!tz->thermal_zone)
|
||||
+ if (IS_ERR(tz->thermal_zone))
|
||||
return -ENODEV;
|
||||
|
||||
result = sysfs_create_link(&tz->device->dev.kobj,
|
||||
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
|
||||
index 12fb44f..980a741 100644
|
||||
--- a/drivers/acpi/video.c
|
||||
|
@ -17852,11 +17956,41 @@ index 8786455..ce830fe 100644
|
|||
|
||||
.freeze = ata_bmdma_freeze,
|
||||
.thaw = ata_bmdma_thaw,
|
||||
diff --git a/drivers/ata/pata_sil680.c b/drivers/ata/pata_sil680.c
|
||||
index 3988e44..7c5b2dd 100644
|
||||
--- a/drivers/ata/pata_sil680.c
|
||||
+++ b/drivers/ata/pata_sil680.c
|
||||
@@ -270,7 +270,7 @@ static u8 sil680_init_chip(struct pci_dev *pdev, int *try_mmio)
|
||||
tmpbyte & 1, tmpbyte & 0x30);
|
||||
|
||||
*try_mmio = 0;
|
||||
-#ifdef CONFIG_PPC
|
||||
+#ifdef CONFIG_PPC_MERGE
|
||||
if (machine_is(cell))
|
||||
*try_mmio = (tmpbyte & 1) || pci_resource_start(pdev, 5);
|
||||
#endif
|
||||
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
|
||||
index 07791a7..4c19855 100644
|
||||
index 07791a7..9d1e3ca 100644
|
||||
--- a/drivers/ata/sata_fsl.c
|
||||
+++ b/drivers/ata/sata_fsl.c
|
||||
@@ -1348,10 +1348,7 @@ static int sata_fsl_remove(struct of_device *ofdev)
|
||||
@@ -1256,7 +1256,6 @@ static int sata_fsl_probe(struct of_device *ofdev,
|
||||
void __iomem *ssr_base = NULL;
|
||||
void __iomem *csr_base = NULL;
|
||||
struct sata_fsl_host_priv *host_priv = NULL;
|
||||
- struct resource *r;
|
||||
int irq;
|
||||
struct ata_host *host;
|
||||
|
||||
@@ -1266,8 +1265,6 @@ static int sata_fsl_probe(struct of_device *ofdev,
|
||||
dev_printk(KERN_INFO, &ofdev->dev,
|
||||
"Sata FSL Platform/CSB Driver init\n");
|
||||
|
||||
- r = kmalloc(sizeof(struct resource), GFP_KERNEL);
|
||||
-
|
||||
hcr_base = of_iomap(ofdev->node, 0);
|
||||
if (!hcr_base)
|
||||
goto error_exit_with_cleanup;
|
||||
@@ -1348,10 +1345,7 @@ static int sata_fsl_remove(struct of_device *ofdev)
|
||||
|
||||
static struct of_device_id fsl_sata_match[] = {
|
||||
{
|
||||
|
@ -17955,6 +18089,116 @@ index b53fdb0..60cc543 100644
|
|||
/* Allow interception of SIGKILL only
|
||||
* Don't allow other signals to interrupt the transmission */
|
||||
siginitsetinv(&blocked, sigmask(SIGKILL));
|
||||
diff --git a/drivers/block/ub.c b/drivers/block/ub.c
|
||||
index c452e2d..27bfe72 100644
|
||||
--- a/drivers/block/ub.c
|
||||
+++ b/drivers/block/ub.c
|
||||
@@ -8,6 +8,7 @@
|
||||
* and is not licensed separately. See file COPYING for details.
|
||||
*
|
||||
* TODO (sorted by decreasing priority)
|
||||
+ * -- Return sense now that rq allows it (we always auto-sense anyway).
|
||||
* -- set readonly flag for CDs, set removable flag for CF readers
|
||||
* -- do inquiry and verify we got a disk and not a tape (for LUN mismatch)
|
||||
* -- verify the 13 conditions and do bulk resets
|
||||
@@ -359,7 +360,8 @@ static void ub_cmd_build_block(struct ub_dev *sc, struct ub_lun *lun,
|
||||
static void ub_cmd_build_packet(struct ub_dev *sc, struct ub_lun *lun,
|
||||
struct ub_scsi_cmd *cmd, struct ub_request *urq);
|
||||
static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
|
||||
-static void ub_end_rq(struct request *rq, unsigned int status);
|
||||
+static void ub_end_rq(struct request *rq, unsigned int status,
|
||||
+ unsigned int cmd_len);
|
||||
static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun,
|
||||
struct ub_request *urq, struct ub_scsi_cmd *cmd);
|
||||
static int ub_submit_scsi(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
|
||||
@@ -642,13 +644,13 @@ static int ub_request_fn_1(struct ub_lun *lun, struct request *rq)
|
||||
|
||||
if (atomic_read(&sc->poison)) {
|
||||
blkdev_dequeue_request(rq);
|
||||
- ub_end_rq(rq, DID_NO_CONNECT << 16);
|
||||
+ ub_end_rq(rq, DID_NO_CONNECT << 16, blk_rq_bytes(rq));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (lun->changed && !blk_pc_request(rq)) {
|
||||
blkdev_dequeue_request(rq);
|
||||
- ub_end_rq(rq, SAM_STAT_CHECK_CONDITION);
|
||||
+ ub_end_rq(rq, SAM_STAT_CHECK_CONDITION, blk_rq_bytes(rq));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -701,7 +703,7 @@ static int ub_request_fn_1(struct ub_lun *lun, struct request *rq)
|
||||
|
||||
drop:
|
||||
ub_put_cmd(lun, cmd);
|
||||
- ub_end_rq(rq, DID_ERROR << 16);
|
||||
+ ub_end_rq(rq, DID_ERROR << 16, blk_rq_bytes(rq));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -770,6 +772,7 @@ static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
|
||||
struct ub_request *urq = cmd->back;
|
||||
struct request *rq;
|
||||
unsigned int scsi_status;
|
||||
+ unsigned int cmd_len;
|
||||
|
||||
rq = urq->rq;
|
||||
|
||||
@@ -779,8 +782,18 @@ static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
|
||||
rq->data_len = 0;
|
||||
else
|
||||
rq->data_len -= cmd->act_len;
|
||||
+ scsi_status = 0;
|
||||
+ } else {
|
||||
+ if (cmd->act_len != cmd->len) {
|
||||
+ if ((cmd->key == MEDIUM_ERROR ||
|
||||
+ cmd->key == UNIT_ATTENTION) &&
|
||||
+ ub_rw_cmd_retry(sc, lun, urq, cmd) == 0)
|
||||
+ return;
|
||||
+ scsi_status = SAM_STAT_CHECK_CONDITION;
|
||||
+ } else {
|
||||
+ scsi_status = 0;
|
||||
+ }
|
||||
}
|
||||
- scsi_status = 0;
|
||||
} else {
|
||||
if (blk_pc_request(rq)) {
|
||||
/* UB_SENSE_SIZE is smaller than SCSI_SENSE_BUFFERSIZE */
|
||||
@@ -801,14 +814,17 @@ static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
|
||||
|
||||
urq->rq = NULL;
|
||||
|
||||
+ cmd_len = cmd->len;
|
||||
ub_put_cmd(lun, cmd);
|
||||
- ub_end_rq(rq, scsi_status);
|
||||
+ ub_end_rq(rq, scsi_status, cmd_len);
|
||||
blk_start_queue(lun->disk->queue);
|
||||
}
|
||||
|
||||
-static void ub_end_rq(struct request *rq, unsigned int scsi_status)
|
||||
+static void ub_end_rq(struct request *rq, unsigned int scsi_status,
|
||||
+ unsigned int cmd_len)
|
||||
{
|
||||
int error;
|
||||
+ long rqlen;
|
||||
|
||||
if (scsi_status == 0) {
|
||||
error = 0;
|
||||
@@ -816,8 +832,12 @@ static void ub_end_rq(struct request *rq, unsigned int scsi_status)
|
||||
error = -EIO;
|
||||
rq->errors = scsi_status;
|
||||
}
|
||||
- if (__blk_end_request(rq, error, blk_rq_bytes(rq)))
|
||||
- BUG();
|
||||
+ rqlen = blk_rq_bytes(rq); /* Oddly enough, this is the residue. */
|
||||
+ if (__blk_end_request(rq, error, cmd_len)) {
|
||||
+ printk(KERN_WARNING DRV_NAME
|
||||
+ ": __blk_end_request blew, %s-cmd total %u rqlen %ld\n",
|
||||
+ blk_pc_request(rq)? "pc": "fs", cmd_len, rqlen);
|
||||
+ }
|
||||
}
|
||||
|
||||
static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun,
|
||||
diff --git a/drivers/char/drm/i915_drv.h b/drivers/char/drm/i915_drv.h
|
||||
index c10d128..675d88b 100644
|
||||
--- a/drivers/char/drm/i915_drv.h
|
||||
|
@ -18813,6 +19057,30 @@ index 47794d2..0080452 100644
|
|||
default:
|
||||
sleep:
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
index d072e87..458d477 100644
|
||||
--- a/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
|
||||
@@ -1763,6 +1763,7 @@ static void cfi_amdstd_sync (struct mtd_info *mtd)
|
||||
|
||||
default:
|
||||
/* Not an idle state */
|
||||
+ set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
add_wait_queue(&chip->wq, &wait);
|
||||
|
||||
spin_unlock(chip->mutex);
|
||||
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c
|
||||
index b344ff8..492e2ab 100644
|
||||
--- a/drivers/mtd/chips/cfi_cmdset_0020.c
|
||||
+++ b/drivers/mtd/chips/cfi_cmdset_0020.c
|
||||
@@ -1015,6 +1015,7 @@ static void cfi_staa_sync (struct mtd_info *mtd)
|
||||
|
||||
default:
|
||||
/* Not an idle state */
|
||||
+ set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
add_wait_queue(&chip->wq, &wait);
|
||||
|
||||
spin_unlock_bh(chip->mutex);
|
||||
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
|
||||
index fe7b5ec..3a0b20a 100644
|
||||
--- a/drivers/net/Kconfig
|
||||
|
@ -21248,6 +21516,55 @@ index d57bf3e..430997e 100644
|
|||
/* set interrupts back the way they were */
|
||||
UART_PUT_IER(port, imr);
|
||||
}
|
||||
diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
|
||||
index d853fce..6635e15 100644
|
||||
--- a/drivers/spi/spi_bfin5xx.c
|
||||
+++ b/drivers/spi/spi_bfin5xx.c
|
||||
@@ -713,8 +713,8 @@ static void pump_transfers(unsigned long data)
|
||||
} else {
|
||||
drv_data->len = transfer->len;
|
||||
}
|
||||
- dev_dbg(&drv_data->pdev->dev, "transfer: ",
|
||||
- "drv_data->write is %p, chip->write is %p, null_wr is %p\n",
|
||||
+ dev_dbg(&drv_data->pdev->dev,
|
||||
+ "transfer: drv_data->write is %p, chip->write is %p, null_wr is %p\n",
|
||||
drv_data->write, chip->write, null_writer);
|
||||
|
||||
/* speed and width has been set on per message */
|
||||
@@ -1294,6 +1294,12 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev)
|
||||
goto out_error_queue_alloc;
|
||||
}
|
||||
|
||||
+ status = peripheral_request_list(drv_data->pin_req, DRV_NAME);
|
||||
+ if (status != 0) {
|
||||
+ dev_err(&pdev->dev, ": Requesting Peripherals failed\n");
|
||||
+ goto out_error_queue_alloc;
|
||||
+ }
|
||||
+
|
||||
/* Register with the SPI framework */
|
||||
platform_set_drvdata(pdev, drv_data);
|
||||
status = spi_register_master(master);
|
||||
@@ -1302,12 +1308,6 @@ static int __init bfin5xx_spi_probe(struct platform_device *pdev)
|
||||
goto out_error_queue_alloc;
|
||||
}
|
||||
|
||||
- status = peripheral_request_list(drv_data->pin_req, DRV_NAME);
|
||||
- if (status != 0) {
|
||||
- dev_err(&pdev->dev, ": Requesting Peripherals failed\n");
|
||||
- goto out_error;
|
||||
- }
|
||||
-
|
||||
dev_info(dev, "%s, Version %s, regs_base@%p, dma channel@%d\n",
|
||||
DRV_DESC, DRV_VERSION, drv_data->regs_base,
|
||||
drv_data->dma_channel);
|
||||
@@ -1319,7 +1319,6 @@ out_error_no_dma_ch:
|
||||
iounmap((void *) drv_data->regs_base);
|
||||
out_error_ioremap:
|
||||
out_error_get_res:
|
||||
-out_error:
|
||||
spi_master_put(master);
|
||||
|
||||
return status;
|
||||
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
|
||||
index 40e8240..4e065e5 100644
|
||||
--- a/drivers/usb/host/ehci-hub.c
|
||||
|
@ -21544,6 +21861,34 @@ index 79e19e5..a8e7797 100644
|
|||
inode->i_ino, in->numextents, inode->i_mode);
|
||||
#endif
|
||||
|
||||
diff --git a/fs/nfs/file.c b/fs/nfs/file.c
|
||||
index ef57a5a..5d2e9d9 100644
|
||||
--- a/fs/nfs/file.c
|
||||
+++ b/fs/nfs/file.c
|
||||
@@ -64,7 +64,11 @@ const struct file_operations nfs_file_operations = {
|
||||
.write = do_sync_write,
|
||||
.aio_read = nfs_file_read,
|
||||
.aio_write = nfs_file_write,
|
||||
+#ifdef CONFIG_MMU
|
||||
.mmap = nfs_file_mmap,
|
||||
+#else
|
||||
+ .mmap = generic_file_mmap,
|
||||
+#endif
|
||||
.open = nfs_file_open,
|
||||
.flush = nfs_file_flush,
|
||||
.release = nfs_file_release,
|
||||
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
|
||||
index a4c7cf2..6f88d7c 100644
|
||||
--- a/fs/nfs/inode.c
|
||||
+++ b/fs/nfs/inode.c
|
||||
@@ -506,6 +506,7 @@ static struct nfs_open_context *alloc_nfs_open_context(struct vfsmount *mnt, str
|
||||
ctx->cred = get_rpccred(cred);
|
||||
ctx->state = NULL;
|
||||
ctx->lockowner = current->files;
|
||||
+ ctx->flags = 0;
|
||||
ctx->error = 0;
|
||||
ctx->dir_cookie = 0;
|
||||
atomic_set(&ctx->count, 1);
|
||||
diff --git a/fs/splice.c b/fs/splice.c
|
||||
index 0670c91..a861bb3 100644
|
||||
--- a/fs/splice.c
|
||||
|
@ -22376,7 +22721,7 @@ index ec7f81d..ca87d86 100644
|
|||
EXPORT_SYMBOL(srandom32);
|
||||
|
||||
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
|
||||
index 9b648bd..23b5fa4 100644
|
||||
index 9b648bd..2e0bfc9 100644
|
||||
--- a/mm/memcontrol.c
|
||||
+++ b/mm/memcontrol.c
|
||||
@@ -533,6 +533,9 @@ static int mem_cgroup_charge_common(struct page *page, struct mm_struct *mm,
|
||||
|
@ -22419,7 +22764,30 @@ index 9b648bd..23b5fa4 100644
|
|||
css_get(&mem->css);
|
||||
/*
|
||||
* page reclaim code (kswapd etc..) will move pages between
|
||||
@@ -1053,6 +1065,8 @@ static void mem_cgroup_destroy(struct cgroup_subsys *ss,
|
||||
@@ -966,7 +978,7 @@ static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *mem, int node)
|
||||
{
|
||||
struct mem_cgroup_per_node *pn;
|
||||
struct mem_cgroup_per_zone *mz;
|
||||
- int zone;
|
||||
+ int zone, tmp = node;
|
||||
/*
|
||||
* This routine is called against possible nodes.
|
||||
* But it's BUG to call kmalloc() against offline node.
|
||||
@@ -975,10 +987,9 @@ static int alloc_mem_cgroup_per_zone_info(struct mem_cgroup *mem, int node)
|
||||
* never be onlined. It's better to use memory hotplug callback
|
||||
* function.
|
||||
*/
|
||||
- if (node_state(node, N_HIGH_MEMORY))
|
||||
- pn = kmalloc_node(sizeof(*pn), GFP_KERNEL, node);
|
||||
- else
|
||||
- pn = kmalloc(sizeof(*pn), GFP_KERNEL);
|
||||
+ if (!node_state(node, N_NORMAL_MEMORY))
|
||||
+ tmp = -1;
|
||||
+ pn = kmalloc_node(sizeof(*pn), GFP_KERNEL, tmp);
|
||||
if (!pn)
|
||||
return 1;
|
||||
|
||||
@@ -1053,6 +1064,8 @@ static void mem_cgroup_destroy(struct cgroup_subsys *ss,
|
||||
static int mem_cgroup_populate(struct cgroup_subsys *ss,
|
||||
struct cgroup *cont)
|
||||
{
|
||||
|
@ -22428,7 +22796,7 @@ index 9b648bd..23b5fa4 100644
|
|||
return cgroup_add_files(cont, ss, mem_cgroup_files,
|
||||
ARRAY_SIZE(mem_cgroup_files));
|
||||
}
|
||||
@@ -1065,6 +1079,9 @@ static void mem_cgroup_move_task(struct cgroup_subsys *ss,
|
||||
@@ -1065,6 +1078,9 @@ static void mem_cgroup_move_task(struct cgroup_subsys *ss,
|
||||
struct mm_struct *mm;
|
||||
struct mem_cgroup *mem, *old_mem;
|
||||
|
||||
|
@ -23847,8 +24215,57 @@ index 10b5c08..b741618 100644
|
|||
|
||||
clear_bit(__LINK_STATE_QDISC_RUNNING, &dev->state);
|
||||
}
|
||||
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
|
||||
index 8c6a7f1..8834d68 100644
|
||||
--- a/net/sunrpc/clnt.c
|
||||
+++ b/net/sunrpc/clnt.c
|
||||
@@ -261,10 +261,6 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
|
||||
};
|
||||
char servername[48];
|
||||
|
||||
- xprt = xprt_create_transport(&xprtargs);
|
||||
- if (IS_ERR(xprt))
|
||||
- return (struct rpc_clnt *)xprt;
|
||||
-
|
||||
/*
|
||||
* If the caller chooses not to specify a hostname, whip
|
||||
* up a string representation of the passed-in address.
|
||||
diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c
|
||||
index 995c3fd..79a55d5 100644
|
||||
--- a/net/sunrpc/xdr.c
|
||||
+++ b/net/sunrpc/xdr.c
|
||||
@@ -244,7 +244,7 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len)
|
||||
pgto = pages + (pgbase >> PAGE_CACHE_SHIFT);
|
||||
pgbase &= ~PAGE_CACHE_MASK;
|
||||
|
||||
- do {
|
||||
+ for (;;) {
|
||||
copy = PAGE_CACHE_SIZE - pgbase;
|
||||
if (copy > len)
|
||||
copy = len;
|
||||
@@ -253,6 +253,10 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len)
|
||||
memcpy(vto + pgbase, p, copy);
|
||||
kunmap_atomic(vto, KM_USER0);
|
||||
|
||||
+ len -= copy;
|
||||
+ if (len == 0)
|
||||
+ break;
|
||||
+
|
||||
pgbase += copy;
|
||||
if (pgbase == PAGE_CACHE_SIZE) {
|
||||
flush_dcache_page(*pgto);
|
||||
@@ -260,8 +264,7 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len)
|
||||
pgto++;
|
||||
}
|
||||
p += copy;
|
||||
-
|
||||
- } while ((len -= copy) != 0);
|
||||
+ }
|
||||
flush_dcache_page(*pgto);
|
||||
}
|
||||
|
||||
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
|
||||
index 41a049f..89bb6d3 100644
|
||||
index 41a049f..d39b59c 100644
|
||||
--- a/security/selinux/hooks.c
|
||||
+++ b/security/selinux/hooks.c
|
||||
@@ -180,7 +180,7 @@ static int inode_alloc_security(struct inode *inode)
|
||||
|
@ -23860,6 +24277,24 @@ index 41a049f..89bb6d3 100644
|
|||
if (!isec)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -760,13 +760,13 @@ static void selinux_sb_clone_mnt_opts(const struct super_block *oldsb,
|
||||
* this early in the boot process. */
|
||||
BUG_ON(!ss_initialized);
|
||||
|
||||
- /* this might go away sometime down the line if there is a new user
|
||||
- * of clone, but for now, nfs better not get here... */
|
||||
- BUG_ON(newsbsec->initialized);
|
||||
-
|
||||
/* how can we clone if the old one wasn't set up?? */
|
||||
BUG_ON(!oldsbsec->initialized);
|
||||
|
||||
+ /* if fs is reusing a sb, just let its options stand... */
|
||||
+ if (newsbsec->initialized)
|
||||
+ return;
|
||||
+
|
||||
mutex_lock(&newsbsec->lock);
|
||||
|
||||
newsbsec->flags = oldsbsec->flags;
|
||||
@@ -1143,7 +1143,7 @@ static int inode_doinit_with_dentry(struct inode *inode, struct dentry *opt_dent
|
||||
}
|
||||
|
||||
|
@ -23970,3 +24405,35 @@ index f374186..3f2bad2 100644
|
|||
}
|
||||
|
||||
static int compute_sid_handle_invalid_context(
|
||||
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
|
||||
index 25ccfce..7d911a1 100644
|
||||
--- a/sound/pci/es1968.c
|
||||
+++ b/sound/pci/es1968.c
|
||||
@@ -617,6 +617,18 @@ static int snd_es1968_ac97_wait(struct es1968 *chip)
|
||||
return 1; /* timeout */
|
||||
}
|
||||
|
||||
+static int snd_es1968_ac97_wait_poll(struct es1968 *chip)
|
||||
+{
|
||||
+ int timeout = 100000;
|
||||
+
|
||||
+ while (timeout-- > 0) {
|
||||
+ if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
|
||||
+ return 0;
|
||||
+ }
|
||||
+ snd_printd("es1968: ac97 timeout\n");
|
||||
+ return 1; /* timeout */
|
||||
+}
|
||||
+
|
||||
static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
|
||||
{
|
||||
struct es1968 *chip = ac97->private_data;
|
||||
@@ -645,7 +657,7 @@ static unsigned short snd_es1968_ac97_read(struct snd_ac97 *ac97, unsigned short
|
||||
outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX);
|
||||
/*msleep(1);*/
|
||||
|
||||
- if (! snd_es1968_ac97_wait(chip)) {
|
||||
+ if (!snd_es1968_ac97_wait_poll(chip)) {
|
||||
data = inw(chip->io_port + ESM_AC97_DATA);
|
||||
/*msleep(1);*/
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
+ bugfix/all/patch-2.6.25-rc8-git7
|
||||
+ bugfix/all/patch-2.6.25-rc8-git8
|
||||
+ debian/version.patch
|
||||
+ debian/kernelvariables.patch
|
||||
+ debian/doc-build-parallel.patch
|
||||
|
|
Loading…
Reference in New Issue