Commit 69148aae authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents c349aea6 967a352b
...@@ -723,7 +723,8 @@ osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes, ...@@ -723,7 +723,8 @@ osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
{ {
switch (op) { switch (op) {
case SSI_IEEE_FP_CONTROL: { case SSI_IEEE_FP_CONTROL: {
unsigned long swcr, fpcr, fex; unsigned long swcr, fpcr;
unsigned int *state;
/* /*
* Alpha Architecture Handbook 4.7.7.3: * Alpha Architecture Handbook 4.7.7.3:
...@@ -732,22 +733,42 @@ osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes, ...@@ -732,22 +733,42 @@ osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
* set in the trap shadow of a software-complete insn. * set in the trap shadow of a software-complete insn.
*/ */
/* Update softare trap enable bits. */
if (get_user(swcr, (unsigned long __user *)buffer)) if (get_user(swcr, (unsigned long __user *)buffer))
return -EFAULT; return -EFAULT;
current_thread_info()->ieee_state state = &current_thread_info()->ieee_state;
= ((current_thread_info()->ieee_state & ~IEEE_SW_MASK)
| (swcr & IEEE_SW_MASK)); /* Update softare trap enable bits. */
*state = (*state & ~IEEE_SW_MASK) | (swcr & IEEE_SW_MASK);
/* Update the real fpcr. */
fpcr = rdfpcr() & FPCR_DYN_MASK;
fpcr |= ieee_swcr_to_fpcr(swcr);
wrfpcr(fpcr);
return 0;
}
case SSI_IEEE_RAISE_EXCEPTION: {
unsigned long exc, swcr, fpcr, fex;
unsigned int *state;
if (get_user(exc, (unsigned long __user *)buffer))
return -EFAULT;
state = &current_thread_info()->ieee_state;
exc &= IEEE_STATUS_MASK;
/* Update softare trap enable bits. */
swcr = (*state & IEEE_SW_MASK) | exc;
*state |= exc;
/* Update the real fpcr. */ /* Update the real fpcr. */
fpcr = rdfpcr(); fpcr = rdfpcr();
fpcr &= FPCR_DYN_MASK;
fpcr |= ieee_swcr_to_fpcr(swcr); fpcr |= ieee_swcr_to_fpcr(swcr);
wrfpcr(fpcr); wrfpcr(fpcr);
/* If any exceptions are now unmasked, send a signal. */ /* If any exceptions set by this call, and are unmasked,
fex = ((swcr & IEEE_STATUS_MASK) send a signal. Old exceptions are not signaled. */
>> IEEE_STATUS_TO_EXCSUM_SHIFT) & swcr; fex = (exc >> IEEE_STATUS_TO_EXCSUM_SHIFT) & swcr;
if (fex) { if (fex) {
siginfo_t info; siginfo_t info;
int si_code = 0; int si_code = 0;
...@@ -765,7 +786,6 @@ osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes, ...@@ -765,7 +786,6 @@ osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
info.si_addr = NULL; /* FIXME */ info.si_addr = NULL; /* FIXME */
send_sig_info(SIGFPE, &info, current); send_sig_info(SIGFPE, &info, current);
} }
return 0; return 0;
} }
......
...@@ -107,7 +107,8 @@ char command_line[COMMAND_LINE_SIZE]; ...@@ -107,7 +107,8 @@ char command_line[COMMAND_LINE_SIZE];
struct resource standard_io_resources[] = { struct resource standard_io_resources[] = {
{ "dma1", 0x00, 0x1f, IORESOURCE_BUSY | IORESOURCE_IO }, { "dma1", 0x00, 0x1f, IORESOURCE_BUSY | IORESOURCE_IO },
{ "pic1", 0x20, 0x21, IORESOURCE_BUSY | IORESOURCE_IO }, { "pic1", 0x20, 0x21, IORESOURCE_BUSY | IORESOURCE_IO },
{ "timer", 0x40, 0x5f, IORESOURCE_BUSY | IORESOURCE_IO }, { "timer0", 0x40, 0x43, IORESOURCE_BUSY | IORESOURCE_IO },
{ "timer1", 0x50, 0x53, IORESOURCE_BUSY | IORESOURCE_IO },
{ "keyboard", 0x60, 0x6f, IORESOURCE_BUSY | IORESOURCE_IO }, { "keyboard", 0x60, 0x6f, IORESOURCE_BUSY | IORESOURCE_IO },
{ "dma page reg", 0x80, 0x8f, IORESOURCE_BUSY | IORESOURCE_IO }, { "dma page reg", 0x80, 0x8f, IORESOURCE_BUSY | IORESOURCE_IO },
{ "pic2", 0xa0, 0xa1, IORESOURCE_BUSY | IORESOURCE_IO }, { "pic2", 0xa0, 0xa1, IORESOURCE_BUSY | IORESOURCE_IO },
......
...@@ -463,8 +463,8 @@ static void sca_set_port(port_t *port) ...@@ -463,8 +463,8 @@ static void sca_set_port(port_t *port)
brv >>= 1; /* brv = 2^9 = 512 max in specs */ brv >>= 1; /* brv = 2^9 = 512 max in specs */
/* Baud Rate = CLOCK_BASE / TMC / 2^BR */ /* Baud Rate = CLOCK_BASE / TMC / 2^BR */
tmc = CLOCK_BASE / (brv * port->settings.clock_rate); tmc = CLOCK_BASE / brv / port->settings.clock_rate;
}while(br > 1 && tmc <= 128); }while (br > 1 && tmc <= 128);
if (tmc < 1) { if (tmc < 1) {
tmc = 1; tmc = 1;
...@@ -473,7 +473,7 @@ static void sca_set_port(port_t *port) ...@@ -473,7 +473,7 @@ static void sca_set_port(port_t *port)
} else if (tmc > 255) } else if (tmc > 255)
tmc = 256; /* tmc=0 means 256 - low baud rates */ tmc = 256; /* tmc=0 means 256 - low baud rates */
port->settings.clock_rate = CLOCK_BASE / (brv * tmc); port->settings.clock_rate = CLOCK_BASE / brv / tmc;
} else { } else {
br = 9; /* Minimum clock rate */ br = 9; /* Minimum clock rate */
tmc = 256; /* 8bit = 0 */ tmc = 256; /* 8bit = 0 */
......
...@@ -334,9 +334,10 @@ prism54_get_freq(struct net_device *ndev, struct iw_request_info *info, ...@@ -334,9 +334,10 @@ prism54_get_freq(struct net_device *ndev, struct iw_request_info *info,
int rvalue; int rvalue;
rvalue = mgt_get_request(priv, DOT11_OID_CHANNEL, 0, NULL, &r); rvalue = mgt_get_request(priv, DOT11_OID_CHANNEL, 0, NULL, &r);
fwrq->i = r.u;
rvalue |= mgt_get_request(priv, DOT11_OID_FREQUENCY, 0, NULL, &r);
fwrq->m = r.u; fwrq->m = r.u;
fwrq->e = 0; fwrq->e = 3;
return rvalue; return rvalue;
} }
......
...@@ -626,11 +626,8 @@ pagebuf_get( /* allocate a buffer */ ...@@ -626,11 +626,8 @@ pagebuf_get( /* allocate a buffer */
pb = _pagebuf_find(target, ioff, isize, flags, new_pb); pb = _pagebuf_find(target, ioff, isize, flags, new_pb);
if (pb == new_pb) { if (pb == new_pb) {
error = _pagebuf_lookup_pages(pb, flags); error = _pagebuf_lookup_pages(pb, flags);
if (unlikely(error)) { if (error)
printk(KERN_WARNING
"pagebuf_get: failed to lookup pages\n");
goto no_buffer; goto no_buffer;
}
} else { } else {
pagebuf_deallocate(new_pb); pagebuf_deallocate(new_pb);
if (unlikely(pb == NULL)) if (unlikely(pb == NULL))
......
...@@ -164,8 +164,6 @@ __linvfs_readv( ...@@ -164,8 +164,6 @@ __linvfs_readv(
if (unlikely(file->f_flags & O_DIRECT)) if (unlikely(file->f_flags & O_DIRECT))
ioflags |= IO_ISDIRECT; ioflags |= IO_ISDIRECT;
VOP_READ(vp, &kiocb, iov, nr_segs, &kiocb.ki_pos, ioflags, NULL, rval); VOP_READ(vp, &kiocb, iov, nr_segs, &kiocb.ki_pos, ioflags, NULL, rval);
if (rval == -EIOCBQUEUED)
rval = wait_on_sync_kiocb(&kiocb);
*ppos = kiocb.ki_pos; *ppos = kiocb.ki_pos;
return rval; return rval;
...@@ -211,8 +209,6 @@ __linvfs_writev( ...@@ -211,8 +209,6 @@ __linvfs_writev(
ioflags |= IO_ISDIRECT; ioflags |= IO_ISDIRECT;
VOP_WRITE(vp, &kiocb, iov, nr_segs, &kiocb.ki_pos, ioflags, NULL, rval); VOP_WRITE(vp, &kiocb, iov, nr_segs, &kiocb.ki_pos, ioflags, NULL, rval);
if (rval == -EIOCBQUEUED)
rval = wait_on_sync_kiocb(&kiocb);
*ppos = kiocb.ki_pos; *ppos = kiocb.ki_pos;
return rval; return rval;
......
...@@ -319,6 +319,8 @@ xfs_read( ...@@ -319,6 +319,8 @@ xfs_read(
xfs_rw_enter_trace(XFS_READ_ENTER, &ip->i_iocore, xfs_rw_enter_trace(XFS_READ_ENTER, &ip->i_iocore,
(void *)iovp, segs, *offset, ioflags); (void *)iovp, segs, *offset, ioflags);
ret = __generic_file_aio_read(iocb, iovp, segs, offset); ret = __generic_file_aio_read(iocb, iovp, segs, offset);
if (ret == -EIOCBQUEUED)
ret = wait_on_sync_kiocb(iocb);
xfs_iunlock(ip, XFS_IOLOCK_SHARED); xfs_iunlock(ip, XFS_IOLOCK_SHARED);
if (ret > 0) if (ret > 0)
...@@ -846,6 +848,9 @@ xfs_write( ...@@ -846,6 +848,9 @@ xfs_write(
current->backing_dev_info = NULL; current->backing_dev_info = NULL;
if (ret == -EIOCBQUEUED)
ret = wait_on_sync_kiocb(iocb);
if ((ret == -ENOSPC) && if ((ret == -ENOSPC) &&
DM_EVENT_ENABLED(vp->v_vfsp, xip, DM_EVENT_NOSPACE) && DM_EVENT_ENABLED(vp->v_vfsp, xip, DM_EVENT_NOSPACE) &&
!(ioflags & IO_INVIS)) { !(ioflags & IO_INVIS)) {
...@@ -955,11 +960,13 @@ xfs_write( ...@@ -955,11 +960,13 @@ xfs_write(
} }
xfs_rwunlock(bdp, locktype); xfs_rwunlock(bdp, locktype);
if (need_isem)
up(&inode->i_sem);
error = sync_page_range(inode, mapping, pos, ret); error = sync_page_range(inode, mapping, pos, ret);
if (!error) if (!error)
error = -ret; error = ret;
goto out_unlock_isem; return error;
} }
out_unlock_internal: out_unlock_internal:
......
...@@ -1411,9 +1411,13 @@ xlog_sync(xlog_t *log, ...@@ -1411,9 +1411,13 @@ xlog_sync(xlog_t *log,
xlog_pack_data(log, iclog); /* put cycle number in every block */ xlog_pack_data(log, iclog); /* put cycle number in every block */
/* real byte length */ /* real byte length */
if (XFS_SB_VERSION_HASLOGV2(&log->l_mp->m_sb)) {
INT_SET(iclog->ic_header.h_len, INT_SET(iclog->ic_header.h_len,
ARCH_CONVERT, ARCH_CONVERT,
iclog->ic_offset + iclog->ic_roundoff); iclog->ic_offset + iclog->ic_roundoff);
} else {
INT_SET(iclog->ic_header.h_len, ARCH_CONVERT, iclog->ic_offset);
}
/* put ops count in correct order */ /* put ops count in correct order */
ops = iclog->ic_header.h_num_logops; ops = iclog->ic_header.h_num_logops;
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#define SSI_IEEE_FP_CONTROL 14 #define SSI_IEEE_FP_CONTROL 14
#define SSI_IEEE_STATE_AT_SIGNAL 15 #define SSI_IEEE_STATE_AT_SIGNAL 15
#define SSI_IEEE_IGNORE_STATE_AT_SIGNAL 16 #define SSI_IEEE_IGNORE_STATE_AT_SIGNAL 16
#define SSI_IEEE_RAISE_EXCEPTION 1001 /* linux specific */
#define SSIN_UACPROC 6 #define SSIN_UACPROC 6
......
...@@ -80,5 +80,5 @@ ...@@ -80,5 +80,5 @@
#define LOCK_TEXT \ #define LOCK_TEXT \
VMLINUX_SYMBOL(__lock_text_start) = .; \ VMLINUX_SYMBOL(__lock_text_start) = .; \
*(.lock.text) \ *(.spinlock.text) \
VMLINUX_SYMBOL(__lock_text_end) = .; VMLINUX_SYMBOL(__lock_text_end) = .;
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