diff options
| -rw-r--r-- | drivers/char/agp/frontend.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/char/agp/frontend.c b/drivers/char/agp/frontend.c index 857b26227d8..963eff28fa0 100644 --- a/drivers/char/agp/frontend.c +++ b/drivers/char/agp/frontend.c | |||
| @@ -39,6 +39,7 @@ | |||
| 39 | #include <linux/mm.h> | 39 | #include <linux/mm.h> |
| 40 | #include <linux/fs.h> | 40 | #include <linux/fs.h> |
| 41 | #include <linux/sched.h> | 41 | #include <linux/sched.h> |
| 42 | #include <linux/smp_lock.h> | ||
| 42 | #include <asm/uaccess.h> | 43 | #include <asm/uaccess.h> |
| 43 | #include <asm/pgtable.h> | 44 | #include <asm/pgtable.h> |
| 44 | #include "agp.h" | 45 | #include "agp.h" |
| @@ -677,6 +678,7 @@ static int agp_open(struct inode *inode, struct file *file) | |||
| 677 | struct agp_client *client; | 678 | struct agp_client *client; |
| 678 | int rc = -ENXIO; | 679 | int rc = -ENXIO; |
| 679 | 680 | ||
| 681 | lock_kernel(); | ||
| 680 | mutex_lock(&(agp_fe.agp_mutex)); | 682 | mutex_lock(&(agp_fe.agp_mutex)); |
| 681 | 683 | ||
| 682 | if (minor != AGPGART_MINOR) | 684 | if (minor != AGPGART_MINOR) |
| @@ -703,12 +705,14 @@ static int agp_open(struct inode *inode, struct file *file) | |||
| 703 | agp_insert_file_private(priv); | 705 | agp_insert_file_private(priv); |
| 704 | DBG("private=%p, client=%p", priv, client); | 706 | DBG("private=%p, client=%p", priv, client); |
| 705 | mutex_unlock(&(agp_fe.agp_mutex)); | 707 | mutex_unlock(&(agp_fe.agp_mutex)); |
| 708 | unlock_kernel(); | ||
| 706 | return 0; | 709 | return 0; |
| 707 | 710 | ||
| 708 | err_out_nomem: | 711 | err_out_nomem: |
| 709 | rc = -ENOMEM; | 712 | rc = -ENOMEM; |
| 710 | err_out: | 713 | err_out: |
| 711 | mutex_unlock(&(agp_fe.agp_mutex)); | 714 | mutex_unlock(&(agp_fe.agp_mutex)); |
| 715 | unlock_kernel(); | ||
| 712 | return rc; | 716 | return rc; |
| 713 | } | 717 | } |
| 714 | 718 | ||
