Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' into for-linus

+456 -275
+1 -1
Makefile
··· 1 1 VERSION = 2 2 2 PATCHLEVEL = 6 3 3 SUBLEVEL = 31 4 - EXTRAVERSION = -rc6 4 + EXTRAVERSION = -rc7 5 5 NAME = Man-Eating Seals of Antiquity 6 6 7 7 # *DOCUMENTATION*
+3
arch/x86/kernel/apic/ipi.c
··· 106 106 unsigned long mask = cpumask_bits(cpumask)[0]; 107 107 unsigned long flags; 108 108 109 + if (WARN_ONCE(!mask, "empty IPI mask")) 110 + return; 111 + 109 112 local_irq_save(flags); 110 113 WARN_ON(mask & ~cpumask_bits(cpu_online_mask)[0]); 111 114 __default_send_IPI_dest_field(mask, vector, apic->dest_logical);
+10 -11
arch/x86/mm/tlb.c
··· 183 183 184 184 f->flush_mm = mm; 185 185 f->flush_va = va; 186 - cpumask_andnot(to_cpumask(f->flush_cpumask), 187 - cpumask, cpumask_of(smp_processor_id())); 186 + if (cpumask_andnot(to_cpumask(f->flush_cpumask), cpumask, cpumask_of(smp_processor_id()))) { 187 + /* 188 + * We have to send the IPI only to 189 + * CPUs affected. 190 + */ 191 + apic->send_IPI_mask(to_cpumask(f->flush_cpumask), 192 + INVALIDATE_TLB_VECTOR_START + sender); 188 193 189 - /* 190 - * We have to send the IPI only to 191 - * CPUs affected. 192 - */ 193 - apic->send_IPI_mask(to_cpumask(f->flush_cpumask), 194 - INVALIDATE_TLB_VECTOR_START + sender); 195 - 196 - while (!cpumask_empty(to_cpumask(f->flush_cpumask))) 197 - cpu_relax(); 194 + while (!cpumask_empty(to_cpumask(f->flush_cpumask))) 195 + cpu_relax(); 196 + } 198 197 199 198 f->flush_mm = NULL; 200 199 f->flush_va = 0;
+27 -20
drivers/gpu/drm/drm_sysfs.c
··· 22 22 #define to_drm_minor(d) container_of(d, struct drm_minor, kdev) 23 23 #define to_drm_connector(d) container_of(d, struct drm_connector, kdev) 24 24 25 + static struct device_type drm_sysfs_device_minor = { 26 + .name = "drm_minor" 27 + }; 28 + 25 29 /** 26 - * drm_sysfs_suspend - DRM class suspend hook 30 + * drm_class_suspend - DRM class suspend hook 27 31 * @dev: Linux device to suspend 28 32 * @state: power state to enter 29 33 * 30 34 * Just figures out what the actual struct drm_device associated with 31 35 * @dev is and calls its suspend hook, if present. 32 36 */ 33 - static int drm_sysfs_suspend(struct device *dev, pm_message_t state) 37 + static int drm_class_suspend(struct device *dev, pm_message_t state) 34 38 { 35 - struct drm_minor *drm_minor = to_drm_minor(dev); 36 - struct drm_device *drm_dev = drm_minor->dev; 39 + if (dev->type == &drm_sysfs_device_minor) { 40 + struct drm_minor *drm_minor = to_drm_minor(dev); 41 + struct drm_device *drm_dev = drm_minor->dev; 37 42 38 - if (drm_minor->type == DRM_MINOR_LEGACY && 39 - !drm_core_check_feature(drm_dev, DRIVER_MODESET) && 40 - drm_dev->driver->suspend) 41 - return drm_dev->driver->suspend(drm_dev, state); 42 - 43 + if (drm_minor->type == DRM_MINOR_LEGACY && 44 + !drm_core_check_feature(drm_dev, DRIVER_MODESET) && 45 + drm_dev->driver->suspend) 46 + return drm_dev->driver->suspend(drm_dev, state); 47 + } 43 48 return 0; 44 49 } 45 50 46 51 /** 47 - * drm_sysfs_resume - DRM class resume hook 52 + * drm_class_resume - DRM class resume hook 48 53 * @dev: Linux device to resume 49 54 * 50 55 * Just figures out what the actual struct drm_device associated with 51 56 * @dev is and calls its resume hook, if present. 52 57 */ 53 - static int drm_sysfs_resume(struct device *dev) 58 + static int drm_class_resume(struct device *dev) 54 59 { 55 - struct drm_minor *drm_minor = to_drm_minor(dev); 56 - struct drm_device *drm_dev = drm_minor->dev; 60 + if (dev->type == &drm_sysfs_device_minor) { 61 + struct drm_minor *drm_minor = to_drm_minor(dev); 62 + struct drm_device *drm_dev = drm_minor->dev; 57 63 58 - if (drm_minor->type == DRM_MINOR_LEGACY && 59 - !drm_core_check_feature(drm_dev, DRIVER_MODESET) && 60 - drm_dev->driver->resume) 61 - return drm_dev->driver->resume(drm_dev); 62 - 64 + if (drm_minor->type == DRM_MINOR_LEGACY && 65 + !drm_core_check_feature(drm_dev, DRIVER_MODESET) && 66 + drm_dev->driver->resume) 67 + return drm_dev->driver->resume(drm_dev); 68 + } 63 69 return 0; 64 70 } 65 71 ··· 105 99 goto err_out; 106 100 } 107 101 108 - class->suspend = drm_sysfs_suspend; 109 - class->resume = drm_sysfs_resume; 102 + class->suspend = drm_class_suspend; 103 + class->resume = drm_class_resume; 110 104 111 105 err = class_create_file(class, &class_attr_version); 112 106 if (err) ··· 486 480 minor->kdev.class = drm_class; 487 481 minor->kdev.release = drm_sysfs_device_release; 488 482 minor->kdev.devt = minor->device; 483 + minor->kdev.type = &drm_sysfs_device_minor; 489 484 if (minor->type == DRM_MINOR_CONTROL) 490 485 minor_str = "controlD%d"; 491 486 else if (minor->type == DRM_MINOR_RENDER)
+10
drivers/gpu/drm/radeon/r100.c
··· 1091 1091 tmp |= tile_flags; 1092 1092 ib[idx] = tmp; 1093 1093 break; 1094 + case RADEON_RB3D_ZPASS_ADDR: 1095 + r = r100_cs_packet_next_reloc(p, &reloc); 1096 + if (r) { 1097 + DRM_ERROR("No reloc for ib[%d]=0x%04X\n", 1098 + idx, reg); 1099 + r100_cs_dump_packet(p, pkt); 1100 + return r; 1101 + } 1102 + ib[idx] = ib_chunk->kdata[idx] + ((u32)reloc->lobj.gpu_offset); 1103 + break; 1094 1104 default: 1095 1105 /* FIXME: we don't want to allow anyothers packet */ 1096 1106 break;
+3 -1
drivers/gpu/drm/radeon/r300.c
··· 448 448 /* rv350,rv370,rv380 */ 449 449 rdev->num_gb_pipes = 1; 450 450 } 451 + rdev->num_z_pipes = 1; 451 452 gb_tile_config = (R300_ENABLE_TILING | R300_TILE_SIZE_16); 452 453 switch (rdev->num_gb_pipes) { 453 454 case 2: ··· 487 486 printk(KERN_WARNING "Failed to wait MC idle while " 488 487 "programming pipes. Bad things might happen.\n"); 489 488 } 490 - DRM_INFO("radeon: %d pipes initialized.\n", rdev->num_gb_pipes); 489 + DRM_INFO("radeon: %d quad pipes, %d Z pipes initialized.\n", 490 + rdev->num_gb_pipes, rdev->num_z_pipes); 491 491 } 492 492 493 493 int r300_ga_reset(struct radeon_device *rdev)
+12 -1
drivers/gpu/drm/radeon/r420.c
··· 165 165 printk(KERN_WARNING "Failed to wait GUI idle while " 166 166 "programming pipes. Bad things might happen.\n"); 167 167 } 168 - DRM_INFO("radeon: %d pipes initialized.\n", rdev->num_gb_pipes); 168 + 169 + if (rdev->family == CHIP_RV530) { 170 + tmp = RREG32(RV530_GB_PIPE_SELECT2); 171 + if ((tmp & 3) == 3) 172 + rdev->num_z_pipes = 2; 173 + else 174 + rdev->num_z_pipes = 1; 175 + } else 176 + rdev->num_z_pipes = 1; 177 + 178 + DRM_INFO("radeon: %d quad pipes, %d z pipes initialized.\n", 179 + rdev->num_gb_pipes, rdev->num_z_pipes); 169 180 } 170 181 171 182 void r420_gpu_init(struct radeon_device *rdev)
-1
drivers/gpu/drm/radeon/r520.c
··· 177 177 */ 178 178 /* workaround for RV530 */ 179 179 if (rdev->family == CHIP_RV530) { 180 - WREG32(0x4124, 1); 181 180 WREG32(0x4128, 0xFF); 182 181 } 183 182 r420_pipes_init(rdev);
+1
drivers/gpu/drm/radeon/radeon.h
··· 655 655 int usec_timeout; 656 656 enum radeon_pll_errata pll_errata; 657 657 int num_gb_pipes; 658 + int num_z_pipes; 658 659 int disp_priority; 659 660 /* BIOS */ 660 661 uint8_t *bios;
+9
drivers/gpu/drm/radeon/radeon_cp.c
··· 406 406 { 407 407 uint32_t gb_tile_config, gb_pipe_sel = 0; 408 408 409 + if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV530) { 410 + uint32_t z_pipe_sel = RADEON_READ(RV530_GB_PIPE_SELECT2); 411 + if ((z_pipe_sel & 3) == 3) 412 + dev_priv->num_z_pipes = 2; 413 + else 414 + dev_priv->num_z_pipes = 1; 415 + } else 416 + dev_priv->num_z_pipes = 1; 417 + 409 418 /* RS4xx/RS6xx/R4xx/R5xx */ 410 419 if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R420) { 411 420 gb_pipe_sel = RADEON_READ(R400_GB_PIPE_SELECT);
+4 -1
drivers/gpu/drm/radeon/radeon_drv.h
··· 100 100 * 1.28- Add support for VBL on CRTC2 101 101 * 1.29- R500 3D cmd buffer support 102 102 * 1.30- Add support for occlusion queries 103 + * 1.31- Add support for num Z pipes from GET_PARAM 103 104 */ 104 105 #define DRIVER_MAJOR 1 105 - #define DRIVER_MINOR 30 106 + #define DRIVER_MINOR 31 106 107 #define DRIVER_PATCHLEVEL 0 107 108 108 109 /* ··· 330 329 resource_size_t fb_aper_offset; 331 330 332 331 int num_gb_pipes; 332 + int num_z_pipes; 333 333 int track_flush; 334 334 drm_local_map_t *mmio; 335 335 ··· 691 689 692 690 /* pipe config regs */ 693 691 #define R400_GB_PIPE_SELECT 0x402c 692 + #define RV530_GB_PIPE_SELECT2 0x4124 694 693 #define R500_DYN_SCLK_PWMEM_PIPE 0x000d /* PLL */ 695 694 #define R300_GB_TILE_CONFIG 0x4018 696 695 # define R300_ENABLE_TILING (1 << 0)
+1 -1
drivers/gpu/drm/radeon/radeon_gem.c
··· 283 283 mutex_lock(&dev->struct_mutex); 284 284 drm_gem_object_unreference(gobj); 285 285 mutex_unlock(&dev->struct_mutex); 286 - return 0; 286 + return r; 287 287 } 288 288 289 289 int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,
+4
drivers/gpu/drm/radeon/radeon_kms.c
··· 95 95 case RADEON_INFO_NUM_GB_PIPES: 96 96 value = rdev->num_gb_pipes; 97 97 break; 98 + case RADEON_INFO_NUM_Z_PIPES: 99 + value = rdev->num_z_pipes; 100 + break; 98 101 default: 99 102 DRM_DEBUG("Invalid request %d\n", info->request); 100 103 return -EINVAL; ··· 321 318 DRM_IOCTL_DEF(DRM_RADEON_INFO, radeon_info_ioctl, DRM_AUTH), 322 319 DRM_IOCTL_DEF(DRM_RADEON_GEM_SET_TILING, radeon_gem_set_tiling_ioctl, DRM_AUTH), 323 320 DRM_IOCTL_DEF(DRM_RADEON_GEM_GET_TILING, radeon_gem_get_tiling_ioctl, DRM_AUTH), 321 + DRM_IOCTL_DEF(DRM_RADEON_GEM_BUSY, radeon_gem_busy_ioctl, DRM_AUTH), 324 322 }; 325 323 int radeon_max_kms_ioctl = DRM_ARRAY_SIZE(radeon_ioctls_kms);
+5
drivers/gpu/drm/radeon/radeon_reg.h
··· 2337 2337 # define RADEON_RE_WIDTH_SHIFT 0 2338 2338 # define RADEON_RE_HEIGHT_SHIFT 16 2339 2339 2340 + #define RADEON_RB3D_ZPASS_DATA 0x3290 2341 + #define RADEON_RB3D_ZPASS_ADDR 0x3294 2342 + 2340 2343 #define RADEON_SE_CNTL 0x1c4c 2341 2344 # define RADEON_FFACE_CULL_CW (0 << 0) 2342 2345 # define RADEON_FFACE_CULL_CCW (1 << 0) ··· 3573 3570 #define RADEON_SCRATCH_REG3 0x15ec 3574 3571 #define RADEON_SCRATCH_REG4 0x15f0 3575 3572 #define RADEON_SCRATCH_REG5 0x15f4 3573 + 3574 + #define RV530_GB_PIPE_SELECT2 0x4124 3576 3575 3577 3576 #endif
+3
drivers/gpu/drm/radeon/radeon_state.c
··· 3081 3081 case RADEON_PARAM_NUM_GB_PIPES: 3082 3082 value = dev_priv->num_gb_pipes; 3083 3083 break; 3084 + case RADEON_PARAM_NUM_Z_PIPES: 3085 + value = dev_priv->num_z_pipes; 3086 + break; 3084 3087 default: 3085 3088 DRM_DEBUG("Invalid parameter %d\n", param->param); 3086 3089 return -EINVAL;
+12 -2
drivers/i2c/busses/i2c-omap.c
··· 674 674 675 675 err = 0; 676 676 complete: 677 - omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat); 677 + /* 678 + * Ack the stat in one go, but [R/X]DR and [R/X]RDY should be 679 + * acked after the data operation is complete. 680 + * Ref: TRM SWPU114Q Figure 18-31 681 + */ 682 + omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat & 683 + ~(OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR | 684 + OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR)); 678 685 679 686 if (stat & OMAP_I2C_STAT_NACK) { 680 687 err |= OMAP_I2C_STAT_NACK; ··· 694 687 } 695 688 if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK | 696 689 OMAP_I2C_STAT_AL)) { 690 + omap_i2c_ack_stat(dev, stat & 691 + (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR | 692 + OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR)); 697 693 omap_i2c_complete_cmd(dev, err); 698 694 return IRQ_HANDLED; 699 695 } ··· 784 774 * memory to the I2C interface. 785 775 */ 786 776 787 - if (cpu_is_omap34xx()) { 777 + if (dev->rev <= OMAP_I2C_REV_ON_3430) { 788 778 while (!(stat & OMAP_I2C_STAT_XUDF)) { 789 779 if (stat & (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) { 790 780 omap_i2c_ack_stat(dev, stat & (OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));
+91 -64
drivers/i2c/busses/i2c-stu300.c
··· 117 117 STU300_ERROR_NONE = 0, 118 118 STU300_ERROR_ACKNOWLEDGE_FAILURE, 119 119 STU300_ERROR_BUS_ERROR, 120 - STU300_ERROR_ARBITRATION_LOST 120 + STU300_ERROR_ARBITRATION_LOST, 121 + STU300_ERROR_UNKNOWN 121 122 }; 122 123 123 124 /* timeout waiting for the controller to respond */ ··· 128 127 * The number of address send athemps tried before giving up. 129 128 * If the first one failes it seems like 5 to 8 attempts are required. 130 129 */ 131 - #define NUM_ADDR_RESEND_ATTEMPTS 10 130 + #define NUM_ADDR_RESEND_ATTEMPTS 12 132 131 133 132 /* I2C clock speed, in Hz 0-400kHz*/ 134 133 static unsigned int scl_frequency = 100000; ··· 150 149 * @msg_index: index of current message 151 150 * @msg_len: length of current message 152 151 */ 152 + 153 153 struct stu300_dev { 154 154 struct platform_device *pdev; 155 155 struct i2c_adapter adapter; ··· 190 188 return readl(address) & 0x000000FFU; 191 189 } 192 190 191 + static void stu300_irq_enable(struct stu300_dev *dev) 192 + { 193 + u32 val; 194 + val = stu300_r8(dev->virtbase + I2C_CR); 195 + val |= I2C_CR_INTERRUPT_ENABLE; 196 + /* Twice paranoia (possible HW glitch) */ 197 + stu300_wr8(val, dev->virtbase + I2C_CR); 198 + stu300_wr8(val, dev->virtbase + I2C_CR); 199 + } 200 + 201 + static void stu300_irq_disable(struct stu300_dev *dev) 202 + { 203 + u32 val; 204 + val = stu300_r8(dev->virtbase + I2C_CR); 205 + val &= ~I2C_CR_INTERRUPT_ENABLE; 206 + /* Twice paranoia (possible HW glitch) */ 207 + stu300_wr8(val, dev->virtbase + I2C_CR); 208 + stu300_wr8(val, dev->virtbase + I2C_CR); 209 + } 210 + 211 + 193 212 /* 194 213 * Tells whether a certain event or events occurred in 195 214 * response to a command. The events represent states in ··· 219 196 * documentation and can only be treated as abstract state 220 197 * machine states. 221 198 * 222 - * @ret 0 = event has not occurred, any other value means 223 - * the event occurred. 199 + * @ret 0 = event has not occurred or unknown error, any 200 + * other value means the correct event occurred or an error. 224 201 */ 202 + 225 203 static int stu300_event_occurred(struct stu300_dev *dev, 226 204 enum stu300_event mr_event) { 227 205 u32 status1; ··· 230 206 231 207 /* What event happened? */ 232 208 status1 = stu300_r8(dev->virtbase + I2C_SR1); 209 + 233 210 if (!(status1 & I2C_SR1_EVF_IND)) 234 211 /* No event at all */ 235 212 return 0; 213 + 236 214 status2 = stu300_r8(dev->virtbase + I2C_SR2); 215 + 216 + /* Block any multiple interrupts */ 217 + stu300_irq_disable(dev); 218 + 219 + /* Check for errors first */ 220 + if (status2 & I2C_SR2_AF_IND) { 221 + dev->cmd_err = STU300_ERROR_ACKNOWLEDGE_FAILURE; 222 + return 1; 223 + } else if (status2 & I2C_SR2_BERR_IND) { 224 + dev->cmd_err = STU300_ERROR_BUS_ERROR; 225 + return 1; 226 + } else if (status2 & I2C_SR2_ARLO_IND) { 227 + dev->cmd_err = STU300_ERROR_ARBITRATION_LOST; 228 + return 1; 229 + } 237 230 238 231 switch (mr_event) { 239 232 case STU300_EVENT_1: ··· 262 221 case STU300_EVENT_7: 263 222 case STU300_EVENT_8: 264 223 if (status1 & I2C_SR1_BTF_IND) { 265 - if (status2 & I2C_SR2_AF_IND) 266 - dev->cmd_err = STU300_ERROR_ACKNOWLEDGE_FAILURE; 267 - else if (status2 & I2C_SR2_BERR_IND) 268 - dev->cmd_err = STU300_ERROR_BUS_ERROR; 269 224 return 1; 270 225 } 271 226 break; ··· 277 240 case STU300_EVENT_6: 278 241 if (status2 & I2C_SR2_ENDAD_IND) { 279 242 /* First check for any errors */ 280 - if (status2 & I2C_SR2_AF_IND) 281 - dev->cmd_err = STU300_ERROR_ACKNOWLEDGE_FAILURE; 282 243 return 1; 283 244 } 284 245 break; ··· 287 252 default: 288 253 break; 289 254 } 290 - if (status2 & I2C_SR2_ARLO_IND) 291 - dev->cmd_err = STU300_ERROR_ARBITRATION_LOST; 255 + /* If we get here, we're on thin ice. 256 + * Here we are in a status where we have 257 + * gotten a response that does not match 258 + * what we requested. 259 + */ 260 + dev->cmd_err = STU300_ERROR_UNKNOWN; 261 + dev_err(&dev->pdev->dev, 262 + "Unhandled interrupt! %d sr1: 0x%x sr2: 0x%x\n", 263 + mr_event, status1, status2); 292 264 return 0; 293 265 } 294 266 ··· 304 262 struct stu300_dev *dev = data; 305 263 int res; 306 264 265 + /* Just make sure that the block is clocked */ 266 + clk_enable(dev->clk); 267 + 307 268 /* See if this was what we were waiting for */ 308 269 spin_lock(&dev->cmd_issue_lock); 309 - if (dev->cmd_event != STU300_EVENT_NONE) { 310 - res = stu300_event_occurred(dev, dev->cmd_event); 311 - if (res || dev->cmd_err != STU300_ERROR_NONE) { 312 - u32 val; 313 270 314 - complete(&dev->cmd_complete); 315 - /* Block any multiple interrupts */ 316 - val = stu300_r8(dev->virtbase + I2C_CR); 317 - val &= ~I2C_CR_INTERRUPT_ENABLE; 318 - stu300_wr8(val, dev->virtbase + I2C_CR); 319 - } 320 - } 271 + res = stu300_event_occurred(dev, dev->cmd_event); 272 + if (res || dev->cmd_err != STU300_ERROR_NONE) 273 + complete(&dev->cmd_complete); 274 + 321 275 spin_unlock(&dev->cmd_issue_lock); 276 + 277 + clk_disable(dev->clk); 278 + 322 279 return IRQ_HANDLED; 323 280 } 324 281 ··· 349 308 stu300_wr8(cr_value, dev->virtbase + I2C_CR); 350 309 ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete, 351 310 STU300_TIMEOUT); 352 - 353 311 if (ret < 0) { 354 312 dev_err(&dev->pdev->dev, 355 313 "wait_for_completion_interruptible_timeout() " ··· 382 342 enum stu300_event mr_event) 383 343 { 384 344 int ret; 385 - u32 val; 386 345 387 346 if (unlikely(irqs_disabled())) { 388 347 /* TODO: implement polling for this case if need be. */ ··· 393 354 /* Is it already here? */ 394 355 spin_lock_irq(&dev->cmd_issue_lock); 395 356 dev->cmd_err = STU300_ERROR_NONE; 396 - if (stu300_event_occurred(dev, mr_event)) { 397 - spin_unlock_irq(&dev->cmd_issue_lock); 398 - goto exit_await_check_err; 399 - } 400 - init_completion(&dev->cmd_complete); 401 - dev->cmd_err = STU300_ERROR_NONE; 402 357 dev->cmd_event = mr_event; 403 358 359 + init_completion(&dev->cmd_complete); 360 + 404 361 /* Turn on the I2C interrupt for current operation */ 405 - val = stu300_r8(dev->virtbase + I2C_CR); 406 - val |= I2C_CR_INTERRUPT_ENABLE; 407 - stu300_wr8(val, dev->virtbase + I2C_CR); 408 - 409 - /* Twice paranoia (possible HW glitch) */ 410 - stu300_wr8(val, dev->virtbase + I2C_CR); 411 - 412 - /* Check again: is it already here? */ 413 - if (unlikely(stu300_event_occurred(dev, mr_event))) { 414 - /* Disable IRQ again. */ 415 - val &= ~I2C_CR_INTERRUPT_ENABLE; 416 - stu300_wr8(val, dev->virtbase + I2C_CR); 417 - spin_unlock_irq(&dev->cmd_issue_lock); 418 - goto exit_await_check_err; 419 - } 362 + stu300_irq_enable(dev); 420 363 421 364 /* Unlock the command block and wait for the event to occur */ 422 365 spin_unlock_irq(&dev->cmd_issue_lock); 366 + 423 367 ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete, 424 368 STU300_TIMEOUT); 425 - 426 369 if (ret < 0) { 427 370 dev_err(&dev->pdev->dev, 428 371 "wait_for_completion_interruptible_timeout()" ··· 422 401 return -ETIMEDOUT; 423 402 } 424 403 425 - exit_await_check_err: 426 404 if (dev->cmd_err != STU300_ERROR_NONE) { 427 405 if (mr_event != STU300_EVENT_6) { 428 406 dev_err(&dev->pdev->dev, "controller " ··· 477 457 }; 478 458 479 459 static const struct stu300_clkset stu300_clktable[] = { 480 - { 0, 0xFFU }, 481 - { 2500000, I2C_OAR2_FR_25_10MHZ }, 482 - { 10000000, I2C_OAR2_FR_10_1667MHZ }, 483 - { 16670000, I2C_OAR2_FR_1667_2667MHZ }, 484 - { 26670000, I2C_OAR2_FR_2667_40MHZ }, 485 - { 40000000, I2C_OAR2_FR_40_5333MHZ }, 486 - { 53330000, I2C_OAR2_FR_5333_66MHZ }, 487 - { 66000000, I2C_OAR2_FR_66_80MHZ }, 488 - { 80000000, I2C_OAR2_FR_80_100MHZ }, 460 + { 0, 0xFFU }, 461 + { 2500000, I2C_OAR2_FR_25_10MHZ }, 462 + { 10000000, I2C_OAR2_FR_10_1667MHZ }, 463 + { 16670000, I2C_OAR2_FR_1667_2667MHZ }, 464 + { 26670000, I2C_OAR2_FR_2667_40MHZ }, 465 + { 40000000, I2C_OAR2_FR_40_5333MHZ }, 466 + { 53330000, I2C_OAR2_FR_5333_66MHZ }, 467 + { 66000000, I2C_OAR2_FR_66_80MHZ }, 468 + { 80000000, I2C_OAR2_FR_80_100MHZ }, 489 469 { 100000000, 0xFFU }, 490 470 }; 471 + 491 472 492 473 static int stu300_set_clk(struct stu300_dev *dev, unsigned long clkrate) 493 474 { ··· 515 494 516 495 if (dev->speed > 100000) 517 496 /* Fast Mode I2C */ 518 - val = ((clkrate/dev->speed)-9)/3; 497 + val = ((clkrate/dev->speed) - 9)/3 + 1; 519 498 else 520 499 /* Standard Mode I2C */ 521 - val = ((clkrate/dev->speed)-7)/2; 500 + val = ((clkrate/dev->speed) - 7)/2 + 1; 522 501 523 502 /* According to spec the divider must be > 2 */ 524 503 if (val < 0x002) { ··· 578 557 */ 579 558 clkrate = clk_get_rate(dev->clk); 580 559 ret = stu300_set_clk(dev, clkrate); 560 + 581 561 if (ret) 582 562 return ret; 583 563 /* ··· 663 641 int attempts = 0; 664 642 struct stu300_dev *dev = i2c_get_adapdata(adap); 665 643 666 - 667 644 clk_enable(dev->clk); 668 645 669 646 /* Remove this if (0) to trace each and every message. */ ··· 736 715 737 716 if (attempts < NUM_ADDR_RESEND_ATTEMPTS && attempts > 0) { 738 717 dev_dbg(&dev->pdev->dev, "managed to get address " 739 - "through after %d attempts\n", attempts); 718 + "through after %d attempts\n", attempts); 740 719 } else if (attempts == NUM_ADDR_RESEND_ATTEMPTS) { 741 720 dev_dbg(&dev->pdev->dev, "I give up, tried %d times " 742 - "to resend address.\n", 743 - NUM_ADDR_RESEND_ATTEMPTS); 721 + "to resend address.\n", 722 + NUM_ADDR_RESEND_ATTEMPTS); 744 723 goto exit_disable; 745 724 } 725 + 746 726 747 727 if (msg->flags & I2C_M_RD) { 748 728 /* READ: we read the actual bytes one at a time */ ··· 826 804 { 827 805 int ret = -1; 828 806 int i; 807 + 829 808 struct stu300_dev *dev = i2c_get_adapdata(adap); 830 809 dev->msg_len = num; 810 + 831 811 for (i = 0; i < num; i++) { 832 812 /* 833 813 * Another driver appears to send stop for each message, ··· 841 817 dev->msg_index = i; 842 818 843 819 ret = stu300_xfer_msg(adap, &msgs[i], (i == (num - 1))); 820 + 844 821 if (ret != 0) { 845 822 num = ret; 846 823 break; ··· 870 845 struct resource *res; 871 846 int bus_nr; 872 847 int ret = 0; 848 + char clk_name[] = "I2C0"; 873 849 874 850 dev = kzalloc(sizeof(struct stu300_dev), GFP_KERNEL); 875 851 if (!dev) { ··· 880 854 } 881 855 882 856 bus_nr = pdev->id; 883 - dev->clk = clk_get(&pdev->dev, NULL); 857 + clk_name[3] += (char)bus_nr; 858 + dev->clk = clk_get(&pdev->dev, clk_name); 884 859 if (IS_ERR(dev->clk)) { 885 860 ret = PTR_ERR(dev->clk); 886 861 dev_err(&pdev->dev, "could not retrieve i2c bus clock\n");
+1 -1
drivers/pci/pci-driver.c
··· 508 508 return error; 509 509 } 510 510 511 - return pci_dev->state_saved ? pci_restore_state(pci_dev) : 0; 511 + return pci_restore_state(pci_dev); 512 512 } 513 513 514 514 static void pci_pm_default_resume_noirq(struct pci_dev *pci_dev)
+2
drivers/pci/pci.c
··· 846 846 int i; 847 847 u32 val; 848 848 849 + if (!dev->state_saved) 850 + return 0; 849 851 /* PCI Express register must be restored first */ 850 852 pci_restore_pcie_state(dev); 851 853
+67 -31
drivers/scsi/mpt2sas/mpt2sas_base.c
··· 119 119 spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags); 120 120 } 121 121 122 + /** 123 + * mpt2sas_base_start_watchdog - start the fault_reset_work_q 124 + * @ioc: pointer to scsi command object 125 + * Context: sleep. 126 + * 127 + * Return nothing. 128 + */ 129 + void 130 + mpt2sas_base_start_watchdog(struct MPT2SAS_ADAPTER *ioc) 131 + { 132 + unsigned long flags; 133 + 134 + if (ioc->fault_reset_work_q) 135 + return; 136 + 137 + /* initialize fault polling */ 138 + INIT_DELAYED_WORK(&ioc->fault_reset_work, _base_fault_reset_work); 139 + snprintf(ioc->fault_reset_work_q_name, 140 + sizeof(ioc->fault_reset_work_q_name), "poll_%d_status", ioc->id); 141 + ioc->fault_reset_work_q = 142 + create_singlethread_workqueue(ioc->fault_reset_work_q_name); 143 + if (!ioc->fault_reset_work_q) { 144 + printk(MPT2SAS_ERR_FMT "%s: failed (line=%d)\n", 145 + ioc->name, __func__, __LINE__); 146 + return; 147 + } 148 + spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags); 149 + if (ioc->fault_reset_work_q) 150 + queue_delayed_work(ioc->fault_reset_work_q, 151 + &ioc->fault_reset_work, 152 + msecs_to_jiffies(FAULT_POLLING_INTERVAL)); 153 + spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags); 154 + } 155 + 156 + /** 157 + * mpt2sas_base_stop_watchdog - stop the fault_reset_work_q 158 + * @ioc: pointer to scsi command object 159 + * Context: sleep. 160 + * 161 + * Return nothing. 162 + */ 163 + void 164 + mpt2sas_base_stop_watchdog(struct MPT2SAS_ADAPTER *ioc) 165 + { 166 + unsigned long flags; 167 + struct workqueue_struct *wq; 168 + 169 + spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags); 170 + wq = ioc->fault_reset_work_q; 171 + ioc->fault_reset_work_q = NULL; 172 + spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags); 173 + if (wq) { 174 + if (!cancel_delayed_work(&ioc->fault_reset_work)) 175 + flush_workqueue(wq); 176 + destroy_workqueue(wq); 177 + } 178 + } 179 + 122 180 #ifdef CONFIG_SCSI_MPT2SAS_LOGGING 123 181 /** 124 182 * _base_sas_ioc_info - verbose translation of the ioc status ··· 496 438 497 439 sas_loginfo.loginfo = log_info; 498 440 if (sas_loginfo.dw.bus_type != 3 /*SAS*/) 441 + return; 442 + 443 + /* each nexus loss loginfo */ 444 + if (log_info == 0x31170000) 499 445 return; 500 446 501 447 /* eat the loginfos associated with task aborts */ ··· 1171 1109 } 1172 1110 } 1173 1111 1174 - pci_set_drvdata(pdev, ioc->shost); 1175 1112 _base_mask_interrupts(ioc); 1176 1113 r = _base_enable_msix(ioc); 1177 1114 if (r) ··· 1193 1132 ioc->pci_irq = -1; 1194 1133 pci_release_selected_regions(ioc->pdev, ioc->bars); 1195 1134 pci_disable_device(pdev); 1196 - pci_set_drvdata(pdev, NULL); 1197 1135 return r; 1198 1136 } 1199 1137 ··· 3251 3191 ioc->chip_phys = 0; 3252 3192 pci_release_selected_regions(ioc->pdev, ioc->bars); 3253 3193 pci_disable_device(pdev); 3254 - pci_set_drvdata(pdev, NULL); 3255 3194 return; 3256 3195 } 3257 3196 ··· 3264 3205 mpt2sas_base_attach(struct MPT2SAS_ADAPTER *ioc) 3265 3206 { 3266 3207 int r, i; 3267 - unsigned long flags; 3268 3208 3269 3209 dinitprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s\n", ioc->name, 3270 3210 __func__)); ··· 3272 3214 if (r) 3273 3215 return r; 3274 3216 3217 + pci_set_drvdata(ioc->pdev, ioc->shost); 3275 3218 r = _base_make_ioc_ready(ioc, CAN_SLEEP, SOFT_RESET); 3276 3219 if (r) 3277 3220 goto out_free_resources; ··· 3347 3288 if (r) 3348 3289 goto out_free_resources; 3349 3290 3350 - /* initialize fault polling */ 3351 - INIT_DELAYED_WORK(&ioc->fault_reset_work, _base_fault_reset_work); 3352 - snprintf(ioc->fault_reset_work_q_name, 3353 - sizeof(ioc->fault_reset_work_q_name), "poll_%d_status", ioc->id); 3354 - ioc->fault_reset_work_q = 3355 - create_singlethread_workqueue(ioc->fault_reset_work_q_name); 3356 - if (!ioc->fault_reset_work_q) { 3357 - printk(MPT2SAS_ERR_FMT "%s: failed (line=%d)\n", 3358 - ioc->name, __func__, __LINE__); 3359 - goto out_free_resources; 3360 - } 3361 - spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags); 3362 - if (ioc->fault_reset_work_q) 3363 - queue_delayed_work(ioc->fault_reset_work_q, 3364 - &ioc->fault_reset_work, 3365 - msecs_to_jiffies(FAULT_POLLING_INTERVAL)); 3366 - spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags); 3291 + mpt2sas_base_start_watchdog(ioc); 3367 3292 return 0; 3368 3293 3369 3294 out_free_resources: ··· 3355 3312 ioc->remove_host = 1; 3356 3313 mpt2sas_base_free_resources(ioc); 3357 3314 _base_release_memory_pools(ioc); 3315 + pci_set_drvdata(ioc->pdev, NULL); 3358 3316 kfree(ioc->tm_cmds.reply); 3359 3317 kfree(ioc->transport_cmds.reply); 3360 3318 kfree(ioc->config_cmds.reply); ··· 3381 3337 void 3382 3338 mpt2sas_base_detach(struct MPT2SAS_ADAPTER *ioc) 3383 3339 { 3384 - unsigned long flags; 3385 - struct workqueue_struct *wq; 3386 3340 3387 3341 dexitprintk(ioc, printk(MPT2SAS_DEBUG_FMT "%s\n", ioc->name, 3388 3342 __func__)); 3389 3343 3390 - spin_lock_irqsave(&ioc->ioc_reset_in_progress_lock, flags); 3391 - wq = ioc->fault_reset_work_q; 3392 - ioc->fault_reset_work_q = NULL; 3393 - spin_unlock_irqrestore(&ioc->ioc_reset_in_progress_lock, flags); 3394 - if (!cancel_delayed_work(&ioc->fault_reset_work)) 3395 - flush_workqueue(wq); 3396 - destroy_workqueue(wq); 3397 - 3344 + mpt2sas_base_stop_watchdog(ioc); 3398 3345 mpt2sas_base_free_resources(ioc); 3399 3346 _base_release_memory_pools(ioc); 3347 + pci_set_drvdata(ioc->pdev, NULL); 3400 3348 kfree(ioc->pfacts); 3401 3349 kfree(ioc->ctl_cmds.reply); 3402 3350 kfree(ioc->base_cmds.reply);
+4 -2
drivers/scsi/mpt2sas/mpt2sas_base.h
··· 69 69 #define MPT2SAS_DRIVER_NAME "mpt2sas" 70 70 #define MPT2SAS_AUTHOR "LSI Corporation <DL-MPTFusionLinux@lsi.com>" 71 71 #define MPT2SAS_DESCRIPTION "LSI MPT Fusion SAS 2.0 Device Driver" 72 - #define MPT2SAS_DRIVER_VERSION "01.100.03.00" 72 + #define MPT2SAS_DRIVER_VERSION "01.100.04.00" 73 73 #define MPT2SAS_MAJOR_VERSION 01 74 74 #define MPT2SAS_MINOR_VERSION 100 75 - #define MPT2SAS_BUILD_VERSION 03 75 + #define MPT2SAS_BUILD_VERSION 04 76 76 #define MPT2SAS_RELEASE_VERSION 00 77 77 78 78 /* ··· 673 673 674 674 /* base shared API */ 675 675 extern struct list_head mpt2sas_ioc_list; 676 + void mpt2sas_base_start_watchdog(struct MPT2SAS_ADAPTER *ioc); 677 + void mpt2sas_base_stop_watchdog(struct MPT2SAS_ADAPTER *ioc); 676 678 677 679 int mpt2sas_base_attach(struct MPT2SAS_ADAPTER *ioc); 678 680 void mpt2sas_base_detach(struct MPT2SAS_ADAPTER *ioc);
+26 -65
drivers/scsi/mpt2sas/mpt2sas_config.c
··· 236 236 Mpi2ConfigRequest_t *config_request; 237 237 int r; 238 238 u8 retry_count; 239 - u8 issue_reset; 239 + u8 issue_host_reset = 0; 240 240 u16 wait_state_count; 241 241 242 + mutex_lock(&ioc->config_cmds.mutex); 242 243 if (ioc->config_cmds.status != MPT2_CMD_NOT_USED) { 243 244 printk(MPT2SAS_ERR_FMT "%s: config_cmd in use\n", 244 245 ioc->name, __func__); 246 + mutex_unlock(&ioc->config_cmds.mutex); 245 247 return -EAGAIN; 246 248 } 247 249 retry_count = 0; 248 250 249 251 retry_config: 252 + if (retry_count) { 253 + if (retry_count > 2) /* attempt only 2 retries */ 254 + return -EFAULT; 255 + printk(MPT2SAS_INFO_FMT "%s: attempting retry (%d)\n", 256 + ioc->name, __func__, retry_count); 257 + } 250 258 wait_state_count = 0; 251 259 ioc_state = mpt2sas_base_get_iocstate(ioc, 1); 252 260 while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) { ··· 262 254 printk(MPT2SAS_ERR_FMT 263 255 "%s: failed due to ioc not operational\n", 264 256 ioc->name, __func__); 265 - ioc->config_cmds.status = MPT2_CMD_NOT_USED; 266 - return -EFAULT; 257 + r = -EFAULT; 258 + goto out; 267 259 } 268 260 ssleep(1); 269 261 ioc_state = mpt2sas_base_get_iocstate(ioc, 1); ··· 279 271 if (!smid) { 280 272 printk(MPT2SAS_ERR_FMT "%s: failed obtaining a smid\n", 281 273 ioc->name, __func__); 282 - ioc->config_cmds.status = MPT2_CMD_NOT_USED; 283 - return -EAGAIN; 274 + r = -EAGAIN; 275 + goto out; 284 276 } 285 277 286 278 r = 0; ··· 300 292 ioc->name, __func__); 301 293 _debug_dump_mf(mpi_request, 302 294 sizeof(Mpi2ConfigRequest_t)/4); 303 - if (!(ioc->config_cmds.status & MPT2_CMD_RESET)) 304 - issue_reset = 1; 305 - goto issue_host_reset; 295 + retry_count++; 296 + if (ioc->config_cmds.smid == smid) 297 + mpt2sas_base_free_smid(ioc, smid); 298 + if ((ioc->shost_recovery) || 299 + (ioc->config_cmds.status & MPT2_CMD_RESET)) 300 + goto retry_config; 301 + issue_host_reset = 1; 302 + r = -EFAULT; 303 + goto out; 306 304 } 307 305 if (ioc->config_cmds.status & MPT2_CMD_REPLY_VALID) 308 306 memcpy(mpi_reply, ioc->config_cmds.reply, ··· 316 302 if (retry_count) 317 303 printk(MPT2SAS_INFO_FMT "%s: retry completed!!\n", 318 304 ioc->name, __func__); 305 + out: 319 306 ioc->config_cmds.status = MPT2_CMD_NOT_USED; 320 - return r; 321 - 322 - issue_host_reset: 323 - if (issue_reset) 307 + mutex_unlock(&ioc->config_cmds.mutex); 308 + if (issue_host_reset) 324 309 mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, 325 310 FORCE_BIG_HAMMER); 326 - ioc->config_cmds.status = MPT2_CMD_NOT_USED; 327 - if (!retry_count) { 328 - printk(MPT2SAS_INFO_FMT "%s: attempting retry\n", 329 - ioc->name, __func__); 330 - retry_count++; 331 - goto retry_config; 332 - } 333 - return -EFAULT; 311 + return r; 334 312 } 335 313 336 314 /** ··· 381 375 int r; 382 376 struct config_request mem; 383 377 384 - mutex_lock(&ioc->config_cmds.mutex); 385 378 memset(config_page, 0, sizeof(Mpi2ManufacturingPage0_t)); 386 379 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 387 380 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 422 417 _config_free_config_dma_memory(ioc, &mem); 423 418 424 419 out: 425 - mutex_unlock(&ioc->config_cmds.mutex); 426 420 return r; 427 421 } 428 422 ··· 442 438 int r; 443 439 struct config_request mem; 444 440 445 - mutex_lock(&ioc->config_cmds.mutex); 446 441 memset(config_page, 0, sizeof(Mpi2BiosPage2_t)); 447 442 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 448 443 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 483 480 _config_free_config_dma_memory(ioc, &mem); 484 481 485 482 out: 486 - mutex_unlock(&ioc->config_cmds.mutex); 487 483 return r; 488 484 } 489 485 ··· 503 501 int r; 504 502 struct config_request mem; 505 503 506 - mutex_lock(&ioc->config_cmds.mutex); 507 504 memset(config_page, 0, sizeof(Mpi2BiosPage3_t)); 508 505 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 509 506 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 544 543 _config_free_config_dma_memory(ioc, &mem); 545 544 546 545 out: 547 - mutex_unlock(&ioc->config_cmds.mutex); 548 546 return r; 549 547 } 550 548 ··· 564 564 int r; 565 565 struct config_request mem; 566 566 567 - mutex_lock(&ioc->config_cmds.mutex); 568 567 memset(config_page, 0, sizeof(Mpi2IOUnitPage0_t)); 569 568 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 570 569 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 605 606 _config_free_config_dma_memory(ioc, &mem); 606 607 607 608 out: 608 - mutex_unlock(&ioc->config_cmds.mutex); 609 609 return r; 610 610 } 611 611 ··· 625 627 int r; 626 628 struct config_request mem; 627 629 628 - mutex_lock(&ioc->config_cmds.mutex); 629 630 memset(config_page, 0, sizeof(Mpi2IOUnitPage1_t)); 630 631 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 631 632 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 666 669 _config_free_config_dma_memory(ioc, &mem); 667 670 668 671 out: 669 - mutex_unlock(&ioc->config_cmds.mutex); 670 672 return r; 671 673 } 672 674 ··· 686 690 int r; 687 691 struct config_request mem; 688 692 689 - mutex_lock(&ioc->config_cmds.mutex); 690 693 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 691 694 mpi_request.Function = MPI2_FUNCTION_CONFIG; 692 695 mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_HEADER; ··· 727 732 _config_free_config_dma_memory(ioc, &mem); 728 733 729 734 out: 730 - mutex_unlock(&ioc->config_cmds.mutex); 731 735 return r; 732 736 } 733 737 ··· 747 753 int r; 748 754 struct config_request mem; 749 755 750 - mutex_lock(&ioc->config_cmds.mutex); 751 756 memset(config_page, 0, sizeof(Mpi2IOCPage8_t)); 752 757 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 753 758 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 788 795 _config_free_config_dma_memory(ioc, &mem); 789 796 790 797 out: 791 - mutex_unlock(&ioc->config_cmds.mutex); 792 798 return r; 793 799 } 794 800 ··· 810 818 int r; 811 819 struct config_request mem; 812 820 813 - mutex_lock(&ioc->config_cmds.mutex); 814 821 memset(config_page, 0, sizeof(Mpi2SasDevicePage0_t)); 815 822 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 816 823 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 854 863 _config_free_config_dma_memory(ioc, &mem); 855 864 856 865 out: 857 - mutex_unlock(&ioc->config_cmds.mutex); 858 866 return r; 859 867 } 860 868 ··· 876 886 int r; 877 887 struct config_request mem; 878 888 879 - mutex_lock(&ioc->config_cmds.mutex); 880 889 memset(config_page, 0, sizeof(Mpi2SasDevicePage1_t)); 881 890 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 882 891 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 920 931 _config_free_config_dma_memory(ioc, &mem); 921 932 922 933 out: 923 - mutex_unlock(&ioc->config_cmds.mutex); 924 934 return r; 925 935 } 926 936 ··· 941 953 Mpi2ConfigReply_t mpi_reply; 942 954 Mpi2SasIOUnitPage0_t config_page; 943 955 944 - mutex_lock(&ioc->config_cmds.mutex); 945 956 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 946 957 mpi_request.Function = MPI2_FUNCTION_CONFIG; 947 958 mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_HEADER; ··· 989 1002 _config_free_config_dma_memory(ioc, &mem); 990 1003 991 1004 out: 992 - mutex_unlock(&ioc->config_cmds.mutex); 993 1005 return r; 994 1006 } 995 1007 ··· 1012 1026 Mpi2ConfigRequest_t mpi_request; 1013 1027 int r; 1014 1028 struct config_request mem; 1015 - 1016 - mutex_lock(&ioc->config_cmds.mutex); 1017 1029 memset(config_page, 0, sz); 1018 1030 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1019 1031 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1054 1070 _config_free_config_dma_memory(ioc, &mem); 1055 1071 1056 1072 out: 1057 - mutex_unlock(&ioc->config_cmds.mutex); 1058 1073 return r; 1059 1074 } 1060 1075 ··· 1078 1095 int r; 1079 1096 struct config_request mem; 1080 1097 1081 - mutex_lock(&ioc->config_cmds.mutex); 1082 1098 memset(config_page, 0, sz); 1083 1099 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1084 1100 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1120 1138 _config_free_config_dma_memory(ioc, &mem); 1121 1139 1122 1140 out: 1123 - mutex_unlock(&ioc->config_cmds.mutex); 1124 1141 return r; 1125 1142 } 1126 1143 ··· 1142 1161 int r; 1143 1162 struct config_request mem; 1144 1163 1145 - mutex_lock(&ioc->config_cmds.mutex); 1146 1164 memset(config_page, 0, sizeof(Mpi2ExpanderPage0_t)); 1147 1165 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1148 1166 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1186 1206 _config_free_config_dma_memory(ioc, &mem); 1187 1207 1188 1208 out: 1189 - mutex_unlock(&ioc->config_cmds.mutex); 1190 1209 return r; 1191 1210 } 1192 1211 ··· 1209 1230 int r; 1210 1231 struct config_request mem; 1211 1232 1212 - mutex_lock(&ioc->config_cmds.mutex); 1213 1233 memset(config_page, 0, sizeof(Mpi2ExpanderPage1_t)); 1214 1234 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1215 1235 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1255 1277 _config_free_config_dma_memory(ioc, &mem); 1256 1278 1257 1279 out: 1258 - mutex_unlock(&ioc->config_cmds.mutex); 1259 1280 return r; 1260 1281 } 1261 1282 ··· 1277 1300 int r; 1278 1301 struct config_request mem; 1279 1302 1280 - mutex_lock(&ioc->config_cmds.mutex); 1281 1303 memset(config_page, 0, sizeof(Mpi2SasEnclosurePage0_t)); 1282 1304 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1283 1305 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1321 1345 _config_free_config_dma_memory(ioc, &mem); 1322 1346 1323 1347 out: 1324 - mutex_unlock(&ioc->config_cmds.mutex); 1325 1348 return r; 1326 1349 } 1327 1350 ··· 1342 1367 int r; 1343 1368 struct config_request mem; 1344 1369 1345 - mutex_lock(&ioc->config_cmds.mutex); 1346 1370 memset(config_page, 0, sizeof(Mpi2SasPhyPage0_t)); 1347 1371 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1348 1372 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1387 1413 _config_free_config_dma_memory(ioc, &mem); 1388 1414 1389 1415 out: 1390 - mutex_unlock(&ioc->config_cmds.mutex); 1391 1416 return r; 1392 1417 } 1393 1418 ··· 1408 1435 int r; 1409 1436 struct config_request mem; 1410 1437 1411 - mutex_lock(&ioc->config_cmds.mutex); 1412 1438 memset(config_page, 0, sizeof(Mpi2SasPhyPage1_t)); 1413 1439 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1414 1440 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1453 1481 _config_free_config_dma_memory(ioc, &mem); 1454 1482 1455 1483 out: 1456 - mutex_unlock(&ioc->config_cmds.mutex); 1457 1484 return r; 1458 1485 } 1459 1486 ··· 1476 1505 int r; 1477 1506 struct config_request mem; 1478 1507 1479 - mutex_lock(&ioc->config_cmds.mutex); 1480 1508 memset(config_page, 0, sizeof(Mpi2RaidVolPage1_t)); 1481 1509 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1482 1510 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1518 1548 _config_free_config_dma_memory(ioc, &mem); 1519 1549 1520 1550 out: 1521 - mutex_unlock(&ioc->config_cmds.mutex); 1522 1551 return r; 1523 1552 } 1524 1553 ··· 1541 1572 struct config_request mem; 1542 1573 u16 ioc_status; 1543 1574 1544 - mutex_lock(&ioc->config_cmds.mutex); 1545 1575 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1546 1576 *num_pds = 0; 1547 1577 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1588 1620 _config_free_config_dma_memory(ioc, &mem); 1589 1621 1590 1622 out: 1591 - mutex_unlock(&ioc->config_cmds.mutex); 1592 1623 return r; 1593 1624 } 1594 1625 ··· 1612 1645 int r; 1613 1646 struct config_request mem; 1614 1647 1615 - mutex_lock(&ioc->config_cmds.mutex); 1616 1648 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1617 1649 memset(config_page, 0, sz); 1618 1650 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1653 1687 _config_free_config_dma_memory(ioc, &mem); 1654 1688 1655 1689 out: 1656 - mutex_unlock(&ioc->config_cmds.mutex); 1657 1690 return r; 1658 1691 } 1659 1692 ··· 1676 1711 int r; 1677 1712 struct config_request mem; 1678 1713 1679 - mutex_lock(&ioc->config_cmds.mutex); 1680 1714 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1681 1715 memset(config_page, 0, sizeof(Mpi2RaidPhysDiskPage0_t)); 1682 1716 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1718 1754 _config_free_config_dma_memory(ioc, &mem); 1719 1755 1720 1756 out: 1721 - mutex_unlock(&ioc->config_cmds.mutex); 1722 1757 return r; 1723 1758 } 1724 1759 ··· 1741 1778 struct config_request mem; 1742 1779 u16 ioc_status; 1743 1780 1744 - mutex_lock(&ioc->config_cmds.mutex); 1745 1781 *volume_handle = 0; 1746 1782 memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); 1747 1783 mpi_request.Function = MPI2_FUNCTION_CONFIG; ··· 1804 1842 _config_free_config_dma_memory(ioc, &mem); 1805 1843 1806 1844 out: 1807 - mutex_unlock(&ioc->config_cmds.mutex); 1808 1845 return r; 1809 1846 } 1810 1847
+88 -36
drivers/scsi/mpt2sas/mpt2sas_scsih.c
··· 2767 2767 char *desc_ioc_state = NULL; 2768 2768 char *desc_scsi_status = NULL; 2769 2769 char *desc_scsi_state = ioc->tmp_string; 2770 + u32 log_info = le32_to_cpu(mpi_reply->IOCLogInfo); 2771 + 2772 + if (log_info == 0x31170000) 2773 + return; 2770 2774 2771 2775 switch (ioc_status) { 2772 2776 case MPI2_IOCSTATUS_SUCCESS: ··· 3430 3426 __le64 sas_address; 3431 3427 int i; 3432 3428 unsigned long flags; 3433 - struct _sas_port *mpt2sas_port; 3429 + struct _sas_port *mpt2sas_port = NULL; 3434 3430 int rc = 0; 3435 3431 3436 3432 if (!handle) ··· 3522 3518 &expander_pg1, i, handle))) { 3523 3519 printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", 3524 3520 ioc->name, __FILE__, __LINE__, __func__); 3525 - continue; 3521 + rc = -1; 3522 + goto out_fail; 3526 3523 } 3527 3524 sas_expander->phy[i].handle = handle; 3528 3525 sas_expander->phy[i].phy_id = i; 3529 - mpt2sas_transport_add_expander_phy(ioc, &sas_expander->phy[i], 3530 - expander_pg1, sas_expander->parent_dev); 3526 + 3527 + if ((mpt2sas_transport_add_expander_phy(ioc, 3528 + &sas_expander->phy[i], expander_pg1, 3529 + sas_expander->parent_dev))) { 3530 + printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", 3531 + ioc->name, __FILE__, __LINE__, __func__); 3532 + rc = -1; 3533 + goto out_fail; 3534 + } 3531 3535 } 3532 3536 3533 3537 if (sas_expander->enclosure_handle) { ··· 3552 3540 3553 3541 out_fail: 3554 3542 3555 - if (sas_expander) 3556 - kfree(sas_expander->phy); 3543 + if (mpt2sas_port) 3544 + mpt2sas_transport_port_remove(ioc, sas_expander->sas_address, 3545 + sas_expander->parent_handle); 3557 3546 kfree(sas_expander); 3558 3547 return rc; 3559 3548 } ··· 3676 3663 sas_device->hidden_raid_component = is_pd; 3677 3664 3678 3665 /* get enclosure_logical_id */ 3679 - if (!(mpt2sas_config_get_enclosure_pg0(ioc, &mpi_reply, &enclosure_pg0, 3680 - MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE, 3681 - sas_device->enclosure_handle))) { 3666 + if (sas_device->enclosure_handle && !(mpt2sas_config_get_enclosure_pg0( 3667 + ioc, &mpi_reply, &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE, 3668 + sas_device->enclosure_handle))) 3682 3669 sas_device->enclosure_logical_id = 3683 3670 le64_to_cpu(enclosure_pg0.EnclosureLogicalID); 3684 - } 3685 3671 3686 3672 /* get device name */ 3687 3673 sas_device->device_name = le64_to_cpu(sas_device_pg0.DeviceName); ··· 4262 4250 u16 handle = le16_to_cpu(element->VolDevHandle); 4263 4251 int rc; 4264 4252 4265 - #if 0 /* RAID_HACKS */ 4266 - if (le32_to_cpu(event_data->Flags) & 4267 - MPI2_EVENT_IR_CHANGE_FLAGS_FOREIGN_CONFIG) 4268 - return; 4269 - #endif 4270 - 4271 4253 mpt2sas_config_get_volume_wwid(ioc, handle, &wwid); 4272 4254 if (!wwid) { 4273 4255 printk(MPT2SAS_ERR_FMT ··· 4315 4309 u16 handle = le16_to_cpu(element->VolDevHandle); 4316 4310 unsigned long flags; 4317 4311 struct MPT2SAS_TARGET *sas_target_priv_data; 4318 - 4319 - #if 0 /* RAID_HACKS */ 4320 - if (le32_to_cpu(event_data->Flags) & 4321 - MPI2_EVENT_IR_CHANGE_FLAGS_FOREIGN_CONFIG) 4322 - return; 4323 - #endif 4324 4312 4325 4313 spin_lock_irqsave(&ioc->raid_device_lock, flags); 4326 4314 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); ··· 4428 4428 struct _sas_device *sas_device; 4429 4429 unsigned long flags; 4430 4430 u16 handle = le16_to_cpu(element->PhysDiskDevHandle); 4431 + Mpi2ConfigReply_t mpi_reply; 4432 + Mpi2SasDevicePage0_t sas_device_pg0; 4433 + u32 ioc_status; 4431 4434 4432 4435 spin_lock_irqsave(&ioc->sas_device_lock, flags); 4433 4436 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); 4434 4437 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); 4435 - if (sas_device) 4438 + if (sas_device) { 4436 4439 sas_device->hidden_raid_component = 1; 4437 - else 4438 - _scsih_add_device(ioc, handle, 0, 1); 4440 + return; 4441 + } 4442 + 4443 + if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, 4444 + MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, handle))) { 4445 + printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", 4446 + ioc->name, __FILE__, __LINE__, __func__); 4447 + return; 4448 + } 4449 + 4450 + ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 4451 + MPI2_IOCSTATUS_MASK; 4452 + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 4453 + printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", 4454 + ioc->name, __FILE__, __LINE__, __func__); 4455 + return; 4456 + } 4457 + 4458 + _scsih_link_change(ioc, 4459 + le16_to_cpu(sas_device_pg0.ParentDevHandle), 4460 + handle, sas_device_pg0.PhyNum, MPI2_SAS_NEG_LINK_RATE_1_5); 4461 + 4462 + _scsih_add_device(ioc, handle, 0, 1); 4439 4463 } 4440 4464 4441 4465 #ifdef CONFIG_SCSI_MPT2SAS_LOGGING ··· 4559 4535 { 4560 4536 Mpi2EventIrConfigElement_t *element; 4561 4537 int i; 4538 + u8 foreign_config; 4562 4539 4563 4540 #ifdef CONFIG_SCSI_MPT2SAS_LOGGING 4564 4541 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) 4565 4542 _scsih_sas_ir_config_change_event_debug(ioc, event_data); 4566 4543 4567 4544 #endif 4545 + foreign_config = (le32_to_cpu(event_data->Flags) & 4546 + MPI2_EVENT_IR_CHANGE_FLAGS_FOREIGN_CONFIG) ? 1 : 0; 4568 4547 4569 4548 element = (Mpi2EventIrConfigElement_t *)&event_data->ConfigElement[0]; 4570 4549 for (i = 0; i < event_data->NumElements; i++, element++) { ··· 4575 4548 switch (element->ReasonCode) { 4576 4549 case MPI2_EVENT_IR_CHANGE_RC_VOLUME_CREATED: 4577 4550 case MPI2_EVENT_IR_CHANGE_RC_ADDED: 4578 - _scsih_sas_volume_add(ioc, element); 4551 + if (!foreign_config) 4552 + _scsih_sas_volume_add(ioc, element); 4579 4553 break; 4580 4554 case MPI2_EVENT_IR_CHANGE_RC_VOLUME_DELETED: 4581 4555 case MPI2_EVENT_IR_CHANGE_RC_REMOVED: 4582 - _scsih_sas_volume_delete(ioc, element); 4556 + if (!foreign_config) 4557 + _scsih_sas_volume_delete(ioc, element); 4583 4558 break; 4584 4559 case MPI2_EVENT_IR_CHANGE_RC_PD_CREATED: 4585 4560 _scsih_sas_pd_hide(ioc, element); ··· 4700 4671 u32 state; 4701 4672 struct _sas_device *sas_device; 4702 4673 unsigned long flags; 4674 + Mpi2ConfigReply_t mpi_reply; 4675 + Mpi2SasDevicePage0_t sas_device_pg0; 4676 + u32 ioc_status; 4703 4677 4704 4678 if (event_data->ReasonCode != MPI2_EVENT_IR_PHYSDISK_RC_STATE_CHANGED) 4705 4679 return; ··· 4719 4687 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); 4720 4688 4721 4689 switch (state) { 4722 - #if 0 4723 - case MPI2_RAID_PD_STATE_OFFLINE: 4724 - if (sas_device) 4725 - _scsih_remove_device(ioc, handle); 4726 - break; 4727 - #endif 4728 4690 case MPI2_RAID_PD_STATE_ONLINE: 4729 4691 case MPI2_RAID_PD_STATE_DEGRADED: 4730 4692 case MPI2_RAID_PD_STATE_REBUILDING: 4731 4693 case MPI2_RAID_PD_STATE_OPTIMAL: 4732 - if (sas_device) 4694 + if (sas_device) { 4733 4695 sas_device->hidden_raid_component = 1; 4734 - else 4735 - _scsih_add_device(ioc, handle, 0, 1); 4696 + return; 4697 + } 4698 + 4699 + if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, 4700 + &sas_device_pg0, MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, 4701 + handle))) { 4702 + printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", 4703 + ioc->name, __FILE__, __LINE__, __func__); 4704 + return; 4705 + } 4706 + 4707 + ioc_status = le16_to_cpu(mpi_reply.IOCStatus) & 4708 + MPI2_IOCSTATUS_MASK; 4709 + if (ioc_status != MPI2_IOCSTATUS_SUCCESS) { 4710 + printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", 4711 + ioc->name, __FILE__, __LINE__, __func__); 4712 + return; 4713 + } 4714 + 4715 + _scsih_link_change(ioc, 4716 + le16_to_cpu(sas_device_pg0.ParentDevHandle), 4717 + handle, sas_device_pg0.PhyNum, MPI2_SAS_NEG_LINK_RATE_1_5); 4718 + 4719 + _scsih_add_device(ioc, handle, 0, 1); 4720 + 4736 4721 break; 4737 4722 4723 + case MPI2_RAID_PD_STATE_OFFLINE: 4738 4724 case MPI2_RAID_PD_STATE_NOT_CONFIGURED: 4739 4725 case MPI2_RAID_PD_STATE_NOT_COMPATIBLE: 4740 4726 case MPI2_RAID_PD_STATE_HOT_SPARE: ··· 5824 5774 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); 5825 5775 u32 device_state; 5826 5776 5777 + mpt2sas_base_stop_watchdog(ioc); 5827 5778 flush_scheduled_work(); 5828 5779 scsi_block_requests(shost); 5829 5780 device_state = pci_choose_state(pdev, state); ··· 5867 5816 5868 5817 mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, SOFT_RESET); 5869 5818 scsi_unblock_requests(shost); 5819 + mpt2sas_base_start_watchdog(ioc); 5870 5820 return 0; 5871 5821 } 5872 5822 #endif /* CONFIG_PM */
+14 -7
fs/btrfs/inode.c
··· 3099 3099 { 3100 3100 struct btrfs_root *root = BTRFS_I(inode)->root; 3101 3101 struct btrfs_inode *entry; 3102 - struct rb_node **p = &root->inode_tree.rb_node; 3103 - struct rb_node *parent = NULL; 3102 + struct rb_node **p; 3103 + struct rb_node *parent; 3104 + 3105 + again: 3106 + p = &root->inode_tree.rb_node; 3107 + parent = NULL; 3104 3108 3105 3109 spin_lock(&root->inode_lock); 3106 3110 while (*p) { ··· 3112 3108 entry = rb_entry(parent, struct btrfs_inode, rb_node); 3113 3109 3114 3110 if (inode->i_ino < entry->vfs_inode.i_ino) 3115 - p = &(*p)->rb_left; 3111 + p = &parent->rb_left; 3116 3112 else if (inode->i_ino > entry->vfs_inode.i_ino) 3117 - p = &(*p)->rb_right; 3113 + p = &parent->rb_right; 3118 3114 else { 3119 3115 WARN_ON(!(entry->vfs_inode.i_state & 3120 3116 (I_WILL_FREE | I_FREEING | I_CLEAR))); 3121 - break; 3117 + rb_erase(parent, &root->inode_tree); 3118 + RB_CLEAR_NODE(parent); 3119 + spin_unlock(&root->inode_lock); 3120 + goto again; 3122 3121 } 3123 3122 } 3124 3123 rb_link_node(&BTRFS_I(inode)->rb_node, parent, p); ··· 3133 3126 { 3134 3127 struct btrfs_root *root = BTRFS_I(inode)->root; 3135 3128 3129 + spin_lock(&root->inode_lock); 3136 3130 if (!RB_EMPTY_NODE(&BTRFS_I(inode)->rb_node)) { 3137 - spin_lock(&root->inode_lock); 3138 3131 rb_erase(&BTRFS_I(inode)->rb_node, &root->inode_tree); 3139 - spin_unlock(&root->inode_lock); 3140 3132 RB_CLEAR_NODE(&BTRFS_I(inode)->rb_node); 3141 3133 } 3134 + spin_unlock(&root->inode_lock); 3142 3135 } 3143 3136 3144 3137 static noinline void init_btrfs_i(struct inode *inode)
+5 -2
fs/buffer.c
··· 1165 1165 1166 1166 if (!test_set_buffer_dirty(bh)) { 1167 1167 struct page *page = bh->b_page; 1168 - if (!TestSetPageDirty(page)) 1169 - __set_page_dirty(page, page_mapping(page), 0); 1168 + if (!TestSetPageDirty(page)) { 1169 + struct address_space *mapping = page_mapping(page); 1170 + if (mapping) 1171 + __set_page_dirty(page, mapping, 0); 1172 + } 1170 1173 } 1171 1174 } 1172 1175
+4
include/drm/radeon_drm.h
··· 508 508 #define DRM_RADEON_INFO 0x27 509 509 #define DRM_RADEON_GEM_SET_TILING 0x28 510 510 #define DRM_RADEON_GEM_GET_TILING 0x29 511 + #define DRM_RADEON_GEM_BUSY 0x2a 511 512 512 513 #define DRM_IOCTL_RADEON_CP_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_RADEON_CP_INIT, drm_radeon_init_t) 513 514 #define DRM_IOCTL_RADEON_CP_START DRM_IO( DRM_COMMAND_BASE + DRM_RADEON_CP_START) ··· 549 548 #define DRM_IOCTL_RADEON_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_INFO, struct drm_radeon_info) 550 549 #define DRM_IOCTL_RADEON_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_SET_TILING, struct drm_radeon_gem_set_tiling) 551 550 #define DRM_IOCTL_RADEON_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_GET_TILING, struct drm_radeon_gem_get_tiling) 551 + #define DRM_IOCTL_RADEON_GEM_BUSY DRM_IOWR(DRM_COMMAND_BASE + DRM_RADEON_GEM_BUSY, struct drm_radeon_gem_busy) 552 552 553 553 typedef struct drm_radeon_init { 554 554 enum { ··· 709 707 #define RADEON_PARAM_FB_LOCATION 14 /* FB location */ 710 708 #define RADEON_PARAM_NUM_GB_PIPES 15 /* num GB pipes */ 711 709 #define RADEON_PARAM_DEVICE_ID 16 710 + #define RADEON_PARAM_NUM_Z_PIPES 17 /* num Z pipes */ 712 711 713 712 typedef struct drm_radeon_getparam { 714 713 int param; ··· 898 895 899 896 #define RADEON_INFO_DEVICE_ID 0x00 900 897 #define RADEON_INFO_NUM_GB_PIPES 0x01 898 + #define RADEON_INFO_NUM_Z_PIPES 0x02 901 899 902 900 struct drm_radeon_info { 903 901 uint32_t request;
+8 -10
include/linux/bitmap.h
··· 94 94 const unsigned long *src, int shift, int bits); 95 95 extern void __bitmap_shift_left(unsigned long *dst, 96 96 const unsigned long *src, int shift, int bits); 97 - extern void __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, 97 + extern int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, 98 98 const unsigned long *bitmap2, int bits); 99 99 extern void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, 100 100 const unsigned long *bitmap2, int bits); 101 101 extern void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1, 102 102 const unsigned long *bitmap2, int bits); 103 - extern void __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, 103 + extern int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, 104 104 const unsigned long *bitmap2, int bits); 105 105 extern int __bitmap_intersects(const unsigned long *bitmap1, 106 106 const unsigned long *bitmap2, int bits); ··· 171 171 } 172 172 } 173 173 174 - static inline void bitmap_and(unsigned long *dst, const unsigned long *src1, 174 + static inline int bitmap_and(unsigned long *dst, const unsigned long *src1, 175 175 const unsigned long *src2, int nbits) 176 176 { 177 177 if (small_const_nbits(nbits)) 178 - *dst = *src1 & *src2; 179 - else 180 - __bitmap_and(dst, src1, src2, nbits); 178 + return (*dst = *src1 & *src2) != 0; 179 + return __bitmap_and(dst, src1, src2, nbits); 181 180 } 182 181 183 182 static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, ··· 197 198 __bitmap_xor(dst, src1, src2, nbits); 198 199 } 199 200 200 - static inline void bitmap_andnot(unsigned long *dst, const unsigned long *src1, 201 + static inline int bitmap_andnot(unsigned long *dst, const unsigned long *src1, 201 202 const unsigned long *src2, int nbits) 202 203 { 203 204 if (small_const_nbits(nbits)) 204 - *dst = *src1 & ~(*src2); 205 - else 206 - __bitmap_andnot(dst, src1, src2, nbits); 205 + return (*dst = *src1 & ~(*src2)) != 0; 206 + return __bitmap_andnot(dst, src1, src2, nbits); 207 207 } 208 208 209 209 static inline void bitmap_complement(unsigned long *dst, const unsigned long *src,
+10 -10
include/linux/cpumask.h
··· 43 43 * int cpu_isset(cpu, mask) true iff bit 'cpu' set in mask 44 44 * int cpu_test_and_set(cpu, mask) test and set bit 'cpu' in mask 45 45 * 46 - * void cpus_and(dst, src1, src2) dst = src1 & src2 [intersection] 46 + * int cpus_and(dst, src1, src2) dst = src1 & src2 [intersection] 47 47 * void cpus_or(dst, src1, src2) dst = src1 | src2 [union] 48 48 * void cpus_xor(dst, src1, src2) dst = src1 ^ src2 49 - * void cpus_andnot(dst, src1, src2) dst = src1 & ~src2 49 + * int cpus_andnot(dst, src1, src2) dst = src1 & ~src2 50 50 * void cpus_complement(dst, src) dst = ~src 51 51 * 52 52 * int cpus_equal(mask1, mask2) Does mask1 == mask2? ··· 179 179 } 180 180 181 181 #define cpus_and(dst, src1, src2) __cpus_and(&(dst), &(src1), &(src2), NR_CPUS) 182 - static inline void __cpus_and(cpumask_t *dstp, const cpumask_t *src1p, 182 + static inline int __cpus_and(cpumask_t *dstp, const cpumask_t *src1p, 183 183 const cpumask_t *src2p, int nbits) 184 184 { 185 - bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits); 185 + return bitmap_and(dstp->bits, src1p->bits, src2p->bits, nbits); 186 186 } 187 187 188 188 #define cpus_or(dst, src1, src2) __cpus_or(&(dst), &(src1), &(src2), NR_CPUS) ··· 201 201 202 202 #define cpus_andnot(dst, src1, src2) \ 203 203 __cpus_andnot(&(dst), &(src1), &(src2), NR_CPUS) 204 - static inline void __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p, 204 + static inline int __cpus_andnot(cpumask_t *dstp, const cpumask_t *src1p, 205 205 const cpumask_t *src2p, int nbits) 206 206 { 207 - bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits); 207 + return bitmap_andnot(dstp->bits, src1p->bits, src2p->bits, nbits); 208 208 } 209 209 210 210 #define cpus_complement(dst, src) __cpus_complement(&(dst), &(src), NR_CPUS) ··· 738 738 * @src1p: the first input 739 739 * @src2p: the second input 740 740 */ 741 - static inline void cpumask_and(struct cpumask *dstp, 741 + static inline int cpumask_and(struct cpumask *dstp, 742 742 const struct cpumask *src1p, 743 743 const struct cpumask *src2p) 744 744 { 745 - bitmap_and(cpumask_bits(dstp), cpumask_bits(src1p), 745 + return bitmap_and(cpumask_bits(dstp), cpumask_bits(src1p), 746 746 cpumask_bits(src2p), nr_cpumask_bits); 747 747 } 748 748 ··· 779 779 * @src1p: the first input 780 780 * @src2p: the second input 781 781 */ 782 - static inline void cpumask_andnot(struct cpumask *dstp, 782 + static inline int cpumask_andnot(struct cpumask *dstp, 783 783 const struct cpumask *src1p, 784 784 const struct cpumask *src2p) 785 785 { 786 - bitmap_andnot(cpumask_bits(dstp), cpumask_bits(src1p), 786 + return bitmap_andnot(cpumask_bits(dstp), cpumask_bits(src1p), 787 787 cpumask_bits(src2p), nr_cpumask_bits); 788 788 } 789 789
+8 -4
lib/bitmap.c
··· 179 179 } 180 180 EXPORT_SYMBOL(__bitmap_shift_left); 181 181 182 - void __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, 182 + int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, 183 183 const unsigned long *bitmap2, int bits) 184 184 { 185 185 int k; 186 186 int nr = BITS_TO_LONGS(bits); 187 + unsigned long result = 0; 187 188 188 189 for (k = 0; k < nr; k++) 189 - dst[k] = bitmap1[k] & bitmap2[k]; 190 + result |= (dst[k] = bitmap1[k] & bitmap2[k]); 191 + return result != 0; 190 192 } 191 193 EXPORT_SYMBOL(__bitmap_and); 192 194 ··· 214 212 } 215 213 EXPORT_SYMBOL(__bitmap_xor); 216 214 217 - void __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, 215 + int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, 218 216 const unsigned long *bitmap2, int bits) 219 217 { 220 218 int k; 221 219 int nr = BITS_TO_LONGS(bits); 220 + unsigned long result = 0; 222 221 223 222 for (k = 0; k < nr; k++) 224 - dst[k] = bitmap1[k] & ~bitmap2[k]; 223 + result |= (dst[k] = bitmap1[k] & ~bitmap2[k]); 224 + return result != 0; 225 225 } 226 226 EXPORT_SYMBOL(__bitmap_andnot); 227 227
+4 -2
sound/pci/hda/patch_analog.c
··· 3835 3835 /* Port-F (int speaker) mixer - route only from analog mixer */ 3836 3836 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, 3837 3837 {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, 3838 - /* Port-F pin */ 3839 - {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, 3838 + /* Port-F (int speaker) pin */ 3839 + {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, 3840 3840 {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, 3841 + /* required for compaq 6530s/6531s speaker output */ 3842 + {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, 3841 3843 /* Port-C pin - internal mic-in */ 3842 3844 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, 3843 3845 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0x7002}, /* raise mic as default */
+13 -2
sound/pci/hda/patch_realtek.c
··· 12521 12521 ALC268_TOSHIBA), 12522 12522 SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC268_3ST), 12523 12523 SND_PCI_QUIRK(0x1170, 0x0040, "ZEPTO", ALC268_ZEPTO), 12524 - SND_PCI_QUIRK_MASK(0x1179, 0xff00, 0xff00, "TOSHIBA A/Lx05", 12525 - ALC268_TOSHIBA), 12526 12524 SND_PCI_QUIRK(0x14c0, 0x0025, "COMPAL IFL90/JFL-92", ALC268_TOSHIBA), 12527 12525 SND_PCI_QUIRK(0x152d, 0x0763, "Diverse (CPR2000)", ALC268_ACER), 12528 12526 SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1), 12529 12527 SND_PCI_QUIRK(0x1854, 0x1775, "LG R510", ALC268_DELL), 12528 + {} 12529 + }; 12530 + 12531 + /* Toshiba laptops have no unique PCI SSID but only codec SSID */ 12532 + static struct snd_pci_quirk alc268_ssid_cfg_tbl[] = { 12533 + SND_PCI_QUIRK(0x1179, 0xff0a, "TOSHIBA X-200", ALC268_AUTO), 12534 + SND_PCI_QUIRK(0x1179, 0xff0e, "TOSHIBA X-200 HDMI", ALC268_AUTO), 12535 + SND_PCI_QUIRK_MASK(0x1179, 0xff00, 0xff00, "TOSHIBA A/Lx05", 12536 + ALC268_TOSHIBA), 12530 12537 {} 12531 12538 }; 12532 12539 ··· 12702 12695 board_config = snd_hda_check_board_config(codec, ALC268_MODEL_LAST, 12703 12696 alc268_models, 12704 12697 alc268_cfg_tbl); 12698 + 12699 + if (board_config < 0 || board_config >= ALC268_MODEL_LAST) 12700 + board_config = snd_hda_check_board_codec_sid_config(codec, 12701 + ALC882_MODEL_LAST, alc268_models, alc268_ssid_cfg_tbl); 12705 12702 12706 12703 if (board_config < 0 || board_config >= ALC268_MODEL_LAST) { 12707 12704 printk(KERN_INFO "hda_codec: Unknown model for %s, "
+6
sound/pci/hda/patch_sigmatel.c
··· 76 76 STAC_92HD73XX_AUTO, 77 77 STAC_92HD73XX_NO_JD, /* no jack-detection */ 78 78 STAC_92HD73XX_REF, 79 + STAC_92HD73XX_INTEL, 79 80 STAC_DELL_M6_AMIC, 80 81 STAC_DELL_M6_DMIC, 81 82 STAC_DELL_M6_BOTH, ··· 1778 1777 [STAC_92HD73XX_AUTO] = "auto", 1779 1778 [STAC_92HD73XX_NO_JD] = "no-jd", 1780 1779 [STAC_92HD73XX_REF] = "ref", 1780 + [STAC_92HD73XX_INTEL] = "intel", 1781 1781 [STAC_DELL_M6_AMIC] = "dell-m6-amic", 1782 1782 [STAC_DELL_M6_DMIC] = "dell-m6-dmic", 1783 1783 [STAC_DELL_M6_BOTH] = "dell-m6", ··· 1791 1789 "DFI LanParty", STAC_92HD73XX_REF), 1792 1790 SND_PCI_QUIRK(PCI_VENDOR_ID_DFI, 0x3101, 1793 1791 "DFI LanParty", STAC_92HD73XX_REF), 1792 + SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x5002, 1793 + "Intel DG45ID", STAC_92HD73XX_INTEL), 1794 + SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x5003, 1795 + "Intel DG45FC", STAC_92HD73XX_INTEL), 1794 1796 SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0254, 1795 1797 "Dell Studio 1535", STAC_DELL_M6_DMIC), 1796 1798 SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0255,