Commit c564541b authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/davem/sparc-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 288f7f44 26815161
...@@ -32,6 +32,8 @@ static inline const char *msk2str(unsigned int mask) ...@@ -32,6 +32,8 @@ static inline const char *msk2str(unsigned int mask)
case PM_256M: return "256Mb"; case PM_256M: return "256Mb";
#endif #endif
} }
return "unknown";
} }
#define BARRIER() \ #define BARRIER() \
......
...@@ -32,6 +32,8 @@ static inline const char *msk2str(unsigned int mask) ...@@ -32,6 +32,8 @@ static inline const char *msk2str(unsigned int mask)
case PM_256M: return "256Mb"; case PM_256M: return "256Mb";
#endif #endif
} }
return "unknown";
} }
#define BARRIER() \ #define BARRIER() \
......
...@@ -11,3 +11,5 @@ USER_OBJS := $(foreach file,$(USER_OBJS),$(obj)/$(file)) ...@@ -11,3 +11,5 @@ USER_OBJS := $(foreach file,$(USER_OBJS),$(obj)/$(file))
$(USER_OBJS) : %.o: %.c $(USER_OBJS) : %.o: %.c
$(CC) $(CFLAGS_$(notdir $@)) $(USER_CFLAGS) -c -o $@ $< $(CC) $(CFLAGS_$(notdir $@)) $(USER_CFLAGS) -c -o $@ $<
subdir- := util
...@@ -1748,12 +1748,16 @@ static int agp_intel_resume(struct pci_dev *pdev) ...@@ -1748,12 +1748,16 @@ static int agp_intel_resume(struct pci_dev *pdev)
if (bridge->driver == &intel_generic_driver) if (bridge->driver == &intel_generic_driver)
intel_configure(); intel_configure();
else if (bridge->driver == &intel_850_driver)
intel_850_configure();
else if (bridge->driver == &intel_845_driver) else if (bridge->driver == &intel_845_driver)
intel_845_configure(); intel_845_configure();
else if (bridge->driver == &intel_830mp_driver) else if (bridge->driver == &intel_830mp_driver)
intel_830mp_configure(); intel_830mp_configure();
else if (bridge->driver == &intel_915_driver) else if (bridge->driver == &intel_915_driver)
intel_i915_configure(); intel_i915_configure();
else if (bridge->driver == &intel_830_driver)
intel_i830_configure();
return 0; return 0;
} }
......
...@@ -859,7 +859,7 @@ qla2x00_queuecommand(struct scsi_cmnd *cmd, void (*fn)(struct scsi_cmnd *)) ...@@ -859,7 +859,7 @@ qla2x00_queuecommand(struct scsi_cmnd *cmd, void (*fn)(struct scsi_cmnd *))
* In all other cases we'll let an irq pick up our IO and submit it * In all other cases we'll let an irq pick up our IO and submit it
* to the controller to improve affinity. * to the controller to improve affinity.
*/ */
if (smp_processor_id() == ha->last_irq_cpu || was_empty) if (_smp_processor_id() == ha->last_irq_cpu || was_empty)
qla2x00_next(ha); qla2x00_next(ha);
spin_lock_irq(ha->host->host_lock); spin_lock_irq(ha->host->host_lock);
......
...@@ -987,8 +987,11 @@ receive_chars(struct uart_8250_port *up, int *status, struct pt_regs *regs) ...@@ -987,8 +987,11 @@ receive_chars(struct uart_8250_port *up, int *status, struct pt_regs *regs)
/* The following is not allowed by the tty layer and /* The following is not allowed by the tty layer and
unsafe. It should be fixed ASAP */ unsafe. It should be fixed ASAP */
if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) { if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) {
if(tty->low_latency) if (tty->low_latency) {
spin_unlock(&up->port.lock);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
spin_lock(&up->port.lock);
}
/* If this failed then we will throw away the /* If this failed then we will throw away the
bytes but must do so to clear interrupts */ bytes but must do so to clear interrupts */
} }
...@@ -1059,7 +1062,9 @@ receive_chars(struct uart_8250_port *up, int *status, struct pt_regs *regs) ...@@ -1059,7 +1062,9 @@ receive_chars(struct uart_8250_port *up, int *status, struct pt_regs *regs)
ignore_char: ignore_char:
lsr = serial_inp(up, UART_LSR); lsr = serial_inp(up, UART_LSR);
} while ((lsr & UART_LSR_DR) && (max_count-- > 0)); } while ((lsr & UART_LSR_DR) && (max_count-- > 0));
spin_unlock(&up->port.lock);
tty_flip_buffer_push(tty); tty_flip_buffer_push(tty);
spin_lock(&up->port.lock);
*status = lsr; *status = lsr;
} }
......
...@@ -16,9 +16,30 @@ ...@@ -16,9 +16,30 @@
#define HOSTFS_ATTR_CTIME 64 #define HOSTFS_ATTR_CTIME 64
#define HOSTFS_ATTR_ATIME_SET 128 #define HOSTFS_ATTR_ATIME_SET 128
#define HOSTFS_ATTR_MTIME_SET 256 #define HOSTFS_ATTR_MTIME_SET 256
/* These two are unused by hostfs. */
#define HOSTFS_ATTR_FORCE 512 /* Not a change, but a change it */ #define HOSTFS_ATTR_FORCE 512 /* Not a change, but a change it */
#define HOSTFS_ATTR_ATTR_FLAG 1024 #define HOSTFS_ATTR_ATTR_FLAG 1024
/* If you are very careful, you'll notice that these two are missing:
*
* #define ATTR_KILL_SUID 2048
* #define ATTR_KILL_SGID 4096
*
* and this is because they were added in 2.5 development in this patch:
*
* http://linux.bkbits.net:8080/linux-2.5/
* cset@3caf4a12k4XgDzK7wyK-TGpSZ9u2Ww?nav=index.html
* |src/.|src/include|src/include/linux|related/include/linux/fs.h
*
* Actually, they are not needed by most ->setattr() methods - they are set by
* callers of notify_change() to notify that the setuid/setgid bits must be
* dropped.
* notify_change() will delete those flags, make sure attr->ia_valid & ATTR_MODE
* is on, and remove the appropriate bits from attr->ia_mode (attr is a
* "struct iattr *"). -BlaisorBlade
*/
struct hostfs_iattr { struct hostfs_iattr {
unsigned int ia_valid; unsigned int ia_valid;
mode_t ia_mode; mode_t ia_mode;
......
...@@ -823,6 +823,10 @@ int hostfs_setattr(struct dentry *dentry, struct iattr *attr) ...@@ -823,6 +823,10 @@ int hostfs_setattr(struct dentry *dentry, struct iattr *attr)
char *name; char *name;
int err; int err;
err = inode_change_ok(dentry->d_inode, attr);
if (err)
return err;
if(append) if(append)
attr->ia_valid &= ~ATTR_SIZE; attr->ia_valid &= ~ATTR_SIZE;
......
...@@ -531,6 +531,7 @@ struct file_operations linvfs_dir_operations = { ...@@ -531,6 +531,7 @@ struct file_operations linvfs_dir_operations = {
static struct vm_operations_struct linvfs_file_vm_ops = { static struct vm_operations_struct linvfs_file_vm_ops = {
.nopage = filemap_nopage, .nopage = filemap_nopage,
.populate = filemap_populate,
#ifdef HAVE_VMOP_MPROTECT #ifdef HAVE_VMOP_MPROTECT
.mprotect = linvfs_mprotect, .mprotect = linvfs_mprotect,
#endif #endif
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
"thread_return:\n\t" \ "thread_return:\n\t" \
"movq %%gs:%P[pda_pcurrent],%%rsi\n\t" \ "movq %%gs:%P[pda_pcurrent],%%rsi\n\t" \
"movq %P[thread_info](%%rsi),%%r8\n\t" \ "movq %P[thread_info](%%rsi),%%r8\n\t" \
"btr %[tif_fork],%P[ti_flags](%%r8)\n\t" \ LOCK "btr %[tif_fork],%P[ti_flags](%%r8)\n\t" \
"movq %%rax,%%rdi\n\t" \ "movq %%rax,%%rdi\n\t" \
"jc ret_from_fork\n\t" \ "jc ret_from_fork\n\t" \
RESTORE_CONTEXT \ RESTORE_CONTEXT \
......
...@@ -756,7 +756,9 @@ extern unsigned long page_unuse(struct page *); ...@@ -756,7 +756,9 @@ extern unsigned long page_unuse(struct page *);
extern void truncate_inode_pages(struct address_space *, loff_t); extern void truncate_inode_pages(struct address_space *, loff_t);
/* generic vm_area_ops exported for stackable file systems */ /* generic vm_area_ops exported for stackable file systems */
struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *); extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *);
extern int filemap_populate(struct vm_area_struct *, unsigned long,
unsigned long, pgprot_t, unsigned long, int);
/* mm/page-writeback.c */ /* mm/page-writeback.c */
int write_one_page(struct page *page, int wait); int write_one_page(struct page *page, int wait);
......
...@@ -867,7 +867,7 @@ void wait_task_inactive(task_t * p) ...@@ -867,7 +867,7 @@ void wait_task_inactive(task_t * p)
repeat: repeat:
rq = task_rq_lock(p, &flags); rq = task_rq_lock(p, &flags);
/* Must be off runqueue entirely, not preempted. */ /* Must be off runqueue entirely, not preempted. */
if (unlikely(p->array)) { if (unlikely(p->array || task_running(rq, p))) {
/* If it's preempted, we yield. It could be a while. */ /* If it's preempted, we yield. It could be a while. */
preempted = !task_running(rq, p); preempted = !task_running(rq, p);
task_rq_unlock(rq, &flags); task_rq_unlock(rq, &flags);
...@@ -885,6 +885,12 @@ void wait_task_inactive(task_t * p) ...@@ -885,6 +885,12 @@ void wait_task_inactive(task_t * p)
* *
* Cause a process which is running on another CPU to enter * Cause a process which is running on another CPU to enter
* kernel-mode, without any delay. (to get signals handled.) * kernel-mode, without any delay. (to get signals handled.)
*
* NOTE: this function doesnt have to take the runqueue lock,
* because all it wants to ensure is that the remote task enters
* the kernel. If the IPI races and the task has been migrated
* to another CPU then no harm is done and the purpose has been
* achieved as well.
*/ */
void kick_process(task_t *p) void kick_process(task_t *p)
{ {
......
...@@ -1458,11 +1458,8 @@ static struct page * filemap_getpage(struct file *file, unsigned long pgoff, ...@@ -1458,11 +1458,8 @@ static struct page * filemap_getpage(struct file *file, unsigned long pgoff,
return NULL; return NULL;
} }
static int filemap_populate(struct vm_area_struct *vma, int filemap_populate(struct vm_area_struct *vma, unsigned long addr,
unsigned long addr, unsigned long len, pgprot_t prot, unsigned long pgoff,
unsigned long len,
pgprot_t prot,
unsigned long pgoff,
int nonblock) int nonblock)
{ {
struct file *file = vma->vm_file; struct file *file = vma->vm_file;
...@@ -1523,6 +1520,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma) ...@@ -1523,6 +1520,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
vma->vm_ops = &generic_file_vm_ops; vma->vm_ops = &generic_file_vm_ops;
return 0; return 0;
} }
EXPORT_SYMBOL(filemap_populate);
/* /*
* This is for filesystems which do not implement ->writepage. * This is for filesystems which do not implement ->writepage.
......
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