aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Drake <ddrake@brontes3d.com>2006-10-18 16:37:14 -0400
committerStefan Richter <stefanr@s5r6.in-berlin.de>2006-12-07 15:31:04 -0500
commit3c21cfc4babaf4d20384f6f70def308e9b945159 (patch)
treea5bedb18e8df5fd6349f35053d55b3701aa025bf
parentc1c9c7cd9f33ad6ff4407638060fe2730560bd56 (diff)
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>
-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 9bc65059cc69..776b6618e80e 100644
--- a/drivers/ieee1394/video1394.c
+++ b/drivers/ieee1394/video1394.c
@@ -884,13 +884,14 @@ static int __video1394_ioctl(struct file *file,
884 struct dma_iso_ctx *d; 884 struct dma_iso_ctx *d;
885 int next_prg; 885 int next_prg;
886 886
887 if (copy_from_user(&v, argp, sizeof(v))) 887 if (unlikely(copy_from_user(&v, argp, sizeof(v))))
888 return -EFAULT; 888 return -EFAULT;
889 889
890 d = find_ctx(&ctx->context_list, OHCI_ISO_RECEIVE, v.channel); 890 d = find_ctx(&ctx->context_list, OHCI_ISO_RECEIVE, v.channel);
891 if (d == NULL) return -EFAULT; 891 if (unlikely(d == NULL))
892 return -EFAULT;
892 893
893 if ((v.buffer<0) || (v.buffer>=d->num_desc - 1)) { 894 if (unlikely((v.buffer<0) || (v.buffer>=d->num_desc - 1))) {
894 PRINT(KERN_ERR, ohci->host->id, 895 PRINT(KERN_ERR, ohci->host->id,
895 "Buffer %d out of range",v.buffer); 896 "Buffer %d out of range",v.buffer);
896 return -EINVAL; 897 return -EINVAL;
@@ -898,7 +899,7 @@ static int __video1394_ioctl(struct file *file,
898 899
899 spin_lock_irqsave(&d->lock,flags); 900 spin_lock_irqsave(&d->lock,flags);
900 901
901 if (d->buffer_status[v.buffer]==VIDEO1394_BUFFER_QUEUED) { 902 if (unlikely(d->buffer_status[v.buffer]==VIDEO1394_BUFFER_QUEUED)) {
902 PRINT(KERN_ERR, ohci->host->id, 903 PRINT(KERN_ERR, ohci->host->id,
903 "Buffer %d is already used",v.buffer); 904 "Buffer %d is already used",v.buffer);
904 spin_unlock_irqrestore(&d->lock,flags); 905 spin_unlock_irqrestore(&d->lock,flags);
@@ -949,13 +950,14 @@ static int __video1394_ioctl(struct file *file,
949 struct dma_iso_ctx *d; 950 struct dma_iso_ctx *d;
950 int i = 0; 951 int i = 0;
951 952
952 if (copy_from_user(&v, argp, sizeof(v))) 953 if (unlikely(copy_from_user(&v, argp, sizeof(v))))
953 return -EFAULT; 954 return -EFAULT;
954 955
955 d = find_ctx(&ctx->context_list, OHCI_ISO_RECEIVE, v.channel); 956 d = find_ctx(&ctx->context_list, OHCI_ISO_RECEIVE, v.channel);
956 if (d == NULL) return -EFAULT; 957 if (unlikely(d == NULL))
958 return -EFAULT;
957 959
958 if ((v.buffer<0) || (v.buffer>d->num_desc - 1)) { 960 if (unlikely((v.buffer<0) || (v.buffer>d->num_desc - 1))) {
959 PRINT(KERN_ERR, ohci->host->id, 961 PRINT(KERN_ERR, ohci->host->id,
960 "Buffer %d out of range",v.buffer); 962 "Buffer %d out of range",v.buffer);
961 return -EINVAL; 963 return -EINVAL;
@@ -1008,7 +1010,7 @@ static int __video1394_ioctl(struct file *file,
1008 spin_unlock_irqrestore(&d->lock, flags); 1010 spin_unlock_irqrestore(&d->lock, flags);
1009 1011
1010 v.buffer=i; 1012 v.buffer=i;
1011 if (copy_to_user(argp, &v, sizeof(v))) 1013 if (unlikely(copy_to_user(argp, &v, sizeof(v))))
1012 return -EFAULT; 1014 return -EFAULT;
1013 1015
1014 return 0; 1016 return 0;