Commit e087a412 authored by Anton Altaparmakov's avatar Anton Altaparmakov

Merge branch 'master' of /usr/src/ntfs-2.6/

parents 7946ada3 bb7e257e
#
# NOTE! Don't add files that are generated in specific
# subdirectories here. Add them in the ".gitignore" file
# in that subdirectory instead.
#
# Normal rules
#
.*
*.o
*.a
*.s
*.ko
*.mod.c
#
# Top-level generic files
#
vmlinux*
System.map
Module.symvers
#
# Generated include files
#
include/asm
include/config
include/linux/autoconf.h
include/linux/compile.h
include/linux/version.h
...@@ -660,8 +660,10 @@ quiet_cmd_sysmap = SYSMAP ...@@ -660,8 +660,10 @@ quiet_cmd_sysmap = SYSMAP
# Link of vmlinux # Link of vmlinux
# If CONFIG_KALLSYMS is set .version is already updated # If CONFIG_KALLSYMS is set .version is already updated
# Generate System.map and verify that the content is consistent # Generate System.map and verify that the content is consistent
# Use + in front of the vmlinux_version rule to silent warning with make -j2
# First command is ':' to allow us to use + in front of the rule
define rule_vmlinux__ define rule_vmlinux__
:
$(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlinux_version)) $(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlinux_version))
$(call cmd,vmlinux__) $(call cmd,vmlinux__)
......
...@@ -98,7 +98,10 @@ struct clk *clk_get(struct device *dev, const char *id) ...@@ -98,7 +98,10 @@ struct clk *clk_get(struct device *dev, const char *id)
struct clk *clk = ERR_PTR(-ENOENT); struct clk *clk = ERR_PTR(-ENOENT);
int idno; int idno;
idno = (dev == NULL) ? -1 : to_platform_device(dev)->id; if (dev == NULL || dev->bus != &platform_bus_type)
idno = -1;
else
idno = to_platform_device(dev)->id;
down(&clocks_sem); down(&clocks_sem);
......
...@@ -58,9 +58,8 @@ acpi_system_read_event(struct file *file, char __user * buffer, size_t count, ...@@ -58,9 +58,8 @@ acpi_system_read_event(struct file *file, char __user * buffer, size_t count,
return_VALUE(-EAGAIN); return_VALUE(-EAGAIN);
result = acpi_bus_receive_event(&event); result = acpi_bus_receive_event(&event);
if (result) { if (result)
return_VALUE(-EIO); return_VALUE(result);
}
chars_remaining = sprintf(str, "%s %s %08x %08x\n", chars_remaining = sprintf(str, "%s %s %08x %08x\n",
event.device_class ? event. event.device_class ? event.
......
consolemap_deftbl.c
defkeymap.c
...@@ -695,7 +695,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c) ...@@ -695,7 +695,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c)
{ {
TRACE_PE("IDLE - got STX but no space in rx_queue!"); TRACE_PE("IDLE - got STX but no space in rx_queue!");
pInfo->state=R3964_WAIT_FOR_RX_BUF; pInfo->state=R3964_WAIT_FOR_RX_BUF;
mod_timer(&pInfo->tmr, R3964_TO_NO_BUF); mod_timer(&pInfo->tmr, jiffies + R3964_TO_NO_BUF);
break; break;
} }
start_receiving: start_receiving:
...@@ -705,7 +705,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c) ...@@ -705,7 +705,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c)
pInfo->last_rx = 0; pInfo->last_rx = 0;
pInfo->flags &= ~R3964_ERROR; pInfo->flags &= ~R3964_ERROR;
pInfo->state=R3964_RECEIVING; pInfo->state=R3964_RECEIVING;
mod_timer(&pInfo->tmr, R3964_TO_ZVZ); mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ);
pInfo->nRetry = 0; pInfo->nRetry = 0;
put_char(pInfo, DLE); put_char(pInfo, DLE);
flush(pInfo); flush(pInfo);
...@@ -732,7 +732,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c) ...@@ -732,7 +732,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c)
if(pInfo->flags & R3964_BCC) if(pInfo->flags & R3964_BCC)
{ {
pInfo->state = R3964_WAIT_FOR_BCC; pInfo->state = R3964_WAIT_FOR_BCC;
mod_timer(&pInfo->tmr, R3964_TO_ZVZ); mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ);
} }
else else
{ {
...@@ -744,7 +744,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c) ...@@ -744,7 +744,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c)
pInfo->last_rx = c; pInfo->last_rx = c;
char_to_buf: char_to_buf:
pInfo->rx_buf[pInfo->rx_position++] = c; pInfo->rx_buf[pInfo->rx_position++] = c;
mod_timer(&pInfo->tmr, R3964_TO_ZVZ); mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ);
} }
} }
/* else: overflow-msg? BUF_SIZE>MTU; should not happen? */ /* else: overflow-msg? BUF_SIZE>MTU; should not happen? */
......
...@@ -90,11 +90,11 @@ static inline int uinput_request_reserve_slot(struct uinput_device *udev, struct ...@@ -90,11 +90,11 @@ static inline int uinput_request_reserve_slot(struct uinput_device *udev, struct
static void uinput_request_done(struct uinput_device *udev, struct uinput_request *request) static void uinput_request_done(struct uinput_device *udev, struct uinput_request *request)
{ {
complete(&request->done);
/* Mark slot as available */ /* Mark slot as available */
udev->requests[request->id] = NULL; udev->requests[request->id] = NULL;
wake_up_interruptible(&udev->requests_waitq); wake_up_interruptible(&udev->requests_waitq);
complete(&request->done);
} }
static int uinput_request_submit(struct input_dev *dev, struct uinput_request *request) static int uinput_request_submit(struct input_dev *dev, struct uinput_request *request)
......
...@@ -203,7 +203,7 @@ static const unsigned short init_ntsc[] = { ...@@ -203,7 +203,7 @@ static const unsigned short init_ntsc[] = {
0x8c, 640, /* Horizontal length */ 0x8c, 640, /* Horizontal length */
0x8d, 640, /* Number of pixels */ 0x8d, 640, /* Number of pixels */
0x8f, 0xc00, /* Disable window 2 */ 0x8f, 0xc00, /* Disable window 2 */
0xf0, 0x173, /* 13.5 MHz transport, Forced 0xf0, 0x73, /* 13.5 MHz transport, Forced
* mode, latch windows */ * mode, latch windows */
0xf2, 0x13, /* NTSC M, composite input */ 0xf2, 0x13, /* NTSC M, composite input */
0xe7, 0x1e1, /* Enable vertical standard 0xe7, 0x1e1, /* Enable vertical standard
...@@ -212,38 +212,36 @@ static const unsigned short init_ntsc[] = { ...@@ -212,38 +212,36 @@ static const unsigned short init_ntsc[] = {
static const unsigned short init_pal[] = { static const unsigned short init_pal[] = {
0x88, 23, /* Window 1 vertical begin */ 0x88, 23, /* Window 1 vertical begin */
0x89, 288 + 16, /* Vertical lines in (16 lines 0x89, 288, /* Vertical lines in (16 lines
* skipped by the VFE) */ * skipped by the VFE) */
0x8a, 288 + 16, /* Vertical lines out (16 lines 0x8a, 288, /* Vertical lines out (16 lines
* skipped by the VFE) */ * skipped by the VFE) */
0x8b, 16, /* Horizontal begin */ 0x8b, 16, /* Horizontal begin */
0x8c, 768, /* Horizontal length */ 0x8c, 768, /* Horizontal length */
0x8d, 784, /* Number of pixels 0x8d, 784, /* Number of pixels
* Must be >= Horizontal begin + Horizontal length */ * Must be >= Horizontal begin + Horizontal length */
0x8f, 0xc00, /* Disable window 2 */ 0x8f, 0xc00, /* Disable window 2 */
0xf0, 0x177, /* 13.5 MHz transport, Forced 0xf0, 0x77, /* 13.5 MHz transport, Forced
* mode, latch windows */ * mode, latch windows */
0xf2, 0x3d1, /* PAL B,G,H,I, composite input */ 0xf2, 0x3d1, /* PAL B,G,H,I, composite input */
0xe7, 0x261, /* PAL/SECAM set to 288 + 16 lines 0xe7, 0x241, /* PAL/SECAM set to 288 lines */
* change to 0x241 for 288 lines */
}; };
static const unsigned short init_secam[] = { static const unsigned short init_secam[] = {
0x88, 23 - 16, /* Window 1 vertical begin */ 0x88, 23, /* Window 1 vertical begin */
0x89, 288 + 16, /* Vertical lines in (16 lines 0x89, 288, /* Vertical lines in (16 lines
* skipped by the VFE) */ * skipped by the VFE) */
0x8a, 288 + 16, /* Vertical lines out (16 lines 0x8a, 288, /* Vertical lines out (16 lines
* skipped by the VFE) */ * skipped by the VFE) */
0x8b, 16, /* Horizontal begin */ 0x8b, 16, /* Horizontal begin */
0x8c, 768, /* Horizontal length */ 0x8c, 768, /* Horizontal length */
0x8d, 784, /* Number of pixels 0x8d, 784, /* Number of pixels
* Must be >= Horizontal begin + Horizontal length */ * Must be >= Horizontal begin + Horizontal length */
0x8f, 0xc00, /* Disable window 2 */ 0x8f, 0xc00, /* Disable window 2 */
0xf0, 0x177, /* 13.5 MHz transport, Forced 0xf0, 0x77, /* 13.5 MHz transport, Forced
* mode, latch windows */ * mode, latch windows */
0xf2, 0x3d5, /* SECAM, composite input */ 0xf2, 0x3d5, /* SECAM, composite input */
0xe7, 0x261, /* PAL/SECAM set to 288 + 16 lines 0xe7, 0x241, /* PAL/SECAM set to 288 lines */
* change to 0x241 for 288 lines */
}; };
static const unsigned char init_common[] = { static const unsigned char init_common[] = {
...@@ -410,6 +408,12 @@ vpx3220_command (struct i2c_client *client, ...@@ -410,6 +408,12 @@ vpx3220_command (struct i2c_client *client,
case DECODER_SET_NORM: case DECODER_SET_NORM:
{ {
int *iarg = arg, data; int *iarg = arg, data;
int temp_input;
/* Here we back up the input selection because it gets
overwritten when we fill the registers with the
choosen video norm */
temp_input = vpx3220_fp_read(client, 0xf2);
dprintk(1, KERN_DEBUG "%s: DECODER_SET_NORM %d\n", dprintk(1, KERN_DEBUG "%s: DECODER_SET_NORM %d\n",
I2C_NAME(client), *iarg); I2C_NAME(client), *iarg);
...@@ -449,6 +453,10 @@ vpx3220_command (struct i2c_client *client, ...@@ -449,6 +453,10 @@ vpx3220_command (struct i2c_client *client,
} }
decoder->norm = *iarg; decoder->norm = *iarg;
/* And here we set the backed up video input again */
vpx3220_fp_write(client, 0xf2, temp_input | 0x0010);
udelay(10);
} }
break; break;
......
classlist.h
devlist.h
gen-devlist
...@@ -1233,7 +1233,7 @@ static void __init quirk_alder_ioapic(struct pci_dev *pdev) ...@@ -1233,7 +1233,7 @@ static void __init quirk_alder_ioapic(struct pci_dev *pdev)
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic );
#endif #endif
#ifdef CONFIG_SCSI_SATA #ifdef CONFIG_SCSI_SATA_INTEL_COMBINED
static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
{ {
u8 prog, comb, tmp; u8 prog, comb, tmp;
...@@ -1310,7 +1310,7 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) ...@@ -1310,7 +1310,7 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
request_region(0x170, 8, "libata"); /* port 1 */ request_region(0x170, 8, "libata"); /* port 1 */
} }
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_intel_ide_combined ); DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_intel_ide_combined );
#endif /* CONFIG_SCSI_SATA */ #endif /* CONFIG_SCSI_SATA_INTEL_COMBINED */
int pcie_mch_quirk; int pcie_mch_quirk;
......
...@@ -553,6 +553,11 @@ config SCSI_SATA_VITESSE ...@@ -553,6 +553,11 @@ config SCSI_SATA_VITESSE
If unsure, say N. If unsure, say N.
config SCSI_SATA_INTEL_COMBINED
bool
depends on IDE=y && !BLK_DEV_IDE_SATA && (SCSI_SATA_AHCI || SCSI_ATA_PIIX)
default y
config SCSI_BUSLOGIC config SCSI_BUSLOGIC
tristate "BusLogic SCSI support" tristate "BusLogic SCSI support"
depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API
......
...@@ -276,6 +276,8 @@ static const struct pnp_device_id pnp_dev_table[] = { ...@@ -276,6 +276,8 @@ static const struct pnp_device_id pnp_dev_table[] = {
{ "SUP1620", 0 }, { "SUP1620", 0 },
/* SupraExpress 33.6 Data/Fax PnP modem */ /* SupraExpress 33.6 Data/Fax PnP modem */
{ "SUP1760", 0 }, { "SUP1760", 0 },
/* SupraExpress 56i Sp Intl */
{ "SUP2171", 0 },
/* Phoebe Micro */ /* Phoebe Micro */
/* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */ /* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */
{ "TEX0011", 0 }, { "TEX0011", 0 },
......
...@@ -326,7 +326,8 @@ static void postproc_atl_queue(struct isp116x *isp116x) ...@@ -326,7 +326,8 @@ static void postproc_atl_queue(struct isp116x *isp116x)
usb_settoggle(udev, ep->epnum, usb_settoggle(udev, ep->epnum,
ep->nextpid == ep->nextpid ==
USB_PID_OUT, USB_PID_OUT,
PTD_GET_TOGGLE(ptd) ^ 1); PTD_GET_TOGGLE(ptd));
urb->actual_length += PTD_GET_COUNT(ptd);
urb->status = cc_to_error[TD_DATAUNDERRUN]; urb->status = cc_to_error[TD_DATAUNDERRUN];
spin_unlock(&urb->lock); spin_unlock(&urb->lock);
continue; continue;
......
...@@ -1702,10 +1702,7 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf) ...@@ -1702,10 +1702,7 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
if ((endpoint->bmAttributes & 3) != 3) /* Not an interrupt endpoint */ if ((endpoint->bmAttributes & 3) != 3) /* Not an interrupt endpoint */
continue; continue;
/* handle potential highspeed HID correctly */
interval = endpoint->bInterval; interval = endpoint->bInterval;
if (dev->speed == USB_SPEED_HIGH)
interval = 1 << (interval - 1);
/* Change the polling interval of mice. */ /* Change the polling interval of mice. */
if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0) if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0)
......
...@@ -565,6 +565,10 @@ static int vgacon_switch(struct vc_data *c) ...@@ -565,6 +565,10 @@ static int vgacon_switch(struct vc_data *c)
scr_memcpyw((u16 *) c->vc_origin, (u16 *) c->vc_screenbuf, scr_memcpyw((u16 *) c->vc_origin, (u16 *) c->vc_screenbuf,
c->vc_screenbuf_size > vga_vram_size ? c->vc_screenbuf_size > vga_vram_size ?
vga_vram_size : c->vc_screenbuf_size); vga_vram_size : c->vc_screenbuf_size);
if (!(vga_video_num_columns % 2) &&
vga_video_num_columns <= ORIG_VIDEO_COLS &&
vga_video_num_lines <= (ORIG_VIDEO_LINES *
vga_default_font_height) / c->vc_font.height)
vgacon_doresize(c, c->vc_cols, c->vc_rows); vgacon_doresize(c, c->vc_cols, c->vc_rows);
} }
...@@ -1023,7 +1027,8 @@ static int vgacon_resize(struct vc_data *c, unsigned int width, ...@@ -1023,7 +1027,8 @@ static int vgacon_resize(struct vc_data *c, unsigned int width,
if (width % 2 || width > ORIG_VIDEO_COLS || if (width % 2 || width > ORIG_VIDEO_COLS ||
height > (ORIG_VIDEO_LINES * vga_default_font_height)/ height > (ORIG_VIDEO_LINES * vga_default_font_height)/
c->vc_font.height) c->vc_font.height)
return -EINVAL; /* let svgatextmode tinker with video timings */
return 0;
if (CON_IS_VISIBLE(c) && !vga_is_gfx) /* who knows */ if (CON_IS_VISIBLE(c) && !vga_is_gfx) /* who knows */
vgacon_doresize(c, width, height); vgacon_doresize(c, width, height);
......
#
# Generated files
#
*_mono.c
*_vga16.c
*_clut224.c
*_gray256.c
...@@ -96,14 +96,14 @@ static int vesafb_blank(int blank, struct fb_info *info) ...@@ -96,14 +96,14 @@ static int vesafb_blank(int blank, struct fb_info *info)
int loop = 10000; int loop = 10000;
u8 seq = 0, crtc17 = 0; u8 seq = 0, crtc17 = 0;
err = 0; if (blank == FB_BLANK_POWERDOWN) {
if (blank) {
seq = 0x20; seq = 0x20;
crtc17 = 0x00; crtc17 = 0x00;
err = 0;
} else { } else {
seq = 0x00; seq = 0x00;
crtc17 = 0x80; crtc17 = 0x80;
err = (blank == FB_BLANK_UNBLANK) ? 0 : -EINVAL;
} }
vga_wseq(NULL, 0x00, 0x01); vga_wseq(NULL, 0x00, 0x01);
......
...@@ -398,7 +398,7 @@ static struct kiocb fastcall *__aio_get_req(struct kioctx *ctx) ...@@ -398,7 +398,7 @@ static struct kiocb fastcall *__aio_get_req(struct kioctx *ctx)
if (unlikely(!req)) if (unlikely(!req))
return NULL; return NULL;
req->ki_flags = 1 << KIF_LOCKED; req->ki_flags = 0;
req->ki_users = 2; req->ki_users = 2;
req->ki_key = 0; req->ki_key = 0;
req->ki_ctx = ctx; req->ki_ctx = ctx;
...@@ -547,25 +547,6 @@ struct kioctx *lookup_ioctx(unsigned long ctx_id) ...@@ -547,25 +547,6 @@ struct kioctx *lookup_ioctx(unsigned long ctx_id)
return ioctx; return ioctx;
} }
static int lock_kiocb_action(void *param)
{
schedule();
return 0;
}
static inline void lock_kiocb(struct kiocb *iocb)
{
wait_on_bit_lock(&iocb->ki_flags, KIF_LOCKED, lock_kiocb_action,
TASK_UNINTERRUPTIBLE);
}
static inline void unlock_kiocb(struct kiocb *iocb)
{
kiocbClearLocked(iocb);
smp_mb__after_clear_bit();
wake_up_bit(&iocb->ki_flags, KIF_LOCKED);
}
/* /*
* use_mm * use_mm
* Makes the calling kernel thread take on the specified * Makes the calling kernel thread take on the specified
...@@ -796,9 +777,7 @@ static int __aio_run_iocbs(struct kioctx *ctx) ...@@ -796,9 +777,7 @@ static int __aio_run_iocbs(struct kioctx *ctx)
* Hold an extra reference while retrying i/o. * Hold an extra reference while retrying i/o.
*/ */
iocb->ki_users++; /* grab extra reference */ iocb->ki_users++; /* grab extra reference */
lock_kiocb(iocb);
aio_run_iocb(iocb); aio_run_iocb(iocb);
unlock_kiocb(iocb);
if (__aio_put_req(ctx, iocb)) /* drop extra ref */ if (__aio_put_req(ctx, iocb)) /* drop extra ref */
put_ioctx(ctx); put_ioctx(ctx);
} }
...@@ -1542,7 +1521,6 @@ int fastcall io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, ...@@ -1542,7 +1521,6 @@ int fastcall io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
spin_lock_irq(&ctx->ctx_lock); spin_lock_irq(&ctx->ctx_lock);
aio_run_iocb(req); aio_run_iocb(req);
unlock_kiocb(req);
if (!list_empty(&ctx->run_list)) { if (!list_empty(&ctx->run_list)) {
/* drain the run list */ /* drain the run list */
while (__aio_run_iocbs(ctx)) while (__aio_run_iocbs(ctx))
...@@ -1674,7 +1652,6 @@ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb, ...@@ -1674,7 +1652,6 @@ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,
if (NULL != cancel) { if (NULL != cancel) {
struct io_event tmp; struct io_event tmp;
pr_debug("calling cancel\n"); pr_debug("calling cancel\n");
lock_kiocb(kiocb);
memset(&tmp, 0, sizeof(tmp)); memset(&tmp, 0, sizeof(tmp));
tmp.obj = (u64)(unsigned long)kiocb->ki_obj.user; tmp.obj = (u64)(unsigned long)kiocb->ki_obj.user;
tmp.data = kiocb->ki_user_data; tmp.data = kiocb->ki_user_data;
...@@ -1686,7 +1663,6 @@ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb, ...@@ -1686,7 +1663,6 @@ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb,
if (copy_to_user(result, &tmp, sizeof(tmp))) if (copy_to_user(result, &tmp, sizeof(tmp)))
ret = -EFAULT; ret = -EFAULT;
} }
unlock_kiocb(kiocb);
} else } else
ret = -EINVAL; ret = -EINVAL;
......
...@@ -85,6 +85,10 @@ int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct ...@@ -85,6 +85,10 @@ int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct
struct nfs_delegation *delegation; struct nfs_delegation *delegation;
int status = 0; int status = 0;
/* Ensure we first revalidate the attributes and page cache! */
if ((nfsi->cache_validity & (NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_ATTR)))
__nfs_revalidate_inode(NFS_SERVER(inode), inode);
delegation = nfs_alloc_delegation(); delegation = nfs_alloc_delegation();
if (delegation == NULL) if (delegation == NULL)
return -ENOMEM; return -ENOMEM;
......
...@@ -137,7 +137,8 @@ static int nfs_revalidate_file(struct inode *inode, struct file *filp) ...@@ -137,7 +137,8 @@ static int nfs_revalidate_file(struct inode *inode, struct file *filp)
struct nfs_inode *nfsi = NFS_I(inode); struct nfs_inode *nfsi = NFS_I(inode);
int retval = 0; int retval = 0;
if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) || nfs_attribute_timeout(inode)) if ((nfsi->cache_validity & (NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_ATTR))
|| nfs_attribute_timeout(inode))
retval = __nfs_revalidate_inode(NFS_SERVER(inode), inode); retval = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
nfs_revalidate_mapping(inode, filp->f_mapping); nfs_revalidate_mapping(inode, filp->f_mapping);
return 0; return 0;
......
...@@ -877,12 +877,10 @@ static int nfs_wait_on_inode(struct inode *inode) ...@@ -877,12 +877,10 @@ static int nfs_wait_on_inode(struct inode *inode)
sigset_t oldmask; sigset_t oldmask;
int error; int error;
atomic_inc(&inode->i_count);
rpc_clnt_sigmask(clnt, &oldmask); rpc_clnt_sigmask(clnt, &oldmask);
error = wait_on_bit_lock(&nfsi->flags, NFS_INO_REVALIDATING, error = wait_on_bit_lock(&nfsi->flags, NFS_INO_REVALIDATING,
nfs_wait_schedule, TASK_INTERRUPTIBLE); nfs_wait_schedule, TASK_INTERRUPTIBLE);
rpc_clnt_sigunmask(clnt, &oldmask); rpc_clnt_sigunmask(clnt, &oldmask);
iput(inode);
return error; return error;
} }
...@@ -1226,10 +1224,6 @@ int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) ...@@ -1226,10 +1224,6 @@ int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
loff_t cur_size, new_isize; loff_t cur_size, new_isize;
int data_unstable; int data_unstable;
/* Do we hold a delegation? */
if (nfs_have_delegation(inode, FMODE_READ))
return 0;
spin_lock(&inode->i_lock); spin_lock(&inode->i_lock);
/* Are we in the process of updating data on the server? */ /* Are we in the process of updating data on the server? */
...@@ -1350,7 +1344,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr, unsign ...@@ -1350,7 +1344,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr, unsign
nfsi->read_cache_jiffies = fattr->timestamp; nfsi->read_cache_jiffies = fattr->timestamp;
/* Are we racing with known updates of the metadata on the server? */ /* Are we racing with known updates of the metadata on the server? */
data_unstable = ! nfs_verify_change_attribute(inode, verifier); data_unstable = ! (nfs_verify_change_attribute(inode, verifier) ||
(nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE));
/* Check if our cached file size is stale */ /* Check if our cached file size is stale */
new_isize = nfs_size_to_loff_t(fattr->size); new_isize = nfs_size_to_loff_t(fattr->size);
......
...@@ -91,6 +91,7 @@ static void *nommu_vma_list_start(struct seq_file *m, loff_t *_pos) ...@@ -91,6 +91,7 @@ static void *nommu_vma_list_start(struct seq_file *m, loff_t *_pos)
next = _rb; next = _rb;
break; break;
} }
pos--;
} }
return next; return next;
......
...@@ -15,25 +15,26 @@ ...@@ -15,25 +15,26 @@
ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP_OFFSET) ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP_OFFSET)
ldr \irqstat, [\irqstat] @ get interrupts ldr \irqstat, [\irqstat] @ get interrupts
cmp \irqstat, #0 cmp \irqstat, #0
beq 1001f beq 1001f @ upper IRQ?
clz \irqnr, \irqstat clz \irqnr, \irqstat
mov \base, #31 mov \base, #31
subs \irqnr, \base, \irqnr sub \irqnr, \base, \irqnr
b 1002f @ lower IRQ being
@ handled
1001: 1001:
/* /*
* IXP465 has an upper IRQ status register * IXP465 has an upper IRQ status register
*/ */
#if defined(CONFIG_CPU_IXP46X) #if defined(CONFIG_CPU_IXP46X)
bne 1002f
ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP2_OFFSET) ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP2_OFFSET)
ldr \irqstat, [\irqstat] @ get upper interrupts ldr \irqstat, [\irqstat] @ get upper interrupts
mov \irqnr, #63 mov \irqnr, #63
clz \irqstat, \irqstat clz \irqstat, \irqstat
cmp \irqstat, #32 cmp \irqstat, #32
subne \irqnr, \irqnr, \irqstat subne \irqnr, \irqnr, \irqstat
1002:
#endif #endif
1002:
.endm .endm
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#define pcibios_assign_all_busses() 1 #define pcibios_assign_all_busses() 1
#if defined(CONFIG_CPU_IXP465) && !defined(__ASSEMBLY__) #if defined(CONFIG_CPU_IXP46X) && !defined(__ASSEMBLY__)
extern unsigned int processor_id; extern unsigned int processor_id;
#define cpu_is_ixp465() ((processor_id & 0xffffffc0) == 0x69054200) #define cpu_is_ixp465() ((processor_id & 0xffffffc0) == 0x69054200)
#else #else
......
...@@ -103,7 +103,7 @@ ...@@ -103,7 +103,7 @@
({ \ ({ \
smp_mb(); \ smp_mb(); \
__asm__ __volatile__( \ __asm__ __volatile__( \
"@ up_op_read\n" \ "@ up_op_write\n" \
"1: ldrex lr, [%0]\n" \ "1: ldrex lr, [%0]\n" \
" adds lr, lr, %1\n" \ " adds lr, lr, %1\n" \
" strex ip, lr, [%0]\n" \ " strex ip, lr, [%0]\n" \
...@@ -231,7 +231,7 @@ ...@@ -231,7 +231,7 @@
#define __up_op_write(ptr,wake) \ #define __up_op_write(ptr,wake) \
({ \ ({ \
__asm__ __volatile__( \ __asm__ __volatile__( \
"@ up_op_read\n" \ "@ up_op_write\n" \
" mrs ip, cpsr\n" \ " mrs ip, cpsr\n" \
" orr lr, ip, #128\n" \ " orr lr, ip, #128\n" \
" msr cpsr_c, lr\n" \ " msr cpsr_c, lr\n" \
......
...@@ -24,7 +24,12 @@ struct kioctx; ...@@ -24,7 +24,12 @@ struct kioctx;
#define KIOCB_SYNC_KEY (~0U) #define KIOCB_SYNC_KEY (~0U)
/* ki_flags bits */ /* ki_flags bits */
#define KIF_LOCKED 0 /*
* This may be used for cancel/retry serialization in the future, but
* for now it's unused and we probably don't want modules to even
* think they can use it.
*/
/* #define KIF_LOCKED 0 */
#define KIF_KICKED 1 #define KIF_KICKED 1
#define KIF_CANCELLED 2 #define KIF_CANCELLED 2
......
...@@ -442,12 +442,14 @@ static inline void list_splice_init(struct list_head *list, ...@@ -442,12 +442,14 @@ static inline void list_splice_init(struct list_head *list,
* as long as the traversal is guarded by rcu_read_lock(). * as long as the traversal is guarded by rcu_read_lock().
*/ */
#define list_for_each_rcu(pos, head) \ #define list_for_each_rcu(pos, head) \
for (pos = (head)->next; prefetch(pos->next), pos != (head); \ for (pos = (head)->next; \
pos = rcu_dereference(pos->next)) prefetch(rcu_dereference(pos)->next), pos != (head); \
pos = pos->next)
#define __list_for_each_rcu(pos, head) \ #define __list_for_each_rcu(pos, head) \
for (pos = (head)->next; pos != (head); \ for (pos = (head)->next; \
pos = rcu_dereference(pos->next)) rcu_dereference(pos) != (head); \
pos = pos->next)
/** /**
* list_for_each_safe_rcu - iterate over an rcu-protected list safe * list_for_each_safe_rcu - iterate over an rcu-protected list safe
...@@ -461,8 +463,9 @@ static inline void list_splice_init(struct list_head *list, ...@@ -461,8 +463,9 @@ static inline void list_splice_init(struct list_head *list,
* as long as the traversal is guarded by rcu_read_lock(). * as long as the traversal is guarded by rcu_read_lock().
*/ */
#define list_for_each_safe_rcu(pos, n, head) \ #define list_for_each_safe_rcu(pos, n, head) \
for (pos = (head)->next, n = pos->next; pos != (head); \ for (pos = (head)->next; \
pos = rcu_dereference(n), n = pos->next) n = rcu_dereference(pos)->next, pos != (head); \
pos = n)
/** /**
* list_for_each_entry_rcu - iterate over rcu list of given type * list_for_each_entry_rcu - iterate over rcu list of given type
...@@ -476,9 +479,9 @@ static inline void list_splice_init(struct list_head *list, ...@@ -476,9 +479,9 @@ static inline void list_splice_init(struct list_head *list,
*/ */
#define list_for_each_entry_rcu(pos, head, member) \ #define list_for_each_entry_rcu(pos, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member); \ for (pos = list_entry((head)->next, typeof(*pos), member); \
prefetch(pos->member.next), &pos->member != (head); \ prefetch(rcu_dereference(pos)->member.next), \
pos = rcu_dereference(list_entry(pos->member.next, \ &pos->member != (head); \
typeof(*pos), member))) pos = list_entry(pos->member.next, typeof(*pos), member))
/** /**
...@@ -492,8 +495,9 @@ static inline void list_splice_init(struct list_head *list, ...@@ -492,8 +495,9 @@ static inline void list_splice_init(struct list_head *list,
* as long as the traversal is guarded by rcu_read_lock(). * as long as the traversal is guarded by rcu_read_lock().
*/ */
#define list_for_each_continue_rcu(pos, head) \ #define list_for_each_continue_rcu(pos, head) \
for ((pos) = (pos)->next; prefetch((pos)->next), (pos) != (head); \ for ((pos) = (pos)->next; \
(pos) = rcu_dereference((pos)->next)) prefetch(rcu_dereference((pos))->next), (pos) != (head); \
(pos) = (pos)->next)
/* /*
* Double linked lists with a single pointer list head. * Double linked lists with a single pointer list head.
...@@ -696,8 +700,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, ...@@ -696,8 +700,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
pos = n) pos = n)
#define hlist_for_each_rcu(pos, head) \ #define hlist_for_each_rcu(pos, head) \
for ((pos) = (head)->first; pos && ({ prefetch((pos)->next); 1; }); \ for ((pos) = (head)->first; \
(pos) = rcu_dereference((pos)->next)) rcu_dereference((pos)) && ({ prefetch((pos)->next); 1; }); \
(pos) = (pos)->next)
/** /**
* hlist_for_each_entry - iterate over list of given type * hlist_for_each_entry - iterate over list of given type
...@@ -762,9 +767,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, ...@@ -762,9 +767,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev,
*/ */
#define hlist_for_each_entry_rcu(tpos, pos, head, member) \ #define hlist_for_each_entry_rcu(tpos, pos, head, member) \
for (pos = (head)->first; \ for (pos = (head)->first; \
pos && ({ prefetch(pos->next); 1;}) && \ rcu_dereference(pos) && ({ prefetch(pos->next); 1;}) && \
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
pos = rcu_dereference(pos->next)) pos = pos->next)
#else #else
#warning "don't include kernel headers in userspace" #warning "don't include kernel headers in userspace"
......
...@@ -94,6 +94,7 @@ struct rcu_data { ...@@ -94,6 +94,7 @@ struct rcu_data {
long batch; /* Batch # for current RCU batch */ long batch; /* Batch # for current RCU batch */
struct rcu_head *nxtlist; struct rcu_head *nxtlist;
struct rcu_head **nxttail; struct rcu_head **nxttail;
long count; /* # of queued items */
struct rcu_head *curlist; struct rcu_head *curlist;
struct rcu_head **curtail; struct rcu_head **curtail;
struct rcu_head *donelist; struct rcu_head *donelist;
......
...@@ -424,6 +424,7 @@ static void cleanup_timers(struct list_head *head, ...@@ -424,6 +424,7 @@ static void cleanup_timers(struct list_head *head,
cputime_t ptime = cputime_add(utime, stime); cputime_t ptime = cputime_add(utime, stime);
list_for_each_entry_safe(timer, next, head, entry) { list_for_each_entry_safe(timer, next, head, entry) {
put_task_struct(timer->task);
timer->task = NULL; timer->task = NULL;
list_del_init(&timer->entry); list_del_init(&timer->entry);
if (cputime_lt(timer->expires.cpu, ptime)) { if (cputime_lt(timer->expires.cpu, ptime)) {
...@@ -436,6 +437,7 @@ static void cleanup_timers(struct list_head *head, ...@@ -436,6 +437,7 @@ static void cleanup_timers(struct list_head *head,
++head; ++head;
list_for_each_entry_safe(timer, next, head, entry) { list_for_each_entry_safe(timer, next, head, entry) {
put_task_struct(timer->task);
timer->task = NULL; timer->task = NULL;
list_del_init(&timer->entry); list_del_init(&timer->entry);
if (cputime_lt(timer->expires.cpu, utime)) { if (cputime_lt(timer->expires.cpu, utime)) {
...@@ -448,6 +450,7 @@ static void cleanup_timers(struct list_head *head, ...@@ -448,6 +450,7 @@ static void cleanup_timers(struct list_head *head,
++head; ++head;
list_for_each_entry_safe(timer, next, head, entry) { list_for_each_entry_safe(timer, next, head, entry) {
put_task_struct(timer->task);
timer->task = NULL; timer->task = NULL;
list_del_init(&timer->entry); list_del_init(&timer->entry);
if (timer->expires.sched < sched_time) { if (timer->expires.sched < sched_time) {
......
...@@ -71,7 +71,7 @@ DEFINE_PER_CPU(struct rcu_data, rcu_bh_data) = { 0L }; ...@@ -71,7 +71,7 @@ DEFINE_PER_CPU(struct rcu_data, rcu_bh_data) = { 0L };
/* Fake initialization required by compiler */ /* Fake initialization required by compiler */
static DEFINE_PER_CPU(struct tasklet_struct, rcu_tasklet) = {NULL}; static DEFINE_PER_CPU(struct tasklet_struct, rcu_tasklet) = {NULL};
static int maxbatch = 10; static int maxbatch = 10000;
#ifndef __HAVE_ARCH_CMPXCHG #ifndef __HAVE_ARCH_CMPXCHG
/* /*
...@@ -109,6 +109,10 @@ void fastcall call_rcu(struct rcu_head *head, ...@@ -109,6 +109,10 @@ void fastcall call_rcu(struct rcu_head *head,
rdp = &__get_cpu_var(rcu_data); rdp = &__get_cpu_var(rcu_data);
*rdp->nxttail = head; *rdp->nxttail = head;
rdp->nxttail = &head->next; rdp->nxttail = &head->next;
if (unlikely(++rdp->count > 10000))
set_need_resched();
local_irq_restore(flags); local_irq_restore(flags);
} }
...@@ -140,6 +144,12 @@ void fastcall call_rcu_bh(struct rcu_head *head, ...@@ -140,6 +144,12 @@ void fastcall call_rcu_bh(struct rcu_head *head,
rdp = &__get_cpu_var(rcu_bh_data); rdp = &__get_cpu_var(rcu_bh_data);
*rdp->nxttail = head; *rdp->nxttail = head;
rdp->nxttail = &head->next; rdp->nxttail = &head->next;
rdp->count++;
/*
* Should we directly call rcu_do_batch() here ?
* if (unlikely(rdp->count > 10000))
* rcu_do_batch(rdp);
*/
local_irq_restore(flags); local_irq_restore(flags);
} }
...@@ -157,6 +167,7 @@ static void rcu_do_batch(struct rcu_data *rdp) ...@@ -157,6 +167,7 @@ static void rcu_do_batch(struct rcu_data *rdp)
next = rdp->donelist = list->next; next = rdp->donelist = list->next;
list->func(list); list->func(list);
list = next; list = next;
rdp->count--;
if (++count >= maxbatch) if (++count >= maxbatch)
break; break;
} }
......
#
# Generated files
#
gen_crc32table
crc32table.h
conmakehash
kallsyms
pnmtologo
fixdep
split-include
docproc
#
# Generated files
#
config*
lex.*.c
*.tab.c
*.tab.h
#
# configuration programs
#
conf
mconf
qconf
gconf
kxgettext
elfconfig.h
mk_elfconfig
modpost
#
# Generated files
#
gen_init_cpio
initramfs_data.cpio
initramfs_data.cpio.gz
initramfs_list
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment