diff options
Diffstat (limited to 'drivers')
44 files changed, 415 insertions, 377 deletions
| diff --git a/drivers/char/cs5535_gpio.c b/drivers/char/cs5535_gpio.c index 5d72f50de1ac..46d66037b917 100644 --- a/drivers/char/cs5535_gpio.c +++ b/drivers/char/cs5535_gpio.c | |||
| @@ -241,9 +241,10 @@ static int __init cs5535_gpio_init(void) | |||
| 241 | static void __exit cs5535_gpio_cleanup(void) | 241 | static void __exit cs5535_gpio_cleanup(void) | 
| 242 | { | 242 | { | 
| 243 | dev_t dev_id = MKDEV(major, 0); | 243 | dev_t dev_id = MKDEV(major, 0); | 
| 244 | |||
| 245 | cdev_del(&cs5535_gpio_cdev); | ||
| 244 | unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT); | 246 | unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT); | 
| 245 | if (gpio_base != 0) | 247 | release_region(gpio_base, CS5535_GPIO_SIZE); | 
| 246 | release_region(gpio_base, CS5535_GPIO_SIZE); | ||
| 247 | } | 248 | } | 
| 248 | 249 | ||
| 249 | module_init(cs5535_gpio_init); | 250 | module_init(cs5535_gpio_init); | 
| diff --git a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h index edc72a6348a7..e1aadae00623 100644 --- a/drivers/char/drm/drmP.h +++ b/drivers/char/drm/drmP.h | |||
| @@ -815,8 +815,6 @@ extern int drm_mem_info(char *buf, char **start, off_t offset, | |||
| 815 | extern void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area); | 815 | extern void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area); | 
| 816 | extern void *drm_ioremap(unsigned long offset, unsigned long size, | 816 | extern void *drm_ioremap(unsigned long offset, unsigned long size, | 
| 817 | drm_device_t * dev); | 817 | drm_device_t * dev); | 
| 818 | extern void *drm_ioremap_nocache(unsigned long offset, unsigned long size, | ||
| 819 | drm_device_t * dev); | ||
| 820 | extern void drm_ioremapfree(void *pt, unsigned long size, drm_device_t * dev); | 818 | extern void drm_ioremapfree(void *pt, unsigned long size, drm_device_t * dev); | 
| 821 | 819 | ||
| 822 | extern DRM_AGP_MEM *drm_alloc_agp(drm_device_t * dev, int pages, u32 type); | 820 | extern DRM_AGP_MEM *drm_alloc_agp(drm_device_t * dev, int pages, u32 type); | 
| @@ -1022,11 +1020,13 @@ static __inline__ void drm_core_ioremap(struct drm_map *map, | |||
| 1022 | map->handle = drm_ioremap(map->offset, map->size, dev); | 1020 | map->handle = drm_ioremap(map->offset, map->size, dev); | 
| 1023 | } | 1021 | } | 
| 1024 | 1022 | ||
| 1023 | #if 0 | ||
| 1025 | static __inline__ void drm_core_ioremap_nocache(struct drm_map *map, | 1024 | static __inline__ void drm_core_ioremap_nocache(struct drm_map *map, | 
| 1026 | struct drm_device *dev) | 1025 | struct drm_device *dev) | 
| 1027 | { | 1026 | { | 
| 1028 | map->handle = drm_ioremap_nocache(map->offset, map->size, dev); | 1027 | map->handle = drm_ioremap_nocache(map->offset, map->size, dev); | 
| 1029 | } | 1028 | } | 
| 1029 | #endif /* 0 */ | ||
| 1030 | 1030 | ||
| 1031 | static __inline__ void drm_core_ioremapfree(struct drm_map *map, | 1031 | static __inline__ void drm_core_ioremapfree(struct drm_map *map, | 
| 1032 | struct drm_device *dev) | 1032 | struct drm_device *dev) | 
| diff --git a/drivers/char/drm/drm_drv.c b/drivers/char/drm/drm_drv.c index dc6bbe8a18dc..3c0b882a8e72 100644 --- a/drivers/char/drm/drm_drv.c +++ b/drivers/char/drm/drm_drv.c | |||
| @@ -75,8 +75,8 @@ static drm_ioctl_desc_t drm_ioctls[] = { | |||
| 75 | [DRM_IOCTL_NR(DRM_IOCTL_SET_SAREA_CTX)] = {drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}, | 75 | [DRM_IOCTL_NR(DRM_IOCTL_SET_SAREA_CTX)] = {drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}, | 
| 76 | [DRM_IOCTL_NR(DRM_IOCTL_GET_SAREA_CTX)] = {drm_getsareactx, DRM_AUTH}, | 76 | [DRM_IOCTL_NR(DRM_IOCTL_GET_SAREA_CTX)] = {drm_getsareactx, DRM_AUTH}, | 
| 77 | 77 | ||
| 78 | [DRM_IOCTL_NR(DRM_IOCTL_ADD_CTX)] = {drm_addctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}, | 78 | [DRM_IOCTL_NR(DRM_IOCTL_ADD_CTX)] = {drm_addctx, DRM_AUTH|DRM_ROOT_ONLY}, | 
| 79 | [DRM_IOCTL_NR(DRM_IOCTL_RM_CTX)] = {drm_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}, | 79 | [DRM_IOCTL_NR(DRM_IOCTL_RM_CTX)] = {drm_rmctx, DRM_AUTH|DRM_ROOT_ONLY}, | 
| 80 | [DRM_IOCTL_NR(DRM_IOCTL_MOD_CTX)] = {drm_modctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}, | 80 | [DRM_IOCTL_NR(DRM_IOCTL_MOD_CTX)] = {drm_modctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}, | 
| 81 | [DRM_IOCTL_NR(DRM_IOCTL_GET_CTX)] = {drm_getctx, DRM_AUTH}, | 81 | [DRM_IOCTL_NR(DRM_IOCTL_GET_CTX)] = {drm_getctx, DRM_AUTH}, | 
| 82 | [DRM_IOCTL_NR(DRM_IOCTL_SWITCH_CTX)] = {drm_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}, | 82 | [DRM_IOCTL_NR(DRM_IOCTL_SWITCH_CTX)] = {drm_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY}, | 
| diff --git a/drivers/char/drm/drm_memory.c b/drivers/char/drm/drm_memory.c index dddf8de66143..7e3318e1d1c6 100644 --- a/drivers/char/drm/drm_memory.c +++ b/drivers/char/drm/drm_memory.c | |||
| @@ -80,6 +80,71 @@ void *drm_realloc(void *oldpt, size_t oldsize, size_t size, int area) | |||
| 80 | } | 80 | } | 
| 81 | 81 | ||
| 82 | #if __OS_HAS_AGP | 82 | #if __OS_HAS_AGP | 
| 83 | /* | ||
| 84 | * Find the drm_map that covers the range [offset, offset+size). | ||
| 85 | */ | ||
| 86 | static drm_map_t *drm_lookup_map(unsigned long offset, | ||
| 87 | unsigned long size, drm_device_t * dev) | ||
| 88 | { | ||
| 89 | struct list_head *list; | ||
| 90 | drm_map_list_t *r_list; | ||
| 91 | drm_map_t *map; | ||
| 92 | |||
| 93 | list_for_each(list, &dev->maplist->head) { | ||
| 94 | r_list = (drm_map_list_t *) list; | ||
| 95 | map = r_list->map; | ||
| 96 | if (!map) | ||
| 97 | continue; | ||
| 98 | if (map->offset <= offset | ||
| 99 | && (offset + size) <= (map->offset + map->size)) | ||
| 100 | return map; | ||
| 101 | } | ||
| 102 | return NULL; | ||
| 103 | } | ||
| 104 | |||
| 105 | static void *agp_remap(unsigned long offset, unsigned long size, | ||
| 106 | drm_device_t * dev) | ||
| 107 | { | ||
| 108 | unsigned long *phys_addr_map, i, num_pages = | ||
| 109 | PAGE_ALIGN(size) / PAGE_SIZE; | ||
| 110 | struct drm_agp_mem *agpmem; | ||
| 111 | struct page **page_map; | ||
| 112 | void *addr; | ||
| 113 | |||
| 114 | size = PAGE_ALIGN(size); | ||
| 115 | |||
| 116 | #ifdef __alpha__ | ||
| 117 | offset -= dev->hose->mem_space->start; | ||
| 118 | #endif | ||
| 119 | |||
| 120 | for (agpmem = dev->agp->memory; agpmem; agpmem = agpmem->next) | ||
| 121 | if (agpmem->bound <= offset | ||
| 122 | && (agpmem->bound + (agpmem->pages << PAGE_SHIFT)) >= | ||
| 123 | (offset + size)) | ||
| 124 | break; | ||
| 125 | if (!agpmem) | ||
| 126 | return NULL; | ||
| 127 | |||
| 128 | /* | ||
| 129 | * OK, we're mapping AGP space on a chipset/platform on which memory accesses by | ||
| 130 | * the CPU do not get remapped by the GART. We fix this by using the kernel's | ||
| 131 | * page-table instead (that's probably faster anyhow...). | ||
| 132 | */ | ||
| 133 | /* note: use vmalloc() because num_pages could be large... */ | ||
| 134 | page_map = vmalloc(num_pages * sizeof(struct page *)); | ||
| 135 | if (!page_map) | ||
| 136 | return NULL; | ||
| 137 | |||
| 138 | phys_addr_map = | ||
| 139 | agpmem->memory->memory + (offset - agpmem->bound) / PAGE_SIZE; | ||
| 140 | for (i = 0; i < num_pages; ++i) | ||
| 141 | page_map[i] = pfn_to_page(phys_addr_map[i] >> PAGE_SHIFT); | ||
| 142 | addr = vmap(page_map, num_pages, VM_IOREMAP, PAGE_AGP); | ||
| 143 | vfree(page_map); | ||
| 144 | |||
| 145 | return addr; | ||
| 146 | } | ||
| 147 | |||
| 83 | /** Wrapper around agp_allocate_memory() */ | 148 | /** Wrapper around agp_allocate_memory() */ | 
| 84 | DRM_AGP_MEM *drm_alloc_agp(drm_device_t * dev, int pages, u32 type) | 149 | DRM_AGP_MEM *drm_alloc_agp(drm_device_t * dev, int pages, u32 type) | 
| 85 | { | 150 | { | 
| @@ -103,5 +168,74 @@ int drm_unbind_agp(DRM_AGP_MEM * handle) | |||
| 103 | { | 168 | { | 
| 104 | return drm_agp_unbind_memory(handle); | 169 | return drm_agp_unbind_memory(handle); | 
| 105 | } | 170 | } | 
| 171 | |||
| 172 | #else /* __OS_HAS_AGP */ | ||
| 173 | |||
| 174 | static inline drm_map_t *drm_lookup_map(unsigned long offset, | ||
| 175 | unsigned long size, drm_device_t * dev) | ||
| 176 | { | ||
| 177 | return NULL; | ||
| 178 | } | ||
| 179 | |||
| 180 | static inline void *agp_remap(unsigned long offset, unsigned long size, | ||
| 181 | drm_device_t * dev) | ||
| 182 | { | ||
| 183 | return NULL; | ||
| 184 | } | ||
| 185 | |||
| 106 | #endif /* agp */ | 186 | #endif /* agp */ | 
| 187 | |||
| 188 | void *drm_ioremap(unsigned long offset, unsigned long size, | ||
| 189 | drm_device_t * dev) | ||
| 190 | { | ||
| 191 | if (drm_core_has_AGP(dev) && dev->agp && dev->agp->cant_use_aperture) { | ||
| 192 | drm_map_t *map = drm_lookup_map(offset, size, dev); | ||
| 193 | |||
| 194 | if (map && map->type == _DRM_AGP) | ||
| 195 | return agp_remap(offset, size, dev); | ||
| 196 | } | ||
| 197 | return ioremap(offset, size); | ||
| 198 | } | ||
| 199 | EXPORT_SYMBOL(drm_ioremap); | ||
| 200 | |||
| 201 | #if 0 | ||
| 202 | void *drm_ioremap_nocache(unsigned long offset, | ||
| 203 | unsigned long size, drm_device_t * dev) | ||
| 204 | { | ||
| 205 | if (drm_core_has_AGP(dev) && dev->agp && dev->agp->cant_use_aperture) { | ||
| 206 | drm_map_t *map = drm_lookup_map(offset, size, dev); | ||
| 207 | |||
| 208 | if (map && map->type == _DRM_AGP) | ||
| 209 | return agp_remap(offset, size, dev); | ||
| 210 | } | ||
| 211 | return ioremap_nocache(offset, size); | ||
| 212 | } | ||
| 213 | #endif /* 0 */ | ||
| 214 | |||
| 215 | void drm_ioremapfree(void *pt, unsigned long size, | ||
| 216 | drm_device_t * dev) | ||
| 217 | { | ||
| 218 | /* | ||
| 219 | * This is a bit ugly. It would be much cleaner if the DRM API would use separate | ||
| 220 | * routines for handling mappings in the AGP space. Hopefully this can be done in | ||
| 221 | * a future revision of the interface... | ||
| 222 | */ | ||
| 223 | if (drm_core_has_AGP(dev) && dev->agp && dev->agp->cant_use_aperture | ||
| 224 | && ((unsigned long)pt >= VMALLOC_START | ||
| 225 | && (unsigned long)pt < VMALLOC_END)) { | ||
| 226 | unsigned long offset; | ||
| 227 | drm_map_t *map; | ||
| 228 | |||
| 229 | offset = drm_follow_page(pt) | ((unsigned long)pt & ~PAGE_MASK); | ||
| 230 | map = drm_lookup_map(offset, size, dev); | ||
| 231 | if (map && map->type == _DRM_AGP) { | ||
| 232 | vunmap(pt); | ||
| 233 | return; | ||
| 234 | } | ||
| 235 | } | ||
| 236 | |||
| 237 | iounmap(pt); | ||
| 238 | } | ||
| 239 | EXPORT_SYMBOL(drm_ioremapfree); | ||
| 240 | |||
| 107 | #endif /* debug_memory */ | 241 | #endif /* debug_memory */ | 
| diff --git a/drivers/char/drm/drm_memory.h b/drivers/char/drm/drm_memory.h index 3732a61c3762..714d9aedcff5 100644 --- a/drivers/char/drm/drm_memory.h +++ b/drivers/char/drm/drm_memory.h | |||
| @@ -57,71 +57,6 @@ | |||
| 57 | # endif | 57 | # endif | 
| 58 | #endif | 58 | #endif | 
| 59 | 59 | ||
| 60 | /* | ||
| 61 | * Find the drm_map that covers the range [offset, offset+size). | ||
| 62 | */ | ||
| 63 | static inline drm_map_t *drm_lookup_map(unsigned long offset, | ||
| 64 | unsigned long size, drm_device_t * dev) | ||
| 65 | { | ||
| 66 | struct list_head *list; | ||
| 67 | drm_map_list_t *r_list; | ||
| 68 | drm_map_t *map; | ||
| 69 | |||
| 70 | list_for_each(list, &dev->maplist->head) { | ||
| 71 | r_list = (drm_map_list_t *) list; | ||
| 72 | map = r_list->map; | ||
| 73 | if (!map) | ||
| 74 | continue; | ||
| 75 | if (map->offset <= offset | ||
| 76 | && (offset + size) <= (map->offset + map->size)) | ||
| 77 | return map; | ||
| 78 | } | ||
| 79 | return NULL; | ||
| 80 | } | ||
| 81 | |||
| 82 | static inline void *agp_remap(unsigned long offset, unsigned long size, | ||
| 83 | drm_device_t * dev) | ||
| 84 | { | ||
| 85 | unsigned long *phys_addr_map, i, num_pages = | ||
| 86 | PAGE_ALIGN(size) / PAGE_SIZE; | ||
| 87 | struct drm_agp_mem *agpmem; | ||
| 88 | struct page **page_map; | ||
| 89 | void *addr; | ||
| 90 | |||
| 91 | size = PAGE_ALIGN(size); | ||
| 92 | |||
| 93 | #ifdef __alpha__ | ||
| 94 | offset -= dev->hose->mem_space->start; | ||
| 95 | #endif | ||
| 96 | |||
| 97 | for (agpmem = dev->agp->memory; agpmem; agpmem = agpmem->next) | ||
| 98 | if (agpmem->bound <= offset | ||
| 99 | && (agpmem->bound + (agpmem->pages << PAGE_SHIFT)) >= | ||
| 100 | (offset + size)) | ||
| 101 | break; | ||
| 102 | if (!agpmem) | ||
| 103 | return NULL; | ||
| 104 | |||
| 105 | /* | ||
| 106 | * OK, we're mapping AGP space on a chipset/platform on which memory accesses by | ||
| 107 | * the CPU do not get remapped by the GART. We fix this by using the kernel's | ||
| 108 | * page-table instead (that's probably faster anyhow...). | ||
| 109 | */ | ||
| 110 | /* note: use vmalloc() because num_pages could be large... */ | ||
| 111 | page_map = vmalloc(num_pages * sizeof(struct page *)); | ||
| 112 | if (!page_map) | ||
| 113 | return NULL; | ||
| 114 | |||
| 115 | phys_addr_map = | ||
| 116 | agpmem->memory->memory + (offset - agpmem->bound) / PAGE_SIZE; | ||
| 117 | for (i = 0; i < num_pages; ++i) | ||
| 118 | page_map[i] = pfn_to_page(phys_addr_map[i] >> PAGE_SHIFT); | ||
| 119 | addr = vmap(page_map, num_pages, VM_IOREMAP, PAGE_AGP); | ||
| 120 | vfree(page_map); | ||
| 121 | |||
| 122 | return addr; | ||
| 123 | } | ||
| 124 | |||
| 125 | static inline unsigned long drm_follow_page(void *vaddr) | 60 | static inline unsigned long drm_follow_page(void *vaddr) | 
| 126 | { | 61 | { | 
| 127 | pgd_t *pgd = pgd_offset_k((unsigned long)vaddr); | 62 | pgd_t *pgd = pgd_offset_k((unsigned long)vaddr); | 
| @@ -133,18 +68,6 @@ static inline unsigned long drm_follow_page(void *vaddr) | |||
| 133 | 68 | ||
| 134 | #else /* __OS_HAS_AGP */ | 69 | #else /* __OS_HAS_AGP */ | 
| 135 | 70 | ||
| 136 | static inline drm_map_t *drm_lookup_map(unsigned long offset, | ||
| 137 | unsigned long size, drm_device_t * dev) | ||
| 138 | { | ||
| 139 | return NULL; | ||
| 140 | } | ||
| 141 | |||
| 142 | static inline void *agp_remap(unsigned long offset, unsigned long size, | ||
| 143 | drm_device_t * dev) | ||
| 144 | { | ||
| 145 | return NULL; | ||
| 146 | } | ||
| 147 | |||
| 148 | static inline unsigned long drm_follow_page(void *vaddr) | 71 | static inline unsigned long drm_follow_page(void *vaddr) | 
| 149 | { | 72 | { | 
| 150 | return 0; | 73 | return 0; | 
| @@ -152,51 +75,8 @@ static inline unsigned long drm_follow_page(void *vaddr) | |||
| 152 | 75 | ||
| 153 | #endif | 76 | #endif | 
| 154 | 77 | ||
| 155 | static inline void *drm_ioremap(unsigned long offset, unsigned long size, | 78 | void *drm_ioremap(unsigned long offset, unsigned long size, | 
| 156 | drm_device_t * dev) | 79 | drm_device_t * dev); | 
| 157 | { | ||
| 158 | if (drm_core_has_AGP(dev) && dev->agp && dev->agp->cant_use_aperture) { | ||
| 159 | drm_map_t *map = drm_lookup_map(offset, size, dev); | ||
| 160 | |||
| 161 | if (map && map->type == _DRM_AGP) | ||
| 162 | return agp_remap(offset, size, dev); | ||
| 163 | } | ||
| 164 | return ioremap(offset, size); | ||
| 165 | } | ||
| 166 | |||
| 167 | static inline void *drm_ioremap_nocache(unsigned long offset, | ||
| 168 | unsigned long size, drm_device_t * dev) | ||
| 169 | { | ||
| 170 | if (drm_core_has_AGP(dev) && dev->agp && dev->agp->cant_use_aperture) { | ||
| 171 | drm_map_t *map = drm_lookup_map(offset, size, dev); | ||
| 172 | |||
| 173 | if (map && map->type == _DRM_AGP) | ||
| 174 | return agp_remap(offset, size, dev); | ||
| 175 | } | ||
| 176 | return ioremap_nocache(offset, size); | ||
| 177 | } | ||
| 178 | |||
| 179 | static inline void drm_ioremapfree(void *pt, unsigned long size, | ||
| 180 | drm_device_t * dev) | ||
| 181 | { | ||
| 182 | /* | ||
| 183 | * This is a bit ugly. It would be much cleaner if the DRM API would use separate | ||
| 184 | * routines for handling mappings in the AGP space. Hopefully this can be done in | ||
| 185 | * a future revision of the interface... | ||
| 186 | */ | ||
| 187 | if (drm_core_has_AGP(dev) && dev->agp && dev->agp->cant_use_aperture | ||
| 188 | && ((unsigned long)pt >= VMALLOC_START | ||
| 189 | && (unsigned long)pt < VMALLOC_END)) { | ||
| 190 | unsigned long offset; | ||
| 191 | drm_map_t *map; | ||
| 192 | |||
| 193 | offset = drm_follow_page(pt) | ((unsigned long)pt & ~PAGE_MASK); | ||
| 194 | map = drm_lookup_map(offset, size, dev); | ||
| 195 | if (map && map->type == _DRM_AGP) { | ||
| 196 | vunmap(pt); | ||
| 197 | return; | ||
| 198 | } | ||
| 199 | } | ||
| 200 | 80 | ||
| 201 | iounmap(pt); | 81 | void drm_ioremapfree(void *pt, unsigned long size, | 
| 202 | } | 82 | drm_device_t * dev); | 
| diff --git a/drivers/char/drm/drm_memory_debug.h b/drivers/char/drm/drm_memory_debug.h index 7868341817da..6543b9a14c42 100644 --- a/drivers/char/drm/drm_memory_debug.h +++ b/drivers/char/drm/drm_memory_debug.h | |||
| @@ -229,6 +229,7 @@ void *drm_ioremap (unsigned long offset, unsigned long size, | |||
| 229 | return pt; | 229 | return pt; | 
| 230 | } | 230 | } | 
| 231 | 231 | ||
| 232 | #if 0 | ||
| 232 | void *drm_ioremap_nocache (unsigned long offset, unsigned long size, | 233 | void *drm_ioremap_nocache (unsigned long offset, unsigned long size, | 
| 233 | drm_device_t * dev) { | 234 | drm_device_t * dev) { | 
| 234 | void *pt; | 235 | void *pt; | 
| @@ -251,6 +252,7 @@ void *drm_ioremap_nocache (unsigned long offset, unsigned long size, | |||
| 251 | spin_unlock(&drm_mem_lock); | 252 | spin_unlock(&drm_mem_lock); | 
| 252 | return pt; | 253 | return pt; | 
| 253 | } | 254 | } | 
| 255 | #endif /* 0 */ | ||
| 254 | 256 | ||
| 255 | void drm_ioremapfree (void *pt, unsigned long size, drm_device_t * dev) { | 257 | void drm_ioremapfree (void *pt, unsigned long size, drm_device_t * dev) { | 
| 256 | int alloc_count; | 258 | int alloc_count; | 
| diff --git a/drivers/char/drm/drm_pci.c b/drivers/char/drm/drm_pci.c index b28ca9cea8a2..86a0f1c22091 100644 --- a/drivers/char/drm/drm_pci.c +++ b/drivers/char/drm/drm_pci.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | */ | 37 | */ | 
| 38 | 38 | ||
| 39 | #include <linux/pci.h> | 39 | #include <linux/pci.h> | 
| 40 | #include <linux/dma-mapping.h> | ||
| 40 | #include "drmP.h" | 41 | #include "drmP.h" | 
| 41 | 42 | ||
| 42 | /**********************************************************************/ | 43 | /**********************************************************************/ | 
| diff --git a/drivers/char/drm/via_irq.c b/drivers/char/drm/via_irq.c index 6152415644e9..c33d068cde19 100644 --- a/drivers/char/drm/via_irq.c +++ b/drivers/char/drm/via_irq.c | |||
| @@ -196,9 +196,9 @@ via_driver_irq_wait(drm_device_t * dev, unsigned int irq, int force_sequence, | |||
| 196 | { | 196 | { | 
| 197 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; | 197 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; | 
| 198 | unsigned int cur_irq_sequence; | 198 | unsigned int cur_irq_sequence; | 
| 199 | drm_via_irq_t *cur_irq = dev_priv->via_irqs; | 199 | drm_via_irq_t *cur_irq; | 
| 200 | int ret = 0; | 200 | int ret = 0; | 
| 201 | maskarray_t *masks = dev_priv->irq_masks; | 201 | maskarray_t *masks; | 
| 202 | int real_irq; | 202 | int real_irq; | 
| 203 | 203 | ||
| 204 | DRM_DEBUG("%s\n", __FUNCTION__); | 204 | DRM_DEBUG("%s\n", __FUNCTION__); | 
| @@ -221,8 +221,9 @@ via_driver_irq_wait(drm_device_t * dev, unsigned int irq, int force_sequence, | |||
| 221 | __FUNCTION__, irq); | 221 | __FUNCTION__, irq); | 
| 222 | return DRM_ERR(EINVAL); | 222 | return DRM_ERR(EINVAL); | 
| 223 | } | 223 | } | 
| 224 | 224 | ||
| 225 | cur_irq += real_irq; | 225 | masks = dev_priv->irq_masks; | 
| 226 | cur_irq = dev_priv->via_irqs + real_irq; | ||
| 226 | 227 | ||
| 227 | if (masks[real_irq][2] && !force_sequence) { | 228 | if (masks[real_irq][2] && !force_sequence) { | 
| 228 | DRM_WAIT_ON(ret, cur_irq->irq_queue, 3 * DRM_HZ, | 229 | DRM_WAIT_ON(ret, cur_irq->irq_queue, 3 * DRM_HZ, | 
| @@ -247,11 +248,12 @@ void via_driver_irq_preinstall(drm_device_t * dev) | |||
| 247 | { | 248 | { | 
| 248 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; | 249 | drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private; | 
| 249 | u32 status; | 250 | u32 status; | 
| 250 | drm_via_irq_t *cur_irq = dev_priv->via_irqs; | 251 | drm_via_irq_t *cur_irq; | 
| 251 | int i; | 252 | int i; | 
| 252 | 253 | ||
| 253 | DRM_DEBUG("driver_irq_preinstall: dev_priv: %p\n", dev_priv); | 254 | DRM_DEBUG("driver_irq_preinstall: dev_priv: %p\n", dev_priv); | 
| 254 | if (dev_priv) { | 255 | if (dev_priv) { | 
| 256 | cur_irq = dev_priv->via_irqs; | ||
| 255 | 257 | ||
| 256 | dev_priv->irq_enable_mask = VIA_IRQ_VBLANK_ENABLE; | 258 | dev_priv->irq_enable_mask = VIA_IRQ_VBLANK_ENABLE; | 
| 257 | dev_priv->irq_pending_mask = VIA_IRQ_VBLANK_PENDING; | 259 | dev_priv->irq_pending_mask = VIA_IRQ_VBLANK_PENDING; | 
| diff --git a/drivers/char/ipmi/ipmi_bt_sm.c b/drivers/char/ipmi/ipmi_bt_sm.c index 58dcdee1cd71..0030cd8e2e95 100644 --- a/drivers/char/ipmi/ipmi_bt_sm.c +++ b/drivers/char/ipmi/ipmi_bt_sm.c | |||
| @@ -165,7 +165,7 @@ static int bt_start_transaction(struct si_sm_data *bt, | |||
| 165 | { | 165 | { | 
| 166 | unsigned int i; | 166 | unsigned int i; | 
| 167 | 167 | ||
| 168 | if ((size < 2) || (size > IPMI_MAX_MSG_LENGTH)) | 168 | if ((size < 2) || (size > (IPMI_MAX_MSG_LENGTH - 2))) | 
| 169 | return -1; | 169 | return -1; | 
| 170 | 170 | ||
| 171 | if ((bt->state != BT_STATE_IDLE) && (bt->state != BT_STATE_HOSED)) | 171 | if ((bt->state != BT_STATE_IDLE) && (bt->state != BT_STATE_HOSED)) | 
| diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index a86c0f29953e..b36eef0e9d19 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c | |||
| @@ -2198,11 +2198,11 @@ static inline void wait_for_timer_and_thread(struct smi_info *smi_info) | |||
| 2198 | } | 2198 | } | 
| 2199 | } | 2199 | } | 
| 2200 | 2200 | ||
| 2201 | static struct ipmi_default_vals | 2201 | static __devinitdata struct ipmi_default_vals | 
| 2202 | { | 2202 | { | 
| 2203 | int type; | 2203 | int type; | 
| 2204 | int port; | 2204 | int port; | 
| 2205 | } __devinit ipmi_defaults[] = | 2205 | } ipmi_defaults[] = | 
| 2206 | { | 2206 | { | 
| 2207 | { .type = SI_KCS, .port = 0xca2 }, | 2207 | { .type = SI_KCS, .port = 0xca2 }, | 
| 2208 | { .type = SI_SMIC, .port = 0xca9 }, | 2208 | { .type = SI_SMIC, .port = 0xca9 }, | 
| diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c index f8dd8527c6aa..a90f5d97df35 100644 --- a/drivers/char/sonypi.c +++ b/drivers/char/sonypi.c | |||
| @@ -1341,6 +1341,9 @@ static int __devinit sonypi_probe(struct platform_device *dev) | |||
| 1341 | else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL, | 1341 | else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL, | 
| 1342 | PCI_DEVICE_ID_INTEL_ICH6_1, NULL))) | 1342 | PCI_DEVICE_ID_INTEL_ICH6_1, NULL))) | 
| 1343 | sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3; | 1343 | sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3; | 
| 1344 | else if ((pcidev = pci_get_device(PCI_VENDOR_ID_INTEL, | ||
| 1345 | PCI_DEVICE_ID_INTEL_ICH7_1, NULL))) | ||
| 1346 | sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE3; | ||
| 1344 | else | 1347 | else | 
| 1345 | sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE2; | 1348 | sonypi_device.model = SONYPI_DEVICE_MODEL_TYPE2; | 
| 1346 | 1349 | ||
| diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c index 841f0bd3eaaf..f07637a8f88f 100644 --- a/drivers/char/tty_io.c +++ b/drivers/char/tty_io.c | |||
| @@ -2723,7 +2723,11 @@ static void __do_SAK(void *arg) | |||
| 2723 | } | 2723 | } | 
| 2724 | task_lock(p); | 2724 | task_lock(p); | 
| 2725 | if (p->files) { | 2725 | if (p->files) { | 
| 2726 | rcu_read_lock(); | 2726 | /* | 
| 2727 | * We don't take a ref to the file, so we must | ||
| 2728 | * hold ->file_lock instead. | ||
| 2729 | */ | ||
| 2730 | spin_lock(&p->files->file_lock); | ||
| 2727 | fdt = files_fdtable(p->files); | 2731 | fdt = files_fdtable(p->files); | 
| 2728 | for (i=0; i < fdt->max_fds; i++) { | 2732 | for (i=0; i < fdt->max_fds; i++) { | 
| 2729 | filp = fcheck_files(p->files, i); | 2733 | filp = fcheck_files(p->files, i); | 
| @@ -2738,7 +2742,7 @@ static void __do_SAK(void *arg) | |||
| 2738 | break; | 2742 | break; | 
| 2739 | } | 2743 | } | 
| 2740 | } | 2744 | } | 
| 2741 | rcu_read_unlock(); | 2745 | spin_unlock(&p->files->file_lock); | 
| 2742 | } | 2746 | } | 
| 2743 | task_unlock(p); | 2747 | task_unlock(p); | 
| 2744 | } while_each_thread(g, p); | 2748 | } while_each_thread(g, p); | 
| diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig index 60c9be99c6d9..2cc71b66231e 100644 --- a/drivers/cpufreq/Kconfig +++ b/drivers/cpufreq/Kconfig | |||
| @@ -99,7 +99,7 @@ config CPU_FREQ_GOV_USERSPACE | |||
| 99 | Enable this cpufreq governor when you either want to set the | 99 | Enable this cpufreq governor when you either want to set the | 
| 100 | CPU frequency manually or when an userspace program shall | 100 | CPU frequency manually or when an userspace program shall | 
| 101 | be able to set the CPU dynamically, like on LART | 101 | be able to set the CPU dynamically, like on LART | 
| 102 | <http://www.lart.tudelft.nl/> | 102 | <http://www.lartmaker.nl/>. | 
| 103 | 103 | ||
| 104 | For details, take a look at <file:Documentation/cpu-freq/>. | 104 | For details, take a look at <file:Documentation/cpu-freq/>. | 
| 105 | 105 | ||
| diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 9b6ae7dc8b8a..9759d05b1972 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
| @@ -319,7 +319,6 @@ out: | |||
| 319 | } | 319 | } | 
| 320 | return -EINVAL; | 320 | return -EINVAL; | 
| 321 | } | 321 | } | 
| 322 | EXPORT_SYMBOL_GPL(cpufreq_parse_governor); | ||
| 323 | 322 | ||
| 324 | 323 | ||
| 325 | /* drivers/base/cpu.c */ | 324 | /* drivers/base/cpu.c */ | 
| @@ -346,6 +345,8 @@ show_one(scaling_min_freq, min); | |||
| 346 | show_one(scaling_max_freq, max); | 345 | show_one(scaling_max_freq, max); | 
| 347 | show_one(scaling_cur_freq, cur); | 346 | show_one(scaling_cur_freq, cur); | 
| 348 | 347 | ||
| 348 | static int __cpufreq_set_policy(struct cpufreq_policy *data, struct cpufreq_policy *policy); | ||
| 349 | |||
| 349 | /** | 350 | /** | 
| 350 | * cpufreq_per_cpu_attr_write() / store_##file_name() - sysfs write access | 351 | * cpufreq_per_cpu_attr_write() / store_##file_name() - sysfs write access | 
| 351 | */ | 352 | */ | 
| @@ -364,7 +365,10 @@ static ssize_t store_##file_name \ | |||
| 364 | if (ret != 1) \ | 365 | if (ret != 1) \ | 
| 365 | return -EINVAL; \ | 366 | return -EINVAL; \ | 
| 366 | \ | 367 | \ | 
| 367 | ret = cpufreq_set_policy(&new_policy); \ | 368 | mutex_lock(&policy->lock); \ | 
| 369 | ret = __cpufreq_set_policy(policy, &new_policy); \ | ||
| 370 | policy->user_policy.object = policy->object; \ | ||
| 371 | mutex_unlock(&policy->lock); \ | ||
| 368 | \ | 372 | \ | 
| 369 | return ret ? ret : count; \ | 373 | return ret ? ret : count; \ | 
| 370 | } | 374 | } | 
| @@ -420,7 +424,15 @@ static ssize_t store_scaling_governor (struct cpufreq_policy * policy, | |||
| 420 | if (cpufreq_parse_governor(str_governor, &new_policy.policy, &new_policy.governor)) | 424 | if (cpufreq_parse_governor(str_governor, &new_policy.policy, &new_policy.governor)) | 
| 421 | return -EINVAL; | 425 | return -EINVAL; | 
| 422 | 426 | ||
| 423 | ret = cpufreq_set_policy(&new_policy); | 427 | /* Do not use cpufreq_set_policy here or the user_policy.max | 
| 428 | will be wrongly overridden */ | ||
| 429 | mutex_lock(&policy->lock); | ||
| 430 | ret = __cpufreq_set_policy(policy, &new_policy); | ||
| 431 | |||
| 432 | policy->user_policy.policy = policy->policy; | ||
| 433 | policy->user_policy.governor = policy->governor; | ||
| 434 | mutex_unlock(&policy->lock); | ||
| 435 | |||
| 424 | return ret ? ret : count; | 436 | return ret ? ret : count; | 
| 425 | } | 437 | } | 
| 426 | 438 | ||
| @@ -685,7 +697,7 @@ static int cpufreq_add_dev (struct sys_device * sys_dev) | |||
| 685 | if (!cpu_online(j)) | 697 | if (!cpu_online(j)) | 
| 686 | continue; | 698 | continue; | 
| 687 | 699 | ||
| 688 | dprintk("CPU already managed, adding link\n"); | 700 | dprintk("CPU %u already managed, adding link\n", j); | 
| 689 | cpufreq_cpu_get(cpu); | 701 | cpufreq_cpu_get(cpu); | 
| 690 | cpu_sys_dev = get_cpu_sysdev(j); | 702 | cpu_sys_dev = get_cpu_sysdev(j); | 
| 691 | sysfs_create_link(&cpu_sys_dev->kobj, &policy->kobj, | 703 | sysfs_create_link(&cpu_sys_dev->kobj, &policy->kobj, | 
| @@ -695,9 +707,8 @@ static int cpufreq_add_dev (struct sys_device * sys_dev) | |||
| 695 | policy->governor = NULL; /* to assure that the starting sequence is | 707 | policy->governor = NULL; /* to assure that the starting sequence is | 
| 696 | * run in cpufreq_set_policy */ | 708 | * run in cpufreq_set_policy */ | 
| 697 | mutex_unlock(&policy->lock); | 709 | mutex_unlock(&policy->lock); | 
| 698 | 710 | ||
| 699 | /* set default policy */ | 711 | /* set default policy */ | 
| 700 | |||
| 701 | ret = cpufreq_set_policy(&new_policy); | 712 | ret = cpufreq_set_policy(&new_policy); | 
| 702 | if (ret) { | 713 | if (ret) { | 
| 703 | dprintk("setting policy failed\n"); | 714 | dprintk("setting policy failed\n"); | 
| @@ -707,7 +718,7 @@ static int cpufreq_add_dev (struct sys_device * sys_dev) | |||
| 707 | module_put(cpufreq_driver->owner); | 718 | module_put(cpufreq_driver->owner); | 
| 708 | dprintk("initialization complete\n"); | 719 | dprintk("initialization complete\n"); | 
| 709 | cpufreq_debug_enable_ratelimit(); | 720 | cpufreq_debug_enable_ratelimit(); | 
| 710 | 721 | ||
| 711 | return 0; | 722 | return 0; | 
| 712 | 723 | ||
| 713 | 724 | ||
| diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c index 037f6bf4543c..e07a35487bde 100644 --- a/drivers/cpufreq/cpufreq_conservative.c +++ b/drivers/cpufreq/cpufreq_conservative.c | |||
| @@ -176,8 +176,7 @@ static ssize_t store_up_threshold(struct cpufreq_policy *unused, | |||
| 176 | ret = sscanf (buf, "%u", &input); | 176 | ret = sscanf (buf, "%u", &input); | 
| 177 | 177 | ||
| 178 | mutex_lock(&dbs_mutex); | 178 | mutex_lock(&dbs_mutex); | 
| 179 | if (ret != 1 || input > 100 || input < 0 || | 179 | if (ret != 1 || input > 100 || input <= dbs_tuners_ins.down_threshold) { | 
| 180 | input <= dbs_tuners_ins.down_threshold) { | ||
| 181 | mutex_unlock(&dbs_mutex); | 180 | mutex_unlock(&dbs_mutex); | 
| 182 | return -EINVAL; | 181 | return -EINVAL; | 
| 183 | } | 182 | } | 
| @@ -196,8 +195,7 @@ static ssize_t store_down_threshold(struct cpufreq_policy *unused, | |||
| 196 | ret = sscanf (buf, "%u", &input); | 195 | ret = sscanf (buf, "%u", &input); | 
| 197 | 196 | ||
| 198 | mutex_lock(&dbs_mutex); | 197 | mutex_lock(&dbs_mutex); | 
| 199 | if (ret != 1 || input > 100 || input < 0 || | 198 | if (ret != 1 || input > 100 || input >= dbs_tuners_ins.up_threshold) { | 
| 200 | input >= dbs_tuners_ins.up_threshold) { | ||
| 201 | mutex_unlock(&dbs_mutex); | 199 | mutex_unlock(&dbs_mutex); | 
| 202 | return -EINVAL; | 200 | return -EINVAL; | 
| 203 | } | 201 | } | 
| diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c index 8e0f3158215f..dfca74933625 100644 --- a/drivers/i2c/busses/i2c-i801.c +++ b/drivers/i2c/busses/i2c-i801.c | |||
| @@ -478,6 +478,11 @@ static s32 i801_access(struct i2c_adapter * adap, u16 addr, | |||
| 478 | ret = i801_transaction(); | 478 | ret = i801_transaction(); | 
| 479 | } | 479 | } | 
| 480 | 480 | ||
| 481 | /* Some BIOSes don't like it when PEC is enabled at reboot or resume | ||
| 482 | time, so we forcibly disable it after every transaction. */ | ||
| 483 | if (hwpec) | ||
| 484 | outb_p(0, SMBAUXCTL); | ||
| 485 | |||
| 481 | if(block) | 486 | if(block) | 
| 482 | return ret; | 487 | return ret; | 
| 483 | if(ret) | 488 | if(ret) | 
| diff --git a/drivers/i2c/chips/m41t00.c b/drivers/i2c/chips/m41t00.c index 27fc9ff2961a..99ab4ec34390 100644 --- a/drivers/i2c/chips/m41t00.c +++ b/drivers/i2c/chips/m41t00.c | |||
| @@ -131,13 +131,13 @@ m41t00_set(void *arg) | |||
| 131 | if ((i2c_smbus_write_byte_data(save_client, 0, tm.tm_sec & 0x7f) < 0) | 131 | if ((i2c_smbus_write_byte_data(save_client, 0, tm.tm_sec & 0x7f) < 0) | 
| 132 | || (i2c_smbus_write_byte_data(save_client, 1, tm.tm_min & 0x7f) | 132 | || (i2c_smbus_write_byte_data(save_client, 1, tm.tm_min & 0x7f) | 
| 133 | < 0) | 133 | < 0) | 
| 134 | || (i2c_smbus_write_byte_data(save_client, 2, tm.tm_hour & 0x7f) | 134 | || (i2c_smbus_write_byte_data(save_client, 2, tm.tm_hour & 0x3f) | 
| 135 | < 0) | 135 | < 0) | 
| 136 | || (i2c_smbus_write_byte_data(save_client, 4, tm.tm_mday & 0x7f) | 136 | || (i2c_smbus_write_byte_data(save_client, 4, tm.tm_mday & 0x3f) | 
| 137 | < 0) | 137 | < 0) | 
| 138 | || (i2c_smbus_write_byte_data(save_client, 5, tm.tm_mon & 0x7f) | 138 | || (i2c_smbus_write_byte_data(save_client, 5, tm.tm_mon & 0x1f) | 
| 139 | < 0) | 139 | < 0) | 
| 140 | || (i2c_smbus_write_byte_data(save_client, 6, tm.tm_year & 0x7f) | 140 | || (i2c_smbus_write_byte_data(save_client, 6, tm.tm_year & 0xff) | 
| 141 | < 0)) | 141 | < 0)) | 
| 142 | 142 | ||
| 143 | dev_warn(&save_client->dev,"m41t00: can't write to rtc chip\n"); | 143 | dev_warn(&save_client->dev,"m41t00: can't write to rtc chip\n"); | 
| diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index cf84350efc55..8b24b4f2a839 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c | |||
| @@ -731,6 +731,8 @@ static unsigned int __devinit ata66_ali15x3 (ide_hwif_t *hwif) | |||
| 731 | 731 | ||
| 732 | if(m5229_revision <= 0x20) | 732 | if(m5229_revision <= 0x20) | 
| 733 | tmpbyte = (tmpbyte & (~0x02)) | 0x01; | 733 | tmpbyte = (tmpbyte & (~0x02)) | 0x01; | 
| 734 | else if (m5229_revision == 0xc7) | ||
| 735 | tmpbyte |= 0x03; | ||
| 734 | else | 736 | else | 
| 735 | tmpbyte |= 0x01; | 737 | tmpbyte |= 0x01; | 
| 736 | 738 | ||
| diff --git a/drivers/ide/pci/atiixp.c b/drivers/ide/pci/atiixp.c index df9ee9a78435..900efd1da587 100644 --- a/drivers/ide/pci/atiixp.c +++ b/drivers/ide/pci/atiixp.c | |||
| @@ -348,6 +348,7 @@ static struct pci_device_id atiixp_pci_tbl[] = { | |||
| 348 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP200_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 348 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP200_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 
| 349 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 349 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP300_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 
| 350 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 350 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP400_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | 
| 351 | { PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_IXP600_IDE, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, | ||
| 351 | { 0, }, | 352 | { 0, }, | 
| 352 | }; | 353 | }; | 
| 353 | MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl); | 354 | MODULE_DEVICE_TABLE(pci, atiixp_pci_tbl); | 
| diff --git a/drivers/ide/pci/pdc202xx_old.c b/drivers/ide/pci/pdc202xx_old.c index 6f8f8645b02c..7ce5bf783688 100644 --- a/drivers/ide/pci/pdc202xx_old.c +++ b/drivers/ide/pci/pdc202xx_old.c | |||
| @@ -798,7 +798,6 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = { | |||
| 798 | .autodma = AUTODMA, | 798 | .autodma = AUTODMA, | 
| 799 | .bootable = OFF_BOARD, | 799 | .bootable = OFF_BOARD, | 
| 800 | .extra = 48, | 800 | .extra = 48, | 
| 801 | .flags = IDEPCI_FLAG_FORCE_PDC, | ||
| 802 | },{ /* 2 */ | 801 | },{ /* 2 */ | 
| 803 | .name = "PDC20263", | 802 | .name = "PDC20263", | 
| 804 | .init_setup = init_setup_pdc202ata4, | 803 | .init_setup = init_setup_pdc202ata4, | 
| @@ -819,7 +818,6 @@ static ide_pci_device_t pdc202xx_chipsets[] __devinitdata = { | |||
| 819 | .autodma = AUTODMA, | 818 | .autodma = AUTODMA, | 
| 820 | .bootable = OFF_BOARD, | 819 | .bootable = OFF_BOARD, | 
| 821 | .extra = 48, | 820 | .extra = 48, | 
| 822 | .flags = IDEPCI_FLAG_FORCE_PDC, | ||
| 823 | },{ /* 4 */ | 821 | },{ /* 4 */ | 
| 824 | .name = "PDC20267", | 822 | .name = "PDC20267", | 
| 825 | .init_setup = init_setup_pdc202xx, | 823 | .init_setup = init_setup_pdc202xx, | 
| diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c index 7ebf992e8c2f..462ed3006c30 100644 --- a/drivers/ide/setup-pci.c +++ b/drivers/ide/setup-pci.c | |||
| @@ -580,7 +580,6 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a | |||
| 580 | int port; | 580 | int port; | 
| 581 | int at_least_one_hwif_enabled = 0; | 581 | int at_least_one_hwif_enabled = 0; | 
| 582 | ide_hwif_t *hwif, *mate = NULL; | 582 | ide_hwif_t *hwif, *mate = NULL; | 
| 583 | static int secondpdc = 0; | ||
| 584 | u8 tmp; | 583 | u8 tmp; | 
| 585 | 584 | ||
| 586 | index->all = 0xf0f0; | 585 | index->all = 0xf0f0; | 
| @@ -592,21 +591,9 @@ void ide_pci_setup_ports(struct pci_dev *dev, ide_pci_device_t *d, int pciirq, a | |||
| 592 | for (port = 0; port <= 1; ++port) { | 591 | for (port = 0; port <= 1; ++port) { | 
| 593 | ide_pci_enablebit_t *e = &(d->enablebits[port]); | 592 | ide_pci_enablebit_t *e = &(d->enablebits[port]); | 
| 594 | 593 | ||
| 595 | /* | ||
| 596 | * If this is a Promise FakeRaid controller, | ||
| 597 | * the 2nd controller will be marked as | ||
| 598 | * disabled while it is actually there and enabled | ||
| 599 | * by the bios for raid purposes. | ||
| 600 | * Skip the normal "is it enabled" test for those. | ||
| 601 | */ | ||
| 602 | if ((d->flags & IDEPCI_FLAG_FORCE_PDC) && | ||
| 603 | (secondpdc++==1) && (port==1)) | ||
| 604 | goto controller_ok; | ||
| 605 | |||
| 606 | if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) || | 594 | if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) || | 
| 607 | (tmp & e->mask) != e->val)) | 595 | (tmp & e->mask) != e->val)) | 
| 608 | continue; /* port not enabled */ | 596 | continue; /* port not enabled */ | 
| 609 | controller_ok: | ||
| 610 | 597 | ||
| 611 | if (d->channels <= port) | 598 | if (d->channels <= port) | 
| 612 | break; | 599 | break; | 
| diff --git a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c index 3a702da83e41..469b6923a2e2 100644 --- a/drivers/infiniband/core/mad.c +++ b/drivers/infiniband/core/mad.c | |||
| @@ -228,10 +228,7 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device, | |||
| 228 | goto error1; | 228 | goto error1; | 
| 229 | } | 229 | } | 
| 230 | /* Make sure class supplied is consistent with RMPP */ | 230 | /* Make sure class supplied is consistent with RMPP */ | 
| 231 | if (ib_is_mad_class_rmpp(mad_reg_req->mgmt_class)) { | 231 | if (!ib_is_mad_class_rmpp(mad_reg_req->mgmt_class)) { | 
| 232 | if (!rmpp_version) | ||
| 233 | goto error1; | ||
| 234 | } else { | ||
| 235 | if (rmpp_version) | 232 | if (rmpp_version) | 
| 236 | goto error1; | 233 | goto error1; | 
| 237 | } | 234 | } | 
| diff --git a/drivers/infiniband/hw/ipath/ipath_diag.c b/drivers/infiniband/hw/ipath/ipath_diag.c index cd533cf951c2..7d3fb6996b41 100644 --- a/drivers/infiniband/hw/ipath/ipath_diag.c +++ b/drivers/infiniband/hw/ipath/ipath_diag.c | |||
| @@ -365,15 +365,3 @@ static ssize_t ipath_diag_write(struct file *fp, const char __user *data, | |||
| 365 | bail: | 365 | bail: | 
| 366 | return ret; | 366 | return ret; | 
| 367 | } | 367 | } | 
| 368 | |||
| 369 | void ipath_diag_bringup_link(struct ipath_devdata *dd) | ||
| 370 | { | ||
| 371 | if (diag_set_link || (dd->ipath_flags & IPATH_LINKACTIVE)) | ||
| 372 | return; | ||
| 373 | |||
| 374 | diag_set_link = 1; | ||
| 375 | ipath_cdbg(VERBOSE, "Trying to set to set link active for " | ||
| 376 | "diag pkt\n"); | ||
| 377 | ipath_layer_set_linkstate(dd, IPATH_IB_LINKARM); | ||
| 378 | ipath_layer_set_linkstate(dd, IPATH_IB_LINKACTIVE); | ||
| 379 | } | ||
| diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c index 58a94efb0070..e7617c3982ea 100644 --- a/drivers/infiniband/hw/ipath/ipath_driver.c +++ b/drivers/infiniband/hw/ipath/ipath_driver.c | |||
| @@ -1729,7 +1729,7 @@ void ipath_free_pddata(struct ipath_devdata *dd, u32 port, int freehdrq) | |||
| 1729 | } | 1729 | } | 
| 1730 | } | 1730 | } | 
| 1731 | 1731 | ||
| 1732 | int __init infinipath_init(void) | 1732 | static int __init infinipath_init(void) | 
| 1733 | { | 1733 | { | 
| 1734 | int ret; | 1734 | int ret; | 
| 1735 | 1735 | ||
| diff --git a/drivers/infiniband/hw/ipath/ipath_intr.c b/drivers/infiniband/hw/ipath/ipath_intr.c index 60f5f4108069..0bcb428041f3 100644 --- a/drivers/infiniband/hw/ipath/ipath_intr.c +++ b/drivers/infiniband/hw/ipath/ipath_intr.c | |||
| @@ -172,8 +172,8 @@ static void handle_e_ibstatuschanged(struct ipath_devdata *dd, | |||
| 172 | "was %s\n", dd->ipath_unit, | 172 | "was %s\n", dd->ipath_unit, | 
| 173 | ib_linkstate(lstate), | 173 | ib_linkstate(lstate), | 
| 174 | ib_linkstate((unsigned) | 174 | ib_linkstate((unsigned) | 
| 175 | dd->ipath_lastibcstat | 175 | dd->ipath_lastibcstat | 
| 176 | & IPATH_IBSTATE_MASK)); | 176 | & IPATH_IBSTATE_MASK)); | 
| 177 | } | 177 | } | 
| 178 | else { | 178 | else { | 
| 179 | lstate = dd->ipath_lastibcstat & IPATH_IBSTATE_MASK; | 179 | lstate = dd->ipath_lastibcstat & IPATH_IBSTATE_MASK; | 
| diff --git a/drivers/infiniband/hw/ipath/ipath_kernel.h b/drivers/infiniband/hw/ipath/ipath_kernel.h index 159d0aed31a5..0ce5f19c9d62 100644 --- a/drivers/infiniband/hw/ipath/ipath_kernel.h +++ b/drivers/infiniband/hw/ipath/ipath_kernel.h | |||
| @@ -528,7 +528,6 @@ extern spinlock_t ipath_devs_lock; | |||
| 528 | extern struct ipath_devdata *ipath_lookup(int unit); | 528 | extern struct ipath_devdata *ipath_lookup(int unit); | 
| 529 | 529 | ||
| 530 | extern u16 ipath_layer_rcv_opcode; | 530 | extern u16 ipath_layer_rcv_opcode; | 
| 531 | extern int ipath_verbs_registered; | ||
| 532 | extern int __ipath_layer_intr(struct ipath_devdata *, u32); | 531 | extern int __ipath_layer_intr(struct ipath_devdata *, u32); | 
| 533 | extern int ipath_layer_intr(struct ipath_devdata *, u32); | 532 | extern int ipath_layer_intr(struct ipath_devdata *, u32); | 
| 534 | extern int __ipath_layer_rcv(struct ipath_devdata *, void *, | 533 | extern int __ipath_layer_rcv(struct ipath_devdata *, void *, | 
| diff --git a/drivers/infiniband/hw/ipath/ipath_layer.c b/drivers/infiniband/hw/ipath/ipath_layer.c index 2cabf6340572..69ed1100701a 100644 --- a/drivers/infiniband/hw/ipath/ipath_layer.c +++ b/drivers/infiniband/hw/ipath/ipath_layer.c | |||
| @@ -52,7 +52,7 @@ static int (*layer_rcv)(void *, void *, struct sk_buff *); | |||
| 52 | static int (*layer_rcv_lid)(void *, void *); | 52 | static int (*layer_rcv_lid)(void *, void *); | 
| 53 | static int (*verbs_piobufavail)(void *); | 53 | static int (*verbs_piobufavail)(void *); | 
| 54 | static void (*verbs_rcv)(void *, void *, void *, u32); | 54 | static void (*verbs_rcv)(void *, void *, void *, u32); | 
| 55 | int ipath_verbs_registered; | 55 | static int ipath_verbs_registered; | 
| 56 | 56 | ||
| 57 | static void *(*layer_add_one)(int, struct ipath_devdata *); | 57 | static void *(*layer_add_one)(int, struct ipath_devdata *); | 
| 58 | static void (*layer_remove_one)(void *); | 58 | static void (*layer_remove_one)(void *); | 
| diff --git a/drivers/infiniband/hw/ipath/ipath_pe800.c b/drivers/infiniband/hw/ipath/ipath_pe800.c index e693a7a82667..e1dc4f757062 100644 --- a/drivers/infiniband/hw/ipath/ipath_pe800.c +++ b/drivers/infiniband/hw/ipath/ipath_pe800.c | |||
| @@ -305,8 +305,8 @@ static const struct ipath_cregs ipath_pe_cregs = { | |||
| 305 | * we'll print them and continue. We reuse the same message buffer as | 305 | * we'll print them and continue. We reuse the same message buffer as | 
| 306 | * ipath_handle_errors() to avoid excessive stack usage. | 306 | * ipath_handle_errors() to avoid excessive stack usage. | 
| 307 | */ | 307 | */ | 
| 308 | void ipath_pe_handle_hwerrors(struct ipath_devdata *dd, char *msg, | 308 | static void ipath_pe_handle_hwerrors(struct ipath_devdata *dd, char *msg, | 
| 309 | size_t msgl) | 309 | size_t msgl) | 
| 310 | { | 310 | { | 
| 311 | ipath_err_t hwerrs; | 311 | ipath_err_t hwerrs; | 
| 312 | u32 bits, ctrl; | 312 | u32 bits, ctrl; | 
| @@ -552,7 +552,7 @@ static int ipath_pe_boardname(struct ipath_devdata *dd, char *name, | |||
| 552 | * freeze mode), and enable hardware errors as errors (along with | 552 | * freeze mode), and enable hardware errors as errors (along with | 
| 553 | * everything else) in errormask | 553 | * everything else) in errormask | 
| 554 | */ | 554 | */ | 
| 555 | void ipath_pe_init_hwerrors(struct ipath_devdata *dd) | 555 | static void ipath_pe_init_hwerrors(struct ipath_devdata *dd) | 
| 556 | { | 556 | { | 
| 557 | ipath_err_t val; | 557 | ipath_err_t val; | 
| 558 | u64 extsval; | 558 | u64 extsval; | 
| @@ -577,7 +577,7 @@ void ipath_pe_init_hwerrors(struct ipath_devdata *dd) | |||
| 577 | * ipath_pe_bringup_serdes - bring up the serdes | 577 | * ipath_pe_bringup_serdes - bring up the serdes | 
| 578 | * @dd: the infinipath device | 578 | * @dd: the infinipath device | 
| 579 | */ | 579 | */ | 
| 580 | int ipath_pe_bringup_serdes(struct ipath_devdata *dd) | 580 | static int ipath_pe_bringup_serdes(struct ipath_devdata *dd) | 
| 581 | { | 581 | { | 
| 582 | u64 val, tmp, config1; | 582 | u64 val, tmp, config1; | 
| 583 | int ret = 0, change = 0; | 583 | int ret = 0, change = 0; | 
| @@ -694,7 +694,7 @@ int ipath_pe_bringup_serdes(struct ipath_devdata *dd) | |||
| 694 | * @dd: the infinipath device | 694 | * @dd: the infinipath device | 
| 695 | * Called when driver is being unloaded | 695 | * Called when driver is being unloaded | 
| 696 | */ | 696 | */ | 
| 697 | void ipath_pe_quiet_serdes(struct ipath_devdata *dd) | 697 | static void ipath_pe_quiet_serdes(struct ipath_devdata *dd) | 
| 698 | { | 698 | { | 
| 699 | u64 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesconfig0); | 699 | u64 val = ipath_read_kreg64(dd, dd->ipath_kregs->kr_serdesconfig0); | 
| 700 | 700 | ||
| diff --git a/drivers/infiniband/hw/ipath/ipath_qp.c b/drivers/infiniband/hw/ipath/ipath_qp.c index 6058d70d7577..18890716db1e 100644 --- a/drivers/infiniband/hw/ipath/ipath_qp.c +++ b/drivers/infiniband/hw/ipath/ipath_qp.c | |||
| @@ -188,8 +188,8 @@ static void free_qpn(struct ipath_qp_table *qpt, u32 qpn) | |||
| 188 | * Allocate the next available QPN and put the QP into the hash table. | 188 | * Allocate the next available QPN and put the QP into the hash table. | 
| 189 | * The hash table holds a reference to the QP. | 189 | * The hash table holds a reference to the QP. | 
| 190 | */ | 190 | */ | 
| 191 | int ipath_alloc_qpn(struct ipath_qp_table *qpt, struct ipath_qp *qp, | 191 | static int ipath_alloc_qpn(struct ipath_qp_table *qpt, struct ipath_qp *qp, | 
| 192 | enum ib_qp_type type) | 192 | enum ib_qp_type type) | 
| 193 | { | 193 | { | 
| 194 | unsigned long flags; | 194 | unsigned long flags; | 
| 195 | u32 qpn; | 195 | u32 qpn; | 
| @@ -232,7 +232,7 @@ bail: | |||
| 232 | * Remove the QP from the table so it can't be found asynchronously by | 232 | * Remove the QP from the table so it can't be found asynchronously by | 
| 233 | * the receive interrupt routine. | 233 | * the receive interrupt routine. | 
| 234 | */ | 234 | */ | 
| 235 | void ipath_free_qp(struct ipath_qp_table *qpt, struct ipath_qp *qp) | 235 | static void ipath_free_qp(struct ipath_qp_table *qpt, struct ipath_qp *qp) | 
| 236 | { | 236 | { | 
| 237 | struct ipath_qp *q, **qpp; | 237 | struct ipath_qp *q, **qpp; | 
| 238 | unsigned long flags; | 238 | unsigned long flags; | 
| @@ -358,6 +358,65 @@ static void ipath_reset_qp(struct ipath_qp *qp) | |||
| 358 | } | 358 | } | 
| 359 | 359 | ||
| 360 | /** | 360 | /** | 
| 361 | * ipath_error_qp - put a QP into an error state | ||
| 362 | * @qp: the QP to put into an error state | ||
| 363 | * | ||
| 364 | * Flushes both send and receive work queues. | ||
| 365 | * QP r_rq.lock and s_lock should be held. | ||
| 366 | */ | ||
| 367 | |||
| 368 | static void ipath_error_qp(struct ipath_qp *qp) | ||
| 369 | { | ||
| 370 | struct ipath_ibdev *dev = to_idev(qp->ibqp.device); | ||
| 371 | struct ib_wc wc; | ||
| 372 | |||
| 373 | _VERBS_INFO("QP%d/%d in error state\n", | ||
| 374 | qp->ibqp.qp_num, qp->remote_qpn); | ||
| 375 | |||
| 376 | spin_lock(&dev->pending_lock); | ||
| 377 | /* XXX What if its already removed by the timeout code? */ | ||
| 378 | if (qp->timerwait.next != LIST_POISON1) | ||
| 379 | list_del(&qp->timerwait); | ||
| 380 | if (qp->piowait.next != LIST_POISON1) | ||
| 381 | list_del(&qp->piowait); | ||
| 382 | spin_unlock(&dev->pending_lock); | ||
| 383 | |||
| 384 | wc.status = IB_WC_WR_FLUSH_ERR; | ||
| 385 | wc.vendor_err = 0; | ||
| 386 | wc.byte_len = 0; | ||
| 387 | wc.imm_data = 0; | ||
| 388 | wc.qp_num = qp->ibqp.qp_num; | ||
| 389 | wc.src_qp = 0; | ||
| 390 | wc.wc_flags = 0; | ||
| 391 | wc.pkey_index = 0; | ||
| 392 | wc.slid = 0; | ||
| 393 | wc.sl = 0; | ||
| 394 | wc.dlid_path_bits = 0; | ||
| 395 | wc.port_num = 0; | ||
| 396 | |||
| 397 | while (qp->s_last != qp->s_head) { | ||
| 398 | struct ipath_swqe *wqe = get_swqe_ptr(qp, qp->s_last); | ||
| 399 | |||
| 400 | wc.wr_id = wqe->wr.wr_id; | ||
| 401 | wc.opcode = ib_ipath_wc_opcode[wqe->wr.opcode]; | ||
| 402 | if (++qp->s_last >= qp->s_size) | ||
| 403 | qp->s_last = 0; | ||
| 404 | ipath_cq_enter(to_icq(qp->ibqp.send_cq), &wc, 1); | ||
| 405 | } | ||
| 406 | qp->s_cur = qp->s_tail = qp->s_head; | ||
| 407 | qp->s_hdrwords = 0; | ||
| 408 | qp->s_ack_state = IB_OPCODE_RC_ACKNOWLEDGE; | ||
| 409 | |||
| 410 | wc.opcode = IB_WC_RECV; | ||
| 411 | while (qp->r_rq.tail != qp->r_rq.head) { | ||
| 412 | wc.wr_id = get_rwqe_ptr(&qp->r_rq, qp->r_rq.tail)->wr_id; | ||
| 413 | if (++qp->r_rq.tail >= qp->r_rq.size) | ||
| 414 | qp->r_rq.tail = 0; | ||
| 415 | ipath_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, 1); | ||
| 416 | } | ||
| 417 | } | ||
| 418 | |||
| 419 | /** | ||
| 361 | * ipath_modify_qp - modify the attributes of a queue pair | 420 | * ipath_modify_qp - modify the attributes of a queue pair | 
| 362 | * @ibqp: the queue pair who's attributes we're modifying | 421 | * @ibqp: the queue pair who's attributes we're modifying | 
| 363 | * @attr: the new attributes | 422 | * @attr: the new attributes | 
| @@ -821,65 +880,6 @@ void ipath_sqerror_qp(struct ipath_qp *qp, struct ib_wc *wc) | |||
| 821 | } | 880 | } | 
| 822 | 881 | ||
| 823 | /** | 882 | /** | 
| 824 | * ipath_error_qp - put a QP into an error state | ||
| 825 | * @qp: the QP to put into an error state | ||
| 826 | * | ||
| 827 | * Flushes both send and receive work queues. | ||
| 828 | * QP r_rq.lock and s_lock should be held. | ||
| 829 | */ | ||
| 830 | |||
| 831 | void ipath_error_qp(struct ipath_qp *qp) | ||
| 832 | { | ||
| 833 | struct ipath_ibdev *dev = to_idev(qp->ibqp.device); | ||
| 834 | struct ib_wc wc; | ||
| 835 | |||
| 836 | _VERBS_INFO("QP%d/%d in error state\n", | ||
| 837 | qp->ibqp.qp_num, qp->remote_qpn); | ||
| 838 | |||
| 839 | spin_lock(&dev->pending_lock); | ||
| 840 | /* XXX What if its already removed by the timeout code? */ | ||
| 841 | if (qp->timerwait.next != LIST_POISON1) | ||
| 842 | list_del(&qp->timerwait); | ||
| 843 | if (qp->piowait.next != LIST_POISON1) | ||
| 844 | list_del(&qp->piowait); | ||
| 845 | spin_unlock(&dev->pending_lock); | ||
| 846 | |||
| 847 | wc.status = IB_WC_WR_FLUSH_ERR; | ||
| 848 | wc.vendor_err = 0; | ||
| 849 | wc.byte_len = 0; | ||
| 850 | wc.imm_data = 0; | ||
| 851 | wc.qp_num = qp->ibqp.qp_num; | ||
| 852 | wc.src_qp = 0; | ||
| 853 | wc.wc_flags = 0; | ||
| 854 | wc.pkey_index = 0; | ||
| 855 | wc.slid = 0; | ||
| 856 | wc.sl = 0; | ||
| 857 | wc.dlid_path_bits = 0; | ||
| 858 | wc.port_num = 0; | ||
| 859 | |||
| 860 | while (qp->s_last != qp->s_head) { | ||
| 861 | struct ipath_swqe *wqe = get_swqe_ptr(qp, qp->s_last); | ||
| 862 | |||
| 863 | wc.wr_id = wqe->wr.wr_id; | ||
| 864 | wc.opcode = ib_ipath_wc_opcode[wqe->wr.opcode]; | ||
| 865 | if (++qp->s_last >= qp->s_size) | ||
| 866 | qp->s_last = 0; | ||
| 867 | ipath_cq_enter(to_icq(qp->ibqp.send_cq), &wc, 1); | ||
| 868 | } | ||
| 869 | qp->s_cur = qp->s_tail = qp->s_head; | ||
| 870 | qp->s_hdrwords = 0; | ||
| 871 | qp->s_ack_state = IB_OPCODE_RC_ACKNOWLEDGE; | ||
| 872 | |||
| 873 | wc.opcode = IB_WC_RECV; | ||
| 874 | while (qp->r_rq.tail != qp->r_rq.head) { | ||
| 875 | wc.wr_id = get_rwqe_ptr(&qp->r_rq, qp->r_rq.tail)->wr_id; | ||
| 876 | if (++qp->r_rq.tail >= qp->r_rq.size) | ||
| 877 | qp->r_rq.tail = 0; | ||
| 878 | ipath_cq_enter(to_icq(qp->ibqp.recv_cq), &wc, 1); | ||
| 879 | } | ||
| 880 | } | ||
| 881 | |||
| 882 | /** | ||
| 883 | * ipath_get_credit - flush the send work queue of a QP | 883 | * ipath_get_credit - flush the send work queue of a QP | 
| 884 | * @qp: the qp who's send work queue to flush | 884 | * @qp: the qp who's send work queue to flush | 
| 885 | * @aeth: the Acknowledge Extended Transport Header | 885 | * @aeth: the Acknowledge Extended Transport Header | 
| diff --git a/drivers/infiniband/hw/ipath/ipath_ud.c b/drivers/infiniband/hw/ipath/ipath_ud.c index 5ff3de6128b2..01cfb30ee160 100644 --- a/drivers/infiniband/hw/ipath/ipath_ud.c +++ b/drivers/infiniband/hw/ipath/ipath_ud.c | |||
| @@ -46,8 +46,8 @@ | |||
| 46 | * This is called from ipath_post_ud_send() to forward a WQE addressed | 46 | * This is called from ipath_post_ud_send() to forward a WQE addressed | 
| 47 | * to the same HCA. | 47 | * to the same HCA. | 
| 48 | */ | 48 | */ | 
| 49 | void ipath_ud_loopback(struct ipath_qp *sqp, struct ipath_sge_state *ss, | 49 | static void ipath_ud_loopback(struct ipath_qp *sqp, struct ipath_sge_state *ss, | 
| 50 | u32 length, struct ib_send_wr *wr, struct ib_wc *wc) | 50 | u32 length, struct ib_send_wr *wr, struct ib_wc *wc) | 
| 51 | { | 51 | { | 
| 52 | struct ipath_ibdev *dev = to_idev(sqp->ibqp.device); | 52 | struct ipath_ibdev *dev = to_idev(sqp->ibqp.device); | 
| 53 | struct ipath_qp *qp; | 53 | struct ipath_qp *qp; | 
| diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.c b/drivers/infiniband/hw/ipath/ipath_verbs.c index 9f27fd35cdbb..8d2558a01f35 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.c +++ b/drivers/infiniband/hw/ipath/ipath_verbs.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | /* Not static, because we don't want the compiler removing it */ | 41 | /* Not static, because we don't want the compiler removing it */ | 
| 42 | const char ipath_verbs_version[] = "ipath_verbs " IPATH_IDSTR; | 42 | const char ipath_verbs_version[] = "ipath_verbs " IPATH_IDSTR; | 
| 43 | 43 | ||
| 44 | unsigned int ib_ipath_qp_table_size = 251; | 44 | static unsigned int ib_ipath_qp_table_size = 251; | 
| 45 | module_param_named(qp_table_size, ib_ipath_qp_table_size, uint, S_IRUGO); | 45 | module_param_named(qp_table_size, ib_ipath_qp_table_size, uint, S_IRUGO); | 
| 46 | MODULE_PARM_DESC(qp_table_size, "QP table size"); | 46 | MODULE_PARM_DESC(qp_table_size, "QP table size"); | 
| 47 | 47 | ||
| @@ -87,7 +87,7 @@ const enum ib_wc_opcode ib_ipath_wc_opcode[] = { | |||
| 87 | /* | 87 | /* | 
| 88 | * System image GUID. | 88 | * System image GUID. | 
| 89 | */ | 89 | */ | 
| 90 | __be64 sys_image_guid; | 90 | static __be64 sys_image_guid; | 
| 91 | 91 | ||
| 92 | /** | 92 | /** | 
| 93 | * ipath_copy_sge - copy data to SGE memory | 93 | * ipath_copy_sge - copy data to SGE memory | 
| @@ -1110,7 +1110,7 @@ static void ipath_unregister_ib_device(void *arg) | |||
| 1110 | ib_dealloc_device(ibdev); | 1110 | ib_dealloc_device(ibdev); | 
| 1111 | } | 1111 | } | 
| 1112 | 1112 | ||
| 1113 | int __init ipath_verbs_init(void) | 1113 | static int __init ipath_verbs_init(void) | 
| 1114 | { | 1114 | { | 
| 1115 | return ipath_verbs_register(ipath_register_ib_device, | 1115 | return ipath_verbs_register(ipath_register_ib_device, | 
| 1116 | ipath_unregister_ib_device, | 1116 | ipath_unregister_ib_device, | 
| @@ -1118,33 +1118,33 @@ int __init ipath_verbs_init(void) | |||
| 1118 | ipath_ib_timer); | 1118 | ipath_ib_timer); | 
| 1119 | } | 1119 | } | 
| 1120 | 1120 | ||
| 1121 | void __exit ipath_verbs_cleanup(void) | 1121 | static void __exit ipath_verbs_cleanup(void) | 
| 1122 | { | 1122 | { | 
| 1123 | ipath_verbs_unregister(); | 1123 | ipath_verbs_unregister(); | 
| 1124 | } | 1124 | } | 
| 1125 | 1125 | ||
| 1126 | static ssize_t show_rev(struct class_device *cdev, char *buf) | 1126 | static ssize_t show_rev(struct class_device *cdev, char *buf) | 
| 1127 | { | 1127 | { | 
| 1128 | struct ipath_ibdev *dev = | 1128 | struct ipath_ibdev *dev = | 
| 1129 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 1129 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 
| 1130 | int vendor, boardrev, majrev, minrev; | 1130 | int vendor, boardrev, majrev, minrev; | 
| 1131 | 1131 | ||
| 1132 | ipath_layer_query_device(dev->dd, &vendor, &boardrev, | 1132 | ipath_layer_query_device(dev->dd, &vendor, &boardrev, | 
| 1133 | &majrev, &minrev); | 1133 | &majrev, &minrev); | 
| 1134 | return sprintf(buf, "%d.%d\n", majrev, minrev); | 1134 | return sprintf(buf, "%d.%d\n", majrev, minrev); | 
| 1135 | } | 1135 | } | 
| 1136 | 1136 | ||
| 1137 | static ssize_t show_hca(struct class_device *cdev, char *buf) | 1137 | static ssize_t show_hca(struct class_device *cdev, char *buf) | 
| 1138 | { | 1138 | { | 
| 1139 | struct ipath_ibdev *dev = | 1139 | struct ipath_ibdev *dev = | 
| 1140 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 1140 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 
| 1141 | int ret; | 1141 | int ret; | 
| 1142 | 1142 | ||
| 1143 | ret = ipath_layer_get_boardname(dev->dd, buf, 128); | 1143 | ret = ipath_layer_get_boardname(dev->dd, buf, 128); | 
| 1144 | if (ret < 0) | 1144 | if (ret < 0) | 
| 1145 | goto bail; | 1145 | goto bail; | 
| 1146 | strcat(buf, "\n"); | 1146 | strcat(buf, "\n"); | 
| 1147 | ret = strlen(buf); | 1147 | ret = strlen(buf); | 
| 1148 | 1148 | ||
| 1149 | bail: | 1149 | bail: | 
| 1150 | return ret; | 1150 | return ret; | 
| @@ -1152,40 +1152,40 @@ bail: | |||
| 1152 | 1152 | ||
| 1153 | static ssize_t show_stats(struct class_device *cdev, char *buf) | 1153 | static ssize_t show_stats(struct class_device *cdev, char *buf) | 
| 1154 | { | 1154 | { | 
| 1155 | struct ipath_ibdev *dev = | 1155 | struct ipath_ibdev *dev = | 
| 1156 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 1156 | container_of(cdev, struct ipath_ibdev, ibdev.class_dev); | 
| 1157 | int i; | 1157 | int i; | 
| 1158 | int len; | 1158 | int len; | 
| 1159 | 1159 | ||
| 1160 | len = sprintf(buf, | 1160 | len = sprintf(buf, | 
| 1161 | "RC resends %d\n" | 1161 | "RC resends %d\n" | 
| 1162 | "RC QACKs %d\n" | 1162 | "RC QACKs %d\n" | 
| 1163 | "RC ACKs %d\n" | 1163 | "RC ACKs %d\n" | 
| 1164 | "RC SEQ NAKs %d\n" | 1164 | "RC SEQ NAKs %d\n" | 
| 1165 | "RC RDMA seq %d\n" | 1165 | "RC RDMA seq %d\n" | 
| 1166 | "RC RNR NAKs %d\n" | 1166 | "RC RNR NAKs %d\n" | 
| 1167 | "RC OTH NAKs %d\n" | 1167 | "RC OTH NAKs %d\n" | 
| 1168 | "RC timeouts %d\n" | 1168 | "RC timeouts %d\n" | 
| 1169 | "RC RDMA dup %d\n" | 1169 | "RC RDMA dup %d\n" | 
| 1170 | "piobuf wait %d\n" | 1170 | "piobuf wait %d\n" | 
| 1171 | "no piobuf %d\n" | 1171 | "no piobuf %d\n" | 
| 1172 | "PKT drops %d\n" | 1172 | "PKT drops %d\n" | 
| 1173 | "WQE errs %d\n", | 1173 | "WQE errs %d\n", | 
| 1174 | dev->n_rc_resends, dev->n_rc_qacks, dev->n_rc_acks, | 1174 | dev->n_rc_resends, dev->n_rc_qacks, dev->n_rc_acks, | 
| 1175 | dev->n_seq_naks, dev->n_rdma_seq, dev->n_rnr_naks, | 1175 | dev->n_seq_naks, dev->n_rdma_seq, dev->n_rnr_naks, | 
| 1176 | dev->n_other_naks, dev->n_timeouts, | 1176 | dev->n_other_naks, dev->n_timeouts, | 
| 1177 | dev->n_rdma_dup_busy, dev->n_piowait, | 1177 | dev->n_rdma_dup_busy, dev->n_piowait, | 
| 1178 | dev->n_no_piobuf, dev->n_pkt_drops, dev->n_wqe_errs); | 1178 | dev->n_no_piobuf, dev->n_pkt_drops, dev->n_wqe_errs); | 
| 1179 | for (i = 0; i < ARRAY_SIZE(dev->opstats); i++) { | 1179 | for (i = 0; i < ARRAY_SIZE(dev->opstats); i++) { | 
| 1180 | const struct ipath_opcode_stats *si = &dev->opstats[i]; | 1180 | const struct ipath_opcode_stats *si = &dev->opstats[i]; | 
| 1181 | 1181 | ||
| 1182 | if (!si->n_packets && !si->n_bytes) | 1182 | if (!si->n_packets && !si->n_bytes) | 
| 1183 | continue; | 1183 | continue; | 
| 1184 | len += sprintf(buf + len, "%02x %llu/%llu\n", i, | 1184 | len += sprintf(buf + len, "%02x %llu/%llu\n", i, | 
| 1185 | (unsigned long long) si->n_packets, | 1185 | (unsigned long long) si->n_packets, | 
| 1186 | (unsigned long long) si->n_bytes); | 1186 | (unsigned long long) si->n_bytes); | 
| 1187 | } | 1187 | } | 
| 1188 | return len; | 1188 | return len; | 
| 1189 | } | 1189 | } | 
| 1190 | 1190 | ||
| 1191 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); | 1191 | static CLASS_DEVICE_ATTR(hw_rev, S_IRUGO, show_rev, NULL); | 
| @@ -1194,25 +1194,25 @@ static CLASS_DEVICE_ATTR(board_id, S_IRUGO, show_hca, NULL); | |||
| 1194 | static CLASS_DEVICE_ATTR(stats, S_IRUGO, show_stats, NULL); | 1194 | static CLASS_DEVICE_ATTR(stats, S_IRUGO, show_stats, NULL); | 
| 1195 | 1195 | ||
| 1196 | static struct class_device_attribute *ipath_class_attributes[] = { | 1196 | static struct class_device_attribute *ipath_class_attributes[] = { | 
| 1197 | &class_device_attr_hw_rev, | 1197 | &class_device_attr_hw_rev, | 
| 1198 | &class_device_attr_hca_type, | 1198 | &class_device_attr_hca_type, | 
| 1199 | &class_device_attr_board_id, | 1199 | &class_device_attr_board_id, | 
| 1200 | &class_device_attr_stats | 1200 | &class_device_attr_stats | 
| 1201 | }; | 1201 | }; | 
| 1202 | 1202 | ||
| 1203 | static int ipath_verbs_register_sysfs(struct ib_device *dev) | 1203 | static int ipath_verbs_register_sysfs(struct ib_device *dev) | 
| 1204 | { | 1204 | { | 
| 1205 | int i; | 1205 | int i; | 
| 1206 | int ret; | 1206 | int ret; | 
| 1207 | 1207 | ||
| 1208 | for (i = 0; i < ARRAY_SIZE(ipath_class_attributes); ++i) | 1208 | for (i = 0; i < ARRAY_SIZE(ipath_class_attributes); ++i) | 
| 1209 | if (class_device_create_file(&dev->class_dev, | 1209 | if (class_device_create_file(&dev->class_dev, | 
| 1210 | ipath_class_attributes[i])) { | 1210 | ipath_class_attributes[i])) { | 
| 1211 | ret = 1; | 1211 | ret = 1; | 
| 1212 | goto bail; | 1212 | goto bail; | 
| 1213 | } | 1213 | } | 
| 1214 | 1214 | ||
| 1215 | ret = 0; | 1215 | ret = 0; | 
| 1216 | 1216 | ||
| 1217 | bail: | 1217 | bail: | 
| 1218 | return ret; | 1218 | return ret; | 
| diff --git a/drivers/infiniband/hw/ipath/ipath_verbs.h b/drivers/infiniband/hw/ipath/ipath_verbs.h index b824632b2a8c..fcafbc7c9e71 100644 --- a/drivers/infiniband/hw/ipath/ipath_verbs.h +++ b/drivers/infiniband/hw/ipath/ipath_verbs.h | |||
| @@ -577,8 +577,6 @@ int ipath_init_qp_table(struct ipath_ibdev *idev, int size); | |||
| 577 | 577 | ||
| 578 | void ipath_sqerror_qp(struct ipath_qp *qp, struct ib_wc *wc); | 578 | void ipath_sqerror_qp(struct ipath_qp *qp, struct ib_wc *wc); | 
| 579 | 579 | ||
| 580 | void ipath_error_qp(struct ipath_qp *qp); | ||
| 581 | |||
| 582 | void ipath_get_credit(struct ipath_qp *qp, u32 aeth); | 580 | void ipath_get_credit(struct ipath_qp *qp, u32 aeth); | 
| 583 | 581 | ||
| 584 | void ipath_do_rc_send(unsigned long data); | 582 | void ipath_do_rc_send(unsigned long data); | 
| @@ -607,9 +605,6 @@ void ipath_rc_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr, | |||
| 607 | 605 | ||
| 608 | void ipath_restart_rc(struct ipath_qp *qp, u32 psn, struct ib_wc *wc); | 606 | void ipath_restart_rc(struct ipath_qp *qp, u32 psn, struct ib_wc *wc); | 
| 609 | 607 | ||
| 610 | void ipath_ud_loopback(struct ipath_qp *sqp, struct ipath_sge_state *ss, | ||
| 611 | u32 length, struct ib_send_wr *wr, struct ib_wc *wc); | ||
| 612 | |||
| 613 | int ipath_post_ud_send(struct ipath_qp *qp, struct ib_send_wr *wr); | 608 | int ipath_post_ud_send(struct ipath_qp *qp, struct ib_send_wr *wr); | 
| 614 | 609 | ||
| 615 | void ipath_ud_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr, | 610 | void ipath_ud_rcv(struct ipath_ibdev *dev, struct ipath_ib_header *hdr, | 
| diff --git a/drivers/infiniband/hw/mthca/mthca_mad.c b/drivers/infiniband/hw/mthca/mthca_mad.c index f235c7ea42f0..4730863ece9a 100644 --- a/drivers/infiniband/hw/mthca/mthca_mad.c +++ b/drivers/infiniband/hw/mthca/mthca_mad.c | |||
| @@ -49,7 +49,7 @@ enum { | |||
| 49 | MTHCA_VENDOR_CLASS2 = 0xa | 49 | MTHCA_VENDOR_CLASS2 = 0xa | 
| 50 | }; | 50 | }; | 
| 51 | 51 | ||
| 52 | int mthca_update_rate(struct mthca_dev *dev, u8 port_num) | 52 | static int mthca_update_rate(struct mthca_dev *dev, u8 port_num) | 
| 53 | { | 53 | { | 
| 54 | struct ib_port_attr *tprops = NULL; | 54 | struct ib_port_attr *tprops = NULL; | 
| 55 | int ret; | 55 | int ret; | 
| diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 5f2b3f6e4c47..5bb55742ada6 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c | |||
| @@ -617,6 +617,14 @@ static void srp_unmap_data(struct scsi_cmnd *scmnd, | |||
| 617 | scmnd->sc_data_direction); | 617 | scmnd->sc_data_direction); | 
| 618 | } | 618 | } | 
| 619 | 619 | ||
| 620 | static void srp_remove_req(struct srp_target_port *target, struct srp_request *req, | ||
| 621 | int index) | ||
| 622 | { | ||
| 623 | list_del(&req->list); | ||
| 624 | req->next = target->req_head; | ||
| 625 | target->req_head = index; | ||
| 626 | } | ||
| 627 | |||
| 620 | static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp) | 628 | static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp) | 
| 621 | { | 629 | { | 
| 622 | struct srp_request *req; | 630 | struct srp_request *req; | 
| @@ -664,9 +672,7 @@ static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp) | |||
| 664 | scmnd->host_scribble = (void *) -1L; | 672 | scmnd->host_scribble = (void *) -1L; | 
| 665 | scmnd->scsi_done(scmnd); | 673 | scmnd->scsi_done(scmnd); | 
| 666 | 674 | ||
| 667 | list_del(&req->list); | 675 | srp_remove_req(target, req, rsp->tag & ~SRP_TAG_TSK_MGMT); | 
| 668 | req->next = target->req_head; | ||
| 669 | target->req_head = rsp->tag & ~SRP_TAG_TSK_MGMT; | ||
| 670 | } else | 676 | } else | 
| 671 | req->cmd_done = 1; | 677 | req->cmd_done = 1; | 
| 672 | } | 678 | } | 
| @@ -1188,12 +1194,10 @@ static int srp_send_tsk_mgmt(struct scsi_cmnd *scmnd, u8 func) | |||
| 1188 | spin_lock_irq(target->scsi_host->host_lock); | 1194 | spin_lock_irq(target->scsi_host->host_lock); | 
| 1189 | 1195 | ||
| 1190 | if (req->cmd_done) { | 1196 | if (req->cmd_done) { | 
| 1191 | list_del(&req->list); | 1197 | srp_remove_req(target, req, req_index); | 
| 1192 | req->next = target->req_head; | ||
| 1193 | target->req_head = req_index; | ||
| 1194 | |||
| 1195 | scmnd->scsi_done(scmnd); | 1198 | scmnd->scsi_done(scmnd); | 
| 1196 | } else if (!req->tsk_status) { | 1199 | } else if (!req->tsk_status) { | 
| 1200 | srp_remove_req(target, req, req_index); | ||
| 1197 | scmnd->result = DID_ABORT << 16; | 1201 | scmnd->result = DID_ABORT << 16; | 
| 1198 | ret = SUCCESS; | 1202 | ret = SUCCESS; | 
| 1199 | } | 1203 | } | 
| diff --git a/drivers/md/md.c b/drivers/md/md.c index 434ca39d19c1..d7316b829a62 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -279,11 +279,6 @@ static inline int mddev_lock(mddev_t * mddev) | |||
| 279 | return mutex_lock_interruptible(&mddev->reconfig_mutex); | 279 | return mutex_lock_interruptible(&mddev->reconfig_mutex); | 
| 280 | } | 280 | } | 
| 281 | 281 | ||
| 282 | static inline void mddev_lock_uninterruptible(mddev_t * mddev) | ||
| 283 | { | ||
| 284 | mutex_lock(&mddev->reconfig_mutex); | ||
| 285 | } | ||
| 286 | |||
| 287 | static inline int mddev_trylock(mddev_t * mddev) | 282 | static inline int mddev_trylock(mddev_t * mddev) | 
| 288 | { | 283 | { | 
| 289 | return mutex_trylock(&mddev->reconfig_mutex); | 284 | return mutex_trylock(&mddev->reconfig_mutex); | 
| @@ -2458,9 +2453,11 @@ md_attr_show(struct kobject *kobj, struct attribute *attr, char *page) | |||
| 2458 | 2453 | ||
| 2459 | if (!entry->show) | 2454 | if (!entry->show) | 
| 2460 | return -EIO; | 2455 | return -EIO; | 
| 2461 | mddev_lock(mddev); | 2456 | rv = mddev_lock(mddev); | 
| 2462 | rv = entry->show(mddev, page); | 2457 | if (!rv) { | 
| 2463 | mddev_unlock(mddev); | 2458 | rv = entry->show(mddev, page); | 
| 2459 | mddev_unlock(mddev); | ||
| 2460 | } | ||
| 2464 | return rv; | 2461 | return rv; | 
| 2465 | } | 2462 | } | 
| 2466 | 2463 | ||
| @@ -2474,9 +2471,11 @@ md_attr_store(struct kobject *kobj, struct attribute *attr, | |||
| 2474 | 2471 | ||
| 2475 | if (!entry->store) | 2472 | if (!entry->store) | 
| 2476 | return -EIO; | 2473 | return -EIO; | 
| 2477 | mddev_lock(mddev); | 2474 | rv = mddev_lock(mddev); | 
| 2478 | rv = entry->store(mddev, page, length); | 2475 | if (!rv) { | 
| 2479 | mddev_unlock(mddev); | 2476 | rv = entry->store(mddev, page, length); | 
| 2477 | mddev_unlock(mddev); | ||
| 2478 | } | ||
| 2480 | return rv; | 2479 | return rv; | 
| 2481 | } | 2480 | } | 
| 2482 | 2481 | ||
| @@ -4341,8 +4340,9 @@ static int md_seq_show(struct seq_file *seq, void *v) | |||
| 4341 | return 0; | 4340 | return 0; | 
| 4342 | } | 4341 | } | 
| 4343 | 4342 | ||
| 4344 | if (mddev_lock(mddev)!=0) | 4343 | if (mddev_lock(mddev) < 0) | 
| 4345 | return -EINTR; | 4344 | return -EINTR; | 
| 4345 | |||
| 4346 | if (mddev->pers || mddev->raid_disks || !list_empty(&mddev->disks)) { | 4346 | if (mddev->pers || mddev->raid_disks || !list_empty(&mddev->disks)) { | 
| 4347 | seq_printf(seq, "%s : %sactive", mdname(mddev), | 4347 | seq_printf(seq, "%s : %sactive", mdname(mddev), | 
| 4348 | mddev->pers ? "" : "in"); | 4348 | mddev->pers ? "" : "in"); | 
| diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c index d5890027f8af..48bbf32fd980 100644 --- a/drivers/parport/parport_pc.c +++ b/drivers/parport/parport_pc.c | |||
| @@ -97,7 +97,7 @@ static struct superio_struct { /* For Super-IO chips autodetection */ | |||
| 97 | int io; | 97 | int io; | 
| 98 | int irq; | 98 | int irq; | 
| 99 | int dma; | 99 | int dma; | 
| 100 | } superios[NR_SUPERIOS] __devinitdata = { {0,},}; | 100 | } superios[NR_SUPERIOS] = { {0,},}; | 
| 101 | 101 | ||
| 102 | static int user_specified; | 102 | static int user_specified; | 
| 103 | #if defined(CONFIG_PARPORT_PC_SUPERIO) || \ | 103 | #if defined(CONFIG_PARPORT_PC_SUPERIO) || \ | 
| @@ -1557,7 +1557,7 @@ static int __devinit get_superio_dma (struct parport *p) | |||
| 1557 | return PARPORT_DMA_NONE; | 1557 | return PARPORT_DMA_NONE; | 
| 1558 | } | 1558 | } | 
| 1559 | 1559 | ||
| 1560 | static int __devinit get_superio_irq (struct parport *p) | 1560 | static int get_superio_irq (struct parport *p) | 
| 1561 | { | 1561 | { | 
| 1562 | int i=0; | 1562 | int i=0; | 
| 1563 | while( (superios[i].io != p->base) && (i<NR_SUPERIOS)) | 1563 | while( (superios[i].io != p->base) && (i<NR_SUPERIOS)) | 
| @@ -1579,7 +1579,7 @@ static int __devinit get_superio_irq (struct parport *p) | |||
| 1579 | * this shall always be the case!) | 1579 | * this shall always be the case!) | 
| 1580 | * | 1580 | * | 
| 1581 | */ | 1581 | */ | 
| 1582 | static int __devinit parport_SPP_supported(struct parport *pb) | 1582 | static int parport_SPP_supported(struct parport *pb) | 
| 1583 | { | 1583 | { | 
| 1584 | unsigned char r, w; | 1584 | unsigned char r, w; | 
| 1585 | 1585 | ||
| @@ -1660,7 +1660,7 @@ static int __devinit parport_SPP_supported(struct parport *pb) | |||
| 1660 | * two bits of ECR aren't writable, so we check by writing ECR and | 1660 | * two bits of ECR aren't writable, so we check by writing ECR and | 
| 1661 | * reading it back to see if it's what we expect. | 1661 | * reading it back to see if it's what we expect. | 
| 1662 | */ | 1662 | */ | 
| 1663 | static int __devinit parport_ECR_present(struct parport *pb) | 1663 | static int parport_ECR_present(struct parport *pb) | 
| 1664 | { | 1664 | { | 
| 1665 | struct parport_pc_private *priv = pb->private_data; | 1665 | struct parport_pc_private *priv = pb->private_data; | 
| 1666 | unsigned char r = 0xc; | 1666 | unsigned char r = 0xc; | 
| @@ -1712,7 +1712,7 @@ static int __devinit parport_ECR_present(struct parport *pb) | |||
| 1712 | * be misdetected here is rather academic. | 1712 | * be misdetected here is rather academic. | 
| 1713 | */ | 1713 | */ | 
| 1714 | 1714 | ||
| 1715 | static int __devinit parport_PS2_supported(struct parport *pb) | 1715 | static int parport_PS2_supported(struct parport *pb) | 
| 1716 | { | 1716 | { | 
| 1717 | int ok = 0; | 1717 | int ok = 0; | 
| 1718 | 1718 | ||
| @@ -1868,7 +1868,7 @@ static int __devinit parport_ECP_supported(struct parport *pb) | |||
| 1868 | } | 1868 | } | 
| 1869 | #endif | 1869 | #endif | 
| 1870 | 1870 | ||
| 1871 | static int __devinit parport_ECPPS2_supported(struct parport *pb) | 1871 | static int parport_ECPPS2_supported(struct parport *pb) | 
| 1872 | { | 1872 | { | 
| 1873 | const struct parport_pc_private *priv = pb->private_data; | 1873 | const struct parport_pc_private *priv = pb->private_data; | 
| 1874 | int result; | 1874 | int result; | 
| @@ -1886,7 +1886,7 @@ static int __devinit parport_ECPPS2_supported(struct parport *pb) | |||
| 1886 | 1886 | ||
| 1887 | /* EPP mode detection */ | 1887 | /* EPP mode detection */ | 
| 1888 | 1888 | ||
| 1889 | static int __devinit parport_EPP_supported(struct parport *pb) | 1889 | static int parport_EPP_supported(struct parport *pb) | 
| 1890 | { | 1890 | { | 
| 1891 | const struct parport_pc_private *priv = pb->private_data; | 1891 | const struct parport_pc_private *priv = pb->private_data; | 
| 1892 | 1892 | ||
| @@ -1931,7 +1931,7 @@ static int __devinit parport_EPP_supported(struct parport *pb) | |||
| 1931 | return 1; | 1931 | return 1; | 
| 1932 | } | 1932 | } | 
| 1933 | 1933 | ||
| 1934 | static int __devinit parport_ECPEPP_supported(struct parport *pb) | 1934 | static int parport_ECPEPP_supported(struct parport *pb) | 
| 1935 | { | 1935 | { | 
| 1936 | struct parport_pc_private *priv = pb->private_data; | 1936 | struct parport_pc_private *priv = pb->private_data; | 
| 1937 | int result; | 1937 | int result; | 
| @@ -2073,7 +2073,7 @@ static int __devinit irq_probe_SPP(struct parport *pb) | |||
| 2073 | * When ECP is available we can autoprobe for IRQs. | 2073 | * When ECP is available we can autoprobe for IRQs. | 
| 2074 | * NOTE: If we can autoprobe it, we can register the IRQ. | 2074 | * NOTE: If we can autoprobe it, we can register the IRQ. | 
| 2075 | */ | 2075 | */ | 
| 2076 | static int __devinit parport_irq_probe(struct parport *pb) | 2076 | static int parport_irq_probe(struct parport *pb) | 
| 2077 | { | 2077 | { | 
| 2078 | struct parport_pc_private *priv = pb->private_data; | 2078 | struct parport_pc_private *priv = pb->private_data; | 
| 2079 | 2079 | ||
| @@ -2779,7 +2779,7 @@ static struct parport_pc_pci { | |||
| 2779 | /* If set, this is called after probing for ports. If 'failed' | 2779 | /* If set, this is called after probing for ports. If 'failed' | 
| 2780 | * is non-zero we couldn't use any of the ports. */ | 2780 | * is non-zero we couldn't use any of the ports. */ | 
| 2781 | void (*postinit_hook) (struct pci_dev *pdev, int failed); | 2781 | void (*postinit_hook) (struct pci_dev *pdev, int failed); | 
| 2782 | } cards[] __devinitdata = { | 2782 | } cards[] = { | 
| 2783 | /* siig_1p_10x */ { 1, { { 2, 3 }, } }, | 2783 | /* siig_1p_10x */ { 1, { { 2, 3 }, } }, | 
| 2784 | /* siig_2p_10x */ { 2, { { 2, 3 }, { 4, 5 }, } }, | 2784 | /* siig_2p_10x */ { 2, { { 2, 3 }, { 4, 5 }, } }, | 
| 2785 | /* siig_1p_20x */ { 1, { { 0, 1 }, } }, | 2785 | /* siig_1p_20x */ { 1, { { 0, 1 }, } }, | 
| diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 827550d25c9e..c42ae2cf8d64 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -865,6 +865,35 @@ static void __init quirk_eisa_bridge(struct pci_dev *dev) | |||
| 865 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82375, quirk_eisa_bridge ); | 865 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82375, quirk_eisa_bridge ); | 
| 866 | 866 | ||
| 867 | /* | 867 | /* | 
| 868 | * On the MSI-K8T-Neo2Fir Board, the internal Soundcard is disabled | ||
| 869 | * when a PCI-Soundcard is added. The BIOS only gives Options | ||
| 870 | * "Disabled" and "AUTO". This Quirk Sets the corresponding | ||
| 871 | * Register-Value to enable the Soundcard. | ||
| 872 | */ | ||
| 873 | static void __init k8t_sound_hostbridge(struct pci_dev *dev) | ||
| 874 | { | ||
| 875 | unsigned char val; | ||
| 876 | |||
| 877 | printk(KERN_INFO "PCI: Quirk-MSI-K8T Soundcard On\n"); | ||
| 878 | pci_read_config_byte(dev, 0x50, &val); | ||
| 879 | if (val == 0x88 || val == 0xc8) { | ||
| 880 | pci_write_config_byte(dev, 0x50, val & (~0x40)); | ||
| 881 | |||
| 882 | /* Verify the Change for Status output */ | ||
| 883 | pci_read_config_byte(dev, 0x50, &val); | ||
| 884 | if (val & 0x40) | ||
| 885 | printk(KERN_INFO "PCI: MSI-K8T soundcard still off\n"); | ||
| 886 | else | ||
| 887 | printk(KERN_INFO "PCI: MSI-K8T soundcard on\n"); | ||
| 888 | } else { | ||
| 889 | printk(KERN_INFO "PCI: Unexpected Value in PCI-Register: " | ||
| 890 | "no Change!\n"); | ||
| 891 | } | ||
| 892 | |||
| 893 | } | ||
| 894 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, k8t_sound_hostbridge); | ||
| 895 | |||
| 896 | /* | ||
| 868 | * On ASUS P4B boards, the SMBus PCI Device within the ICH2/4 southbridge | 897 | * On ASUS P4B boards, the SMBus PCI Device within the ICH2/4 southbridge | 
| 869 | * is not activated. The myth is that Asus said that they do not want the | 898 | * is not activated. The myth is that Asus said that they do not want the | 
| 870 | * users to be irritated by just another PCI Device in the Win98 device | 899 | * users to be irritated by just another PCI Device in the Win98 device | 
| diff --git a/drivers/pcmcia/pxa2xx_sharpsl.c b/drivers/pcmcia/pxa2xx_sharpsl.c index fd3647368955..b7b9e149c5b9 100644 --- a/drivers/pcmcia/pxa2xx_sharpsl.c +++ b/drivers/pcmcia/pxa2xx_sharpsl.c | |||
| @@ -26,14 +26,6 @@ | |||
| 26 | #include "soc_common.h" | 26 | #include "soc_common.h" | 
| 27 | 27 | ||
| 28 | #define NO_KEEP_VS 0x0001 | 28 | #define NO_KEEP_VS 0x0001 | 
| 29 | |||
| 30 | /* PCMCIA to Scoop linkage | ||
| 31 | |||
| 32 | There is no easy way to link multiple scoop devices into one | ||
| 33 | single entity for the pxa2xx_pcmcia device so this structure | ||
| 34 | is used which is setup by the platform code | ||
| 35 | */ | ||
| 36 | struct scoop_pcmcia_config *platform_scoop_config; | ||
| 37 | #define SCOOP_DEV platform_scoop_config->devs | 29 | #define SCOOP_DEV platform_scoop_config->devs | 
| 38 | 30 | ||
| 39 | static void sharpsl_pcmcia_init_reset(struct soc_pcmcia_socket *skt) | 31 | static void sharpsl_pcmcia_init_reset(struct soc_pcmcia_socket *skt) | 
| diff --git a/drivers/pnp/manager.c b/drivers/pnp/manager.c index c4256aa32bcb..6fff109bdab6 100644 --- a/drivers/pnp/manager.c +++ b/drivers/pnp/manager.c | |||
| @@ -479,7 +479,7 @@ int pnp_auto_config_dev(struct pnp_dev *dev) | |||
| 479 | int pnp_start_dev(struct pnp_dev *dev) | 479 | int pnp_start_dev(struct pnp_dev *dev) | 
| 480 | { | 480 | { | 
| 481 | if (!pnp_can_write(dev)) { | 481 | if (!pnp_can_write(dev)) { | 
| 482 | pnp_info("Device %s does not supported activation.", dev->dev.bus_id); | 482 | pnp_info("Device %s does not support activation.", dev->dev.bus_id); | 
| 483 | return -EINVAL; | 483 | return -EINVAL; | 
| 484 | } | 484 | } | 
| 485 | 485 | ||
| @@ -503,7 +503,7 @@ int pnp_start_dev(struct pnp_dev *dev) | |||
| 503 | int pnp_stop_dev(struct pnp_dev *dev) | 503 | int pnp_stop_dev(struct pnp_dev *dev) | 
| 504 | { | 504 | { | 
| 505 | if (!pnp_can_disable(dev)) { | 505 | if (!pnp_can_disable(dev)) { | 
| 506 | pnp_info("Device %s does not supported disabling.", dev->dev.bus_id); | 506 | pnp_info("Device %s does not support disabling.", dev->dev.bus_id); | 
| 507 | return -EINVAL; | 507 | return -EINVAL; | 
| 508 | } | 508 | } | 
| 509 | if (dev->protocol->disable(dev)<0) { | 509 | if (dev->protocol->disable(dev)<0) { | 
| diff --git a/drivers/serial/m32r_sio.c b/drivers/serial/m32r_sio.c index e9c10c0a30fc..321a40f33b50 100644 --- a/drivers/serial/m32r_sio.c +++ b/drivers/serial/m32r_sio.c | |||
| @@ -1057,7 +1057,6 @@ static void m32r_sio_console_write(struct console *co, const char *s, | |||
| 1057 | { | 1057 | { | 
| 1058 | struct uart_sio_port *up = &m32r_sio_ports[co->index]; | 1058 | struct uart_sio_port *up = &m32r_sio_ports[co->index]; | 
| 1059 | unsigned int ier; | 1059 | unsigned int ier; | 
| 1060 | int i; | ||
| 1061 | 1060 | ||
| 1062 | /* | 1061 | /* | 
| 1063 | * First save the UER then disable the interrupts | 1062 | * First save the UER then disable the interrupts | 
| diff --git a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c index 9a6b5b39b88e..387a18a47ac2 100644 --- a/drivers/video/aty/radeon_base.c +++ b/drivers/video/aty/radeon_base.c | |||
| @@ -2265,7 +2265,7 @@ static struct bin_attribute edid2_attr = { | |||
| 2265 | }; | 2265 | }; | 
| 2266 | 2266 | ||
| 2267 | 2267 | ||
| 2268 | static int radeonfb_pci_register (struct pci_dev *pdev, | 2268 | static int __devinit radeonfb_pci_register (struct pci_dev *pdev, | 
| 2269 | const struct pci_device_id *ent) | 2269 | const struct pci_device_id *ent) | 
| 2270 | { | 2270 | { | 
| 2271 | struct fb_info *info; | 2271 | struct fb_info *info; | 
| diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c index 8d8eadb64853..372aa1776827 100644 --- a/drivers/video/fbmem.c +++ b/drivers/video/fbmem.c | |||
| @@ -674,13 +674,19 @@ fb_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) | |||
| 674 | total_size = info->fix.smem_len; | 674 | total_size = info->fix.smem_len; | 
| 675 | 675 | ||
| 676 | if (p > total_size) | 676 | if (p > total_size) | 
| 677 | return 0; | 677 | return -EFBIG; | 
| 678 | 678 | ||
| 679 | if (count >= total_size) | 679 | if (count > total_size) { | 
| 680 | err = -EFBIG; | ||
| 680 | count = total_size; | 681 | count = total_size; | 
| 682 | } | ||
| 683 | |||
| 684 | if (count + p > total_size) { | ||
| 685 | if (!err) | ||
| 686 | err = -ENOSPC; | ||
| 681 | 687 | ||
| 682 | if (count + p > total_size) | ||
| 683 | count = total_size - p; | 688 | count = total_size - p; | 
| 689 | } | ||
| 684 | 690 | ||
| 685 | buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, | 691 | buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, | 
| 686 | GFP_KERNEL); | 692 | GFP_KERNEL); | 
| @@ -722,7 +728,7 @@ fb_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) | |||
| 722 | 728 | ||
| 723 | kfree(buffer); | 729 | kfree(buffer); | 
| 724 | 730 | ||
| 725 | return (err) ? err : cnt; | 731 | return (cnt) ? cnt : err; | 
| 726 | } | 732 | } | 
| 727 | 733 | ||
| 728 | #ifdef CONFIG_KMOD | 734 | #ifdef CONFIG_KMOD | 
| diff --git a/drivers/video/pm2fb.c b/drivers/video/pm2fb.c index 5fe197943deb..4e963930b50a 100644 --- a/drivers/video/pm2fb.c +++ b/drivers/video/pm2fb.c | |||
| @@ -73,8 +73,8 @@ static char *mode __devinitdata = NULL; | |||
| 73 | * these flags allow the user to specify that requests for +ve sync | 73 | * these flags allow the user to specify that requests for +ve sync | 
| 74 | * should be silently turned in -ve sync. | 74 | * should be silently turned in -ve sync. | 
| 75 | */ | 75 | */ | 
| 76 | static int lowhsync __devinitdata = 0; | 76 | static int lowhsync; | 
| 77 | static int lowvsync __devinitdata = 0; | 77 | static int lowvsync; | 
| 78 | 78 | ||
| 79 | /* | 79 | /* | 
| 80 | * The hardware state of the graphics card that isn't part of the | 80 | * The hardware state of the graphics card that isn't part of the | 
| diff --git a/drivers/video/savage/savagefb_driver.c b/drivers/video/savage/savagefb_driver.c index 10e6b3aab9ea..0da624e6524f 100644 --- a/drivers/video/savage/savagefb_driver.c +++ b/drivers/video/savage/savagefb_driver.c | |||
| @@ -73,7 +73,7 @@ | |||
| 73 | /* --------------------------------------------------------------------- */ | 73 | /* --------------------------------------------------------------------- */ | 
| 74 | 74 | ||
| 75 | 75 | ||
| 76 | static char *mode_option __initdata = NULL; | 76 | static char *mode_option __devinitdata = NULL; | 
| 77 | 77 | ||
| 78 | #ifdef MODULE | 78 | #ifdef MODULE | 
| 79 | 79 | ||
| @@ -1545,7 +1545,7 @@ static int __devinit savage_map_mmio (struct fb_info *info) | |||
| 1545 | return 0; | 1545 | return 0; | 
| 1546 | } | 1546 | } | 
| 1547 | 1547 | ||
| 1548 | static void __devinit savage_unmap_mmio (struct fb_info *info) | 1548 | static void savage_unmap_mmio (struct fb_info *info) | 
| 1549 | { | 1549 | { | 
| 1550 | struct savagefb_par *par = info->par; | 1550 | struct savagefb_par *par = info->par; | 
| 1551 | DBG ("savage_unmap_mmio"); | 1551 | DBG ("savage_unmap_mmio"); | 
| @@ -1597,7 +1597,7 @@ static int __devinit savage_map_video (struct fb_info *info, | |||
| 1597 | return 0; | 1597 | return 0; | 
| 1598 | } | 1598 | } | 
| 1599 | 1599 | ||
| 1600 | static void __devinit savage_unmap_video (struct fb_info *info) | 1600 | static void savage_unmap_video (struct fb_info *info) | 
| 1601 | { | 1601 | { | 
| 1602 | struct savagefb_par *par = info->par; | 1602 | struct savagefb_par *par = info->par; | 
| 1603 | 1603 | ||
| @@ -1614,7 +1614,7 @@ static void __devinit savage_unmap_video (struct fb_info *info) | |||
| 1614 | } | 1614 | } | 
| 1615 | } | 1615 | } | 
| 1616 | 1616 | ||
| 1617 | static int __devinit savage_init_hw (struct savagefb_par *par) | 1617 | static int savage_init_hw (struct savagefb_par *par) | 
| 1618 | { | 1618 | { | 
| 1619 | unsigned char config1, m, n, n1, n2, sr8, cr3f, cr66 = 0, tmp; | 1619 | unsigned char config1, m, n, n1, n2, sr8, cr3f, cr66 = 0, tmp; | 
| 1620 | 1620 | ||
