Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6

* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6:
  firewire: ohci: fix DMA unmapping in an error path
  firewire: cdev: fix 32 bit userland on 64 bit kernel compat corner cases
This commit is contained in:
Linus Torvalds 2011-08-15 08:40:49 -07:00
commit 6f02bfc404
2 changed files with 28 additions and 5 deletions

View File

@ -216,15 +216,33 @@ struct inbound_phy_packet_event {
struct fw_cdev_event_phy_packet phy_packet; struct fw_cdev_event_phy_packet phy_packet;
}; };
static inline void __user *u64_to_uptr(__u64 value) #ifdef CONFIG_COMPAT
static void __user *u64_to_uptr(u64 value)
{
if (is_compat_task())
return compat_ptr(value);
else
return (void __user *)(unsigned long)value;
}
static u64 uptr_to_u64(void __user *ptr)
{
if (is_compat_task())
return ptr_to_compat(ptr);
else
return (u64)(unsigned long)ptr;
}
#else
static inline void __user *u64_to_uptr(u64 value)
{ {
return (void __user *)(unsigned long)value; return (void __user *)(unsigned long)value;
} }
static inline __u64 uptr_to_u64(void __user *ptr) static inline u64 uptr_to_u64(void __user *ptr)
{ {
return (__u64)(unsigned long)ptr; return (u64)(unsigned long)ptr;
} }
#endif /* CONFIG_COMPAT */
static int fw_device_op_open(struct inode *inode, struct file *file) static int fw_device_op_open(struct inode *inode, struct file *file)
{ {

View File

@ -2179,8 +2179,13 @@ static int ohci_enable(struct fw_card *card,
ohci_driver_name, ohci)) { ohci_driver_name, ohci)) {
fw_error("Failed to allocate interrupt %d.\n", dev->irq); fw_error("Failed to allocate interrupt %d.\n", dev->irq);
pci_disable_msi(dev); pci_disable_msi(dev);
dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE,
ohci->config_rom, ohci->config_rom_bus); if (config_rom) {
dma_free_coherent(ohci->card.device, CONFIG_ROM_SIZE,
ohci->next_config_rom,
ohci->next_config_rom_bus);
ohci->next_config_rom = NULL;
}
return -EIO; return -EIO;
} }