mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
PCI: hv: Fix the definition of vector in hv_compose_msi_msg()
[ Upstream commite70af8d040
] The local variable 'vector' must be u32 rather than u8: see the struct hv_msi_desc3. 'vector_count' should be u16 rather than u8: see struct hv_msi_desc, hv_msi_desc2 and hv_msi_desc3. Fixes:a2bad844a6
("PCI: hv: Fix interrupt mapping for multi-MSI") Signed-off-by: Dexuan Cui <decui@microsoft.com> Cc: Jeffrey Hugo <quic_jhugo@quicinc.com> Cc: Carl Vanderlip <quic_carlv@quicinc.com> Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com> Link: https://lore.kernel.org/r/20221027205256.17678-1-decui@microsoft.com Signed-off-by: Wei Liu <wei.liu@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
543e28206b
commit
5e9b8b35ee
1 changed files with 16 additions and 6 deletions
|
@ -1614,7 +1614,7 @@ static void hv_pci_compose_compl(void *context, struct pci_response *resp,
|
|||
|
||||
static u32 hv_compose_msi_req_v1(
|
||||
struct pci_create_interrupt *int_pkt, const struct cpumask *affinity,
|
||||
u32 slot, u8 vector, u8 vector_count)
|
||||
u32 slot, u8 vector, u16 vector_count)
|
||||
{
|
||||
int_pkt->message_type.type = PCI_CREATE_INTERRUPT_MESSAGE;
|
||||
int_pkt->wslot.slot = slot;
|
||||
|
@ -1642,7 +1642,7 @@ static int hv_compose_msi_req_get_cpu(const struct cpumask *affinity)
|
|||
|
||||
static u32 hv_compose_msi_req_v2(
|
||||
struct pci_create_interrupt2 *int_pkt, const struct cpumask *affinity,
|
||||
u32 slot, u8 vector, u8 vector_count)
|
||||
u32 slot, u8 vector, u16 vector_count)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
|
@ -1661,7 +1661,7 @@ static u32 hv_compose_msi_req_v2(
|
|||
|
||||
static u32 hv_compose_msi_req_v3(
|
||||
struct pci_create_interrupt3 *int_pkt, const struct cpumask *affinity,
|
||||
u32 slot, u32 vector, u8 vector_count)
|
||||
u32 slot, u32 vector, u16 vector_count)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
|
@ -1701,7 +1701,12 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
|
|||
struct compose_comp_ctxt comp;
|
||||
struct tran_int_desc *int_desc;
|
||||
struct msi_desc *msi_desc;
|
||||
u8 vector, vector_count;
|
||||
/*
|
||||
* vector_count should be u16: see hv_msi_desc, hv_msi_desc2
|
||||
* and hv_msi_desc3. vector must be u32: see hv_msi_desc3.
|
||||
*/
|
||||
u16 vector_count;
|
||||
u32 vector;
|
||||
struct {
|
||||
struct pci_packet pci_pkt;
|
||||
union {
|
||||
|
@ -1767,6 +1772,11 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
|
|||
vector_count = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* hv_compose_msi_req_v1 and v2 are for x86 only, meaning 'vector'
|
||||
* can't exceed u8. Cast 'vector' down to u8 for v1/v2 explicitly
|
||||
* for better readability.
|
||||
*/
|
||||
memset(&ctxt, 0, sizeof(ctxt));
|
||||
init_completion(&comp.comp_pkt.host_event);
|
||||
ctxt.pci_pkt.completion_func = hv_pci_compose_compl;
|
||||
|
@ -1777,7 +1787,7 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
|
|||
size = hv_compose_msi_req_v1(&ctxt.int_pkts.v1,
|
||||
dest,
|
||||
hpdev->desc.win_slot.slot,
|
||||
vector,
|
||||
(u8)vector,
|
||||
vector_count);
|
||||
break;
|
||||
|
||||
|
@ -1786,7 +1796,7 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
|
|||
size = hv_compose_msi_req_v2(&ctxt.int_pkts.v2,
|
||||
dest,
|
||||
hpdev->desc.win_slot.slot,
|
||||
vector,
|
||||
(u8)vector,
|
||||
vector_count);
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in a new issue