forked from Minki/linux
PCI: hv: Fix the definition of vector in hv_compose_msi_msg()
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>
This commit is contained in:
parent
9539c7fa38
commit
e70af8d040
@ -1614,7 +1614,7 @@ out:
|
|||||||
|
|
||||||
static u32 hv_compose_msi_req_v1(
|
static u32 hv_compose_msi_req_v1(
|
||||||
struct pci_create_interrupt *int_pkt, const struct cpumask *affinity,
|
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->message_type.type = PCI_CREATE_INTERRUPT_MESSAGE;
|
||||||
int_pkt->wslot.slot = slot;
|
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(
|
static u32 hv_compose_msi_req_v2(
|
||||||
struct pci_create_interrupt2 *int_pkt, const struct cpumask *affinity,
|
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;
|
int cpu;
|
||||||
|
|
||||||
@ -1661,7 +1661,7 @@ static u32 hv_compose_msi_req_v2(
|
|||||||
|
|
||||||
static u32 hv_compose_msi_req_v3(
|
static u32 hv_compose_msi_req_v3(
|
||||||
struct pci_create_interrupt3 *int_pkt, const struct cpumask *affinity,
|
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;
|
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 compose_comp_ctxt comp;
|
||||||
struct tran_int_desc *int_desc;
|
struct tran_int_desc *int_desc;
|
||||||
struct msi_desc *msi_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 {
|
||||||
struct pci_packet pci_pkt;
|
struct pci_packet pci_pkt;
|
||||||
union {
|
union {
|
||||||
@ -1767,6 +1772,11 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
|
|||||||
vector_count = 1;
|
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));
|
memset(&ctxt, 0, sizeof(ctxt));
|
||||||
init_completion(&comp.comp_pkt.host_event);
|
init_completion(&comp.comp_pkt.host_event);
|
||||||
ctxt.pci_pkt.completion_func = hv_pci_compose_compl;
|
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,
|
size = hv_compose_msi_req_v1(&ctxt.int_pkts.v1,
|
||||||
dest,
|
dest,
|
||||||
hpdev->desc.win_slot.slot,
|
hpdev->desc.win_slot.slot,
|
||||||
vector,
|
(u8)vector,
|
||||||
vector_count);
|
vector_count);
|
||||||
break;
|
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,
|
size = hv_compose_msi_req_v2(&ctxt.int_pkts.v2,
|
||||||
dest,
|
dest,
|
||||||
hpdev->desc.win_slot.slot,
|
hpdev->desc.win_slot.slot,
|
||||||
vector,
|
(u8)vector,
|
||||||
vector_count);
|
vector_count);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user