The ITS VMAPP command gains some new fields with GICv4.1: - a default doorbell, which allows a single doorbell to be used for all the VLPIs routed to a given VPE - a pointer to the configuration table (instead of having it in a register that gets context switched) - a flag indicating whether this is the first map or the last unmap for this particular VPE - a flag indicating whether the pending table is known to be zeroed, or not Plumb in the new fields in the VMAPP builder, and add the map/unmap refcounting so that the ITS can do the right thing.
Showing the changes to include/linux (1 of 2 files). Show all
Unified · Split
| @@ -39,8 +39,20 @@ struct its_vpe { · 38 unmodified lines | ||
| 39 | 39 | irq_hw_number_t vpe_db_lpi; |
| 40 | 40 | /* VPE resident */ |
| 41 | 41 | bool resident; |
| 42 | − /* VPE proxy mapping */ | |
| 43 | − int vpe_proxy_event; | |
| 42 | + union { | |
| 43 | + /* GICv4.0 implementations */ | |
| 44 | + struct { | |
| 45 | + /* VPE proxy mapping */ | |
| 46 | + int vpe_proxy_event; | |
| 47 | + /* Implementation Defined Area Invalid */ | |
| 48 | + bool idai; | |
| 49 | + }; | |
| 50 | + /* GICv4.1 implementations */ | |
| 51 | + struct { | |
| 52 | + atomic_t vmapp_count; | |
| 53 | + }; | |
| 54 | + }; | |
| 55 | + | |
| 44 | 56 | /* |
| 45 | 57 | * This collection ID is used to indirect the target |
| 46 | 58 | * redistributor for this VPE. The ID itself isn't involved in |
| @@ -49,8 +61,6 @@ struct its_vpe { · 2 unmodified lines | ||
| 49 | 61 | u16 col_idx; |
| 50 | 62 | /* Unique (system-wide) VPE identifier */ |
| 51 | 63 | u16 vpe_id; |
| 52 | − /* Implementation Defined Area Invalid */ | |
| 53 | − bool idai; | |
| 54 | 64 | /* Pending VLPIs on schedule out? */ |
| 55 | 65 | bool pending_last; |
| 56 | 66 | }; |