summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorDaniel Drake <ddrake@brontes3d.com>2006-10-18 20:37:14 (GMT)
committerStefan Richter <stefanr@s5r6.in-berlin.de>2006-12-07 20:31:04 (GMT)
commit3c21cfc4babaf4d20384f6f70def308e9b945159 (patch)
treea5bedb18e8df5fd6349f35053d55b3701aa025bf /drivers
parentc1c9c7cd9f33ad6ff4407638060fe2730560bd56 (diff)
downloadlinux-3c21cfc4babaf4d20384f6f70def308e9b945159.tar.xz
video1394: small optimizations to frame retrieval codepath
Add some GCC branch prediction optimizations to unlikely error/safety conditions in the ioctl handling code commonly called during an application's capture loop. Signed-off-by: Daniel Drake <ddrake@brontes3d.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ieee1394/video1394.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/ieee1394/video1394.c b/drivers/ieee1394/video1394.c
index 9bc6505..776b661 100644
--- a/drivers/ieee1394/video1394.c
+++ b/drivers/ieee1394/video1394.c
@@ -884,13 +884,14 @@ static int __video1394_ioctl(struct file *file,
struct dma_iso_ctx *d;
int next_prg;
- if (copy_from_user(&v, argp, sizeof(v)))
+ if (unlikely(copy_from_user(&v, argp, sizeof(v))))
return -EFAULT;
d = find_ctx(&ctx->context_list, OHCI_ISO_RECEIVE, v.channel);
- if (d == NULL) return -EFAULT;
+ if (unlikely(d == NULL))
+ return -EFAULT;
- if ((v.buffer<0) || (v.buffer>=d->num_desc - 1)) {
+ if (unlikely((v.buffer<0) || (v.buffer>=d->num_desc - 1))) {
PRINT(KERN_ERR, ohci->host->id,
"Buffer %d out of range",v.buffer);
return -EINVAL;
@@ -898,7 +899,7 @@ static int __video1394_ioctl(struct file *file,
spin_lock_irqsave(&d->lock,flags);
- if (d->buffer_status[v.buffer]==VIDEO1394_BUFFER_QUEUED) {
+ if (unlikely(d->buffer_status[v.buffer]==VIDEO1394_BUFFER_QUEUED)) {
PRINT(KERN_ERR, ohci->host->id,
"Buffer %d is already used",v.buffer);
spin_unlock_irqrestore(&d->lock,flags);
@@ -949,13 +950,14 @@ static int __video1394_ioctl(struct file *file,
struct dma_iso_ctx *d;
int i = 0;
- if (copy_from_user(&v, argp, sizeof(v)))
+ if (unlikely(copy_from_user(&v, argp, sizeof(v))))
return -EFAULT;
d = find_ctx(&ctx->context_list, OHCI_ISO_RECEIVE, v.channel);
- if (d == NULL) return -EFAULT;
+ if (unlikely(d == NULL))
+ return -EFAULT;
- if ((v.buffer<0) || (v.buffer>d->num_desc - 1)) {
+ if (unlikely((v.buffer<0) || (v.buffer>d->num_desc - 1))) {
PRINT(KERN_ERR, ohci->host->id,
"Buffer %d out of range",v.buffer);
return -EINVAL;
@@ -1008,7 +1010,7 @@ static int __video1394_ioctl(struct file *file,
spin_unlock_irqrestore(&d->lock, flags);
v.buffer=i;
- if (copy_to_user(argp, &v, sizeof(v)))
+ if (unlikely(copy_to_user(argp, &v, sizeof(v))))
return -EFAULT;
return 0;