fe9a643157
Ross says: "The memory allocation for these requests doesn’t take into account the additional memory needed when the code in scic_sds_s[mst]p_request_assign_buffers() shifts the struct scu_task_context so that it is cache line aligned: In an example from my machine, total buffer that I’ve given to SCIC goes from 0x410024566f84 to 0x410024567308. From this same example, this call shifts my task_context_buffer from 0x410024567208 to 0x410024567240. This means that the task_context_buffer that used to range from 0x410024567208 to 0x410024567308 instead now goes from 0x410024567240 to 0x410024567340. When the memset() call at the end of scic_task_request_construct() clears out this task_context_buffer, it does so from 0x410024567240 to 0x410024567340, effectively killing whatever buffer follows this allocation in memory." djbw: Use the kernel's PTR_ALIGN instead of scic_sds_request_align_task_context_buffer() and SMP_CACHE_BYTES instead of the local CACHE_LINE_SIZE definition. TODO: These allocations really want to be better defined in a union rather than opaque buffers carved up by macros. Reported-by: Ross Zwisler <ross.zwisler@intel.com> Signed-off-by: Jacek Danecki <Jacek.Danecki@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> |
||
---|---|---|
.. | ||
intel_ata.h | ||
intel_sas.h | ||
intel_sat.h | ||
intel_sata.h | ||
intel_scsi.h | ||
sati_device.h | ||
sati_translator_sequence.h | ||
sati_types.h | ||
sci_base_controller.h | ||
sci_base_memory_descriptor_list.c | ||
sci_base_memory_descriptor_list.h | ||
sci_base_phy.h | ||
sci_base_port.h | ||
sci_base_remote_device.h | ||
sci_base_request.h | ||
sci_base_state_machine.c | ||
sci_base_state_machine.h | ||
sci_base_state.h | ||
sci_controller_constants.h | ||
sci_controller.h | ||
sci_memory_descriptor_list.h | ||
sci_object.h | ||
sci_pool.h | ||
sci_status.h | ||
sci_util.c | ||
sci_util.h | ||
scic_config_parameters.h | ||
scic_controller.h | ||
scic_io_request.h | ||
scic_phy.h | ||
scic_port.h | ||
scic_remote_device.h | ||
scic_sds_controller_registers.h | ||
scic_sds_controller.c | ||
scic_sds_controller.h | ||
scic_sds_pci.h | ||
scic_sds_phy_registers.h | ||
scic_sds_phy.c | ||
scic_sds_phy.h | ||
scic_sds_port_configuration_agent.c | ||
scic_sds_port_configuration_agent.h | ||
scic_sds_port_registers.h | ||
scic_sds_port.c | ||
scic_sds_port.h | ||
scic_sds_remote_device.c | ||
scic_sds_remote_device.h | ||
scic_sds_remote_node_context.c | ||
scic_sds_remote_node_context.h | ||
scic_sds_remote_node_table.c | ||
scic_sds_remote_node_table.h | ||
scic_sds_request.c | ||
scic_sds_request.h | ||
scic_sds_smp_remote_device.c | ||
scic_sds_smp_request.c | ||
scic_sds_smp_request.h | ||
scic_sds_ssp_request.c | ||
scic_sds_stp_packet_request.c | ||
scic_sds_stp_packet_request.h | ||
scic_sds_stp_pio_request.h | ||
scic_sds_stp_remote_device.c | ||
scic_sds_stp_request.c | ||
scic_sds_stp_request.h | ||
scic_sds_unsolicited_frame_control.c | ||
scic_sds_unsolicited_frame_control.h | ||
scic_task_request.h | ||
scu_completion_codes.h | ||
scu_constants.h | ||
scu_event_codes.h | ||
scu_registers.h | ||
scu_remote_node_context.h | ||
scu_task_context.h | ||
scu_unsolicited_frame.h | ||
scu_viit_data.h |