diff options
| -rw-r--r-- | drivers/char/agp/frontend.c | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/drivers/char/agp/frontend.c b/drivers/char/agp/frontend.c index a96f3197e60f..43412c03969e 100644 --- a/drivers/char/agp/frontend.c +++ b/drivers/char/agp/frontend.c | |||
| @@ -676,25 +676,25 @@ static int agp_open(struct inode *inode, struct file *file) | |||
| 676 | int minor = iminor(inode); | 676 | int minor = iminor(inode); |
| 677 | struct agp_file_private *priv; | 677 | struct agp_file_private *priv; |
| 678 | struct agp_client *client; | 678 | struct agp_client *client; |
| 679 | int rc = -ENXIO; | ||
| 680 | |||
| 681 | lock_kernel(); | ||
| 682 | mutex_lock(&(agp_fe.agp_mutex)); | ||
| 683 | 679 | ||
| 684 | if (minor != AGPGART_MINOR) | 680 | if (minor != AGPGART_MINOR) |
| 685 | goto err_out; | 681 | return -ENXIO; |
| 682 | |||
| 683 | mutex_lock(&(agp_fe.agp_mutex)); | ||
| 686 | 684 | ||
| 687 | priv = kzalloc(sizeof(struct agp_file_private), GFP_KERNEL); | 685 | priv = kzalloc(sizeof(struct agp_file_private), GFP_KERNEL); |
| 688 | if (priv == NULL) | 686 | if (priv == NULL) { |
| 689 | goto err_out_nomem; | 687 | mutex_unlock(&(agp_fe.agp_mutex)); |
| 688 | return -ENOMEM; | ||
| 689 | } | ||
| 690 | 690 | ||
| 691 | set_bit(AGP_FF_ALLOW_CLIENT, &priv->access_flags); | 691 | set_bit(AGP_FF_ALLOW_CLIENT, &priv->access_flags); |
| 692 | priv->my_pid = current->pid; | 692 | priv->my_pid = current->pid; |
| 693 | 693 | ||
| 694 | if (capable(CAP_SYS_RAWIO)) { | 694 | if (capable(CAP_SYS_RAWIO)) |
| 695 | /* Root priv, can be controller */ | 695 | /* Root priv, can be controller */ |
| 696 | set_bit(AGP_FF_ALLOW_CONTROLLER, &priv->access_flags); | 696 | set_bit(AGP_FF_ALLOW_CONTROLLER, &priv->access_flags); |
| 697 | } | 697 | |
| 698 | client = agp_find_client_by_pid(current->pid); | 698 | client = agp_find_client_by_pid(current->pid); |
| 699 | 699 | ||
| 700 | if (client != NULL) { | 700 | if (client != NULL) { |
| @@ -704,16 +704,10 @@ static int agp_open(struct inode *inode, struct file *file) | |||
| 704 | file->private_data = (void *) priv; | 704 | file->private_data = (void *) priv; |
| 705 | agp_insert_file_private(priv); | 705 | agp_insert_file_private(priv); |
| 706 | DBG("private=%p, client=%p", priv, client); | 706 | DBG("private=%p, client=%p", priv, client); |
| 707 | mutex_unlock(&(agp_fe.agp_mutex)); | ||
| 708 | unlock_kernel(); | ||
| 709 | return 0; | ||
| 710 | 707 | ||
| 711 | err_out_nomem: | ||
| 712 | rc = -ENOMEM; | ||
| 713 | err_out: | ||
| 714 | mutex_unlock(&(agp_fe.agp_mutex)); | 708 | mutex_unlock(&(agp_fe.agp_mutex)); |
| 715 | unlock_kernel(); | 709 | |
| 716 | return rc; | 710 | return 0; |
| 717 | } | 711 | } |
| 718 | 712 | ||
| 719 | 713 | ||
