~n-muench/ubuntu/oneiric/open-vm-tools/open-vm-tools.fix-836277

« back to all changes in this revision

Viewing changes to modules/linux/vmci/vmci_drv.c

  • Committer: Evan Broder
  • Date: 2010-03-21 23:26:53 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: broder@mit.edu-20100321232653-5a57r7v7ch4o6byv
Merging shared upstream rev into target branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
#include "compat_ioport.h"
35
35
#include "compat_interrupt.h"
36
36
#include "compat_page.h"
 
37
#include "compat_mutex.h"
37
38
#include "vm_basic_types.h"
38
39
#include "vm_device_version.h"
39
40
#include "kernelStubs.h"
53
54
#define VMCI_DEVICE_MINOR_NUM 0
54
55
 
55
56
typedef struct vmci_device {
56
 
   struct semaphore lock;
 
57
   compat_mutex_t lock;
57
58
 
58
59
   unsigned int ioaddr;
59
60
   unsigned int ioaddr_size;
148
149
   printk("VMCI: Major device number is: %d\n", device_major_nr);
149
150
 
150
151
   /* Initialize device data. */
151
 
   init_MUTEX(&vmci_dev.lock);
 
152
   compat_mutex_init(&vmci_dev.lock);
152
153
   spin_lock_init(&vmci_dev.dev_spinlock);
153
154
   vmci_dev.enabled = FALSE;
154
155
 
269
270
   outl(VMCI_CAPS_DATAGRAM, ioaddr + VMCI_CAPS_ADDR);
270
271
 
271
272
   /* Device struct initialization. */
272
 
   down(&vmci_dev.lock);
 
273
   compat_mutex_lock(&vmci_dev.lock);
273
274
   if (vmci_dev.enabled) {
274
275
      printk(KERN_ERR "VMCI device already enabled.\n");
275
276
      goto unlock;
312
313
 
313
314
   printk(KERN_INFO "Registered vmci device.\n");
314
315
 
315
 
   up(&vmci_dev.lock);
 
316
   compat_mutex_unlock(&vmci_dev.lock);
316
317
 
317
318
   /* Enable specific interrupt bits. */
318
319
   outl(VMCI_IMR_DATAGRAM, vmci_dev.ioaddr + VMCI_IMR_ADDR);
328
329
   VMCIEvent_Exit();
329
330
   VMCIProcess_Exit();
330
331
 unlock:
331
 
   up(&vmci_dev.lock);
 
332
   compat_mutex_unlock(&vmci_dev.lock);
332
333
 release:
333
334
   release_region(ioaddr, ioaddr_size);
334
335
 pci_disable:
368
369
   //VMCIDatagram_Exit();
369
370
   VMCIProcess_Exit();
370
371
 
371
 
   down(&dev->lock);
 
372
   compat_mutex_lock(&dev->lock);
372
373
   printk(KERN_INFO "Resetting vmci device\n");
373
374
   outl(VMCI_CONTROL_RESET, vmci_dev.ioaddr + VMCI_CONTROL_ADDR);
374
375
   free_irq(dev->irq, dev);
376
377
   dev->enabled = FALSE;
377
378
 
378
379
   printk(KERN_INFO "Unregistered vmci device.\n");
379
 
   up(&dev->lock);
 
380
   compat_mutex_unlock(&dev->lock);
380
381
 
381
382
   compat_pci_disable_device(pdev);
382
383
}
411
412
      return -ENODEV;
412
413
   }
413
414
 
414
 
   down(&vmci_dev.lock);
 
415
   compat_mutex_lock(&vmci_dev.lock);
415
416
   if (!vmci_dev.enabled) {
416
417
      printk(KERN_INFO "Received open on uninitialized vmci device.\n");
417
418
      errcode = -ENODEV;
429
430
   devHndl->objType = VMCIOBJ_NOT_SET;
430
431
   file->private_data = devHndl;
431
432
 
432
 
   up(&vmci_dev.lock);
 
433
   compat_mutex_unlock(&vmci_dev.lock);
433
434
 
434
435
   return 0;
435
436
 
436
437
 unlock:
437
 
   up(&vmci_dev.lock);
 
438
   compat_mutex_unlock(&vmci_dev.lock);
438
439
   return errcode;
439
440
}
440
441
 
527
528
   }
528
529
 
529
530
   case IOCTL_VMCI_CREATE_DATAGRAM_PROCESS: {
530
 
      VMCIDatagramCreateInfo createInfo;
 
531
      VMCIDatagramCreateProcessInfo createInfo;
531
532
      VMCIDatagramProcess *dgmProc;
532
533
 
533
534
      if (devHndl->objType != VMCIOBJ_NOT_SET) {
795
796
{
796
797
   Bool retval;
797
798
 
798
 
   down(&vmci_dev.lock);
 
799
   compat_mutex_lock(&vmci_dev.lock);
799
800
   retval = vmci_dev.enabled;
800
 
   up(&vmci_dev.lock);
 
801
   compat_mutex_unlock(&vmci_dev.lock);
801
802
 
802
803
   return retval;
803
804
}