[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 08/11] vpci/header: Emulate PCI_COMMAND register for guests
- To: Jan Beulich <jbeulich@xxxxxxxx>
- From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
- Date: Tue, 2 Nov 2021 12:50:10 +0100
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=G+yQ8/y5sayzRStPWYzSe98D7nsZ/KIY5dztZJpKUBk=; b=l1erpj3JkzepKWXxc25PIzXuUjLwVkgw82POf+PBCoWariLuUH9eyZfLPNCC5WWylTqMSs5Yd0jjsaGpXJg6AoJ8VNW30FrqnAtlRZhw5MM8KP0OmmUCuPVhKZZCk0s9SekWacxaGPvSO7zHOOu9VJenxEk9ZXQHZhwPWDRZwrWEE2hC/NSPfGSDz21iE0yJCs5o7F+e9aiaAyFOt7YyMjyNP2syTzsI+NgsUywGaUg2pvRdL/Qav3kbn+uRiz0kvapWyNBeaXJRr1LVJFqpeqPSbzm1q7uEBlXaLfuQVUxOygGFbN3GPlxxiJCvti0XeMQiG8Tm9LXXWhslULB5kg==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FCxEhMU5qaI8O7bOlumbD2Oq950TI1W6r8e2CJRUtpV8CDjNS86AIzFli0Ots7FK2CtfV0ClxM22+uof7zxyjHJcbe4v9tgsJxYNqDM3N2SUGdLrHOCIqnlMtQI4M7Md5VDgHnxW8LNl4eFwYY9w9QXsHbfPNc2sN9HCdS9jeeA7i1Sx7CZ6r0VudwrVScXFFgu8rdUQ/mNexj4dB8urjRmlGysaDBvNxBymi7PDLFdOpFPsMGUaKZhFsikUwraTOP44L9FX+zkqQovoE7FLS7NnQP8G3J8PPizYcNKnnMyagUTTAY2JBmWszGcTGvsmjR6dvJgrC+RDrPwYQH65jQ==
- Authentication-results: esa1.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
- Cc: <xen-devel@xxxxxxxxxxxxxxxxxxxx>, <julien@xxxxxxx>, <sstabellini@xxxxxxxxxx>, <oleksandr_tyshchenko@xxxxxxxx>, <volodymyr_babchuk@xxxxxxxx>, <Artem_Mygaiev@xxxxxxxx>, <bertrand.marquis@xxxxxxx>, <rahul.singh@xxxxxxx>, Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Oleksandr Andrushchenko <andr2000@xxxxxxxxx>
- Delivery-date: Tue, 02 Nov 2021 11:50:37 +0000
- Ironport-data: A9a23:+0d6matEHjFWxT/O5eqbsqxjZefnVJdYMUV32f8akzHdYApBsoF/q tZmKTyPaPvZYDP1f9t/b4W0oUhUup7QzoQxGQs6+yhkRXwa+JbJXdiXEBz9bniYRiHhoOOLz Cm8hv3odp1coqr0/0/1WlTZQP0VOZigHtIQMsadUsxKbVIiGHhJZS5LwbZj29cx2YLhWmthh PupyyHhEA79s9JLGjp8B5Kr8HuDa9yr5Vv0FnRnDRx6lAe2e0s9VfrzFonoR5fMeaFGH/bSe gr25OrRElU1XfsaIojNfr7TKiXmS1NJVOSEoiI+t6OK2nCuqsGuu0qS2TV1hUp/0l20c95NJ Npl5LatVVgrJf3wk9sWSBV/VDBmEqsB5+qSSZS/mZT7I0zudnLtx7NlDV0sPJ1e8eFyaY1M3 aVGcnZXNEnF3r/ohuLgIgVvrp1LwM3DJoQQt2sm1TjEJf0nXYrCU+PB4towMDIY258UQ66GP JZxhTxHPT+bOkZ2JUstUcgbpb643Fz5XzwIpwfAzUYwyzeKl1EguFT3C/LPc9yXQYNOn0CXp krP5WG/CRYfXPSVxCCZ6HuqiqnKlDniRYMJPLSi87hhh1j77kUJFBATYn6qrvC4h1CWVspWL gof/S9GhaE0+FbxFoGldxK9qX+A+BUbXrJ4Fuwx6AiJjK3O8QudLmEeS3hKb9lOnMgySD8x3 1mFheTgAzB1raaVQnKQ8LSThT6qMC1TJmgHDQcGUA8E7t/LsIw1yBXVQb5LAKOzy9H4Bzz06 zSLtzQlwaUei9YR0Ke29kyBhCijzrDLRAMo4gTcXkq+8xh0IoWiYuSA91/f6vpRKZeDeVOIt nMEhsu24fgHCNeGkynlaOIJEbKy7vCJKgrAkEVvFJks8Teq03O7dIUW6zZ7TG9yKdoNczLtZ E7VuCtS6YVVMX/sarV4C79dEOxzk/KmT468EKmJMJweOfCdaTNr4gk/T1OMgGL2wHQnrqokN bDcYN6DCzEFXPEPICWNe88R1roixyYbzGzVRIzmwxnP7YdydEJ5Wp9ebgLQM7lRALes5VyMr o0Bb5fiJwB3CbWmOkHqHZgvwUfmxJTRLbT/sIRpe+GKOWKK80lxWqaKkdvNl2GI9pm5d9skH FnhCie0K3Kl3BUrzDlmjFg5MdsDur4k9RoG0dQEZwrA5pTaSd/HAF0jX5U2Z6I70+do0OR5S fIIE+3ZXK8SFWWdo2tHN8ChxGCHSPhNrVjXV8ZCSGNnF6OMuiSTooO0FucR3HBWZsZIiSfOi +L5jV6KKXbybw9jENzXeJqSI6CZ5hAgdBZJdxKQeLF7IRy0mKAzcnCZpqJncqkkdESYrhPHh ln+PPvtjbSUy2PD2IKS3v7sQkbAO7YWI3e26EGCtuvrbnaGpjLLLE0peL/gQA0xnVjcoc2KT e5U0+v9ILsAmlNLuJB7CLFl0eQ14N6HmlOQ5l0M8KzjYwv5B7V+DGOB2MUT5KRByqUA4Vm9W 16V+8kcMrKMYZu3HFkULQsjT+KCyfBLxWWCsaVreB33tH1t4b6KcUROJB3Q2iZTG6R4bdE+y uA7tc9ItwHm0kg2MsyLhzx//niXKiBSSL0us5wXWde5igcixlxYT4bbDyv6vMOGZ9lWaxF4K T6InqvSwb9bwxOaIXY0EHHM28tbhIgP508WnANTeQzRl4Oc1PEt3RBX/TAmdShvz01Kg7BpJ 2xmF0xpPqHSrT1ms9dOAjK3EAZbCRzHpkGokwkVlHfURlWDX3DWKDFvIv6E+U0U/j4OfjVf+ 73Emm/pXSyzIZP01yo2H0Vkt+biXZp68QibwJKrGMGMHp8bZzv5g/DxOTpU+kW/Wc5h1lfao eRK/fprbfypPCEdlKQ3Fo2G2OlCUxuDPmFDHals8a5h8bswo91uNexi83yMR/4=
- Ironport-hdrordr: A9a23:Gmg33qPInCH0scBcT13155DYdb4zR+YMi2TDiHoedfUFSKOlfp 6V8MjztSWVtN4QMEtQ/+xoHJPwPE80kqQFnbX5XI3SJjUO3VHIEGgM1/qG/9SNIVybygcZ79 YeT0EcMqyBMbEZt7eD3ODQKb9Jq7PrgcPY55as854ud3AQV0gJ1XYJNu/xKDwOeOApP+tfKH LKjfA32QZINE5nI/iTNz0gZazuttfLnJXpbVovAAMm0hCHiXeN5KThGxaV8x8CW3cXqI1Svl Ttokjc3OGOovu7whjT2yv66IlXosLozp9mCNaXgsYYBz3wgkKDZZhnWZeFoDcpydvfpGoCoZ 3pmVMNLs5z43TeciWcpgbs4RDp1HIU53rr2Taj8DPeiP28YAh/J9tKhIpffBecwVEnpstA3K VC2H/cn4ZLDDvb9R6Np+TgZlVPrA6ZsHAimekcgzh0So0FcoJcqoQZ4Qd8DIoAJiTn84oqed MeTf003MwmM29yUkqp+1WGmLeXLzAO91a9MwY/U/WuontrdCsT9Tpe+CQd9k1wva7VBaM0od gsCZ4Y4Y2mePVmG56VNN1xM/dfNVa9NS4kEFjiamgPR5t3cU4klfbMkcIIDaeRCcU18Kc=
- Ironport-sdr: tSdULL7iwhlcvra0Fz8xJiRtt0shpsc0Dm5Drqk52qrYwMgO+DYIVJ6d+QWnQxr7AllWsO8pUL ZXRdbRsgabJGEM6U296aL3i70Si8u4wRRuN5E8dmkf8Ke8YmQEGQgg3U16wY4ettZmvXdxRBj5 /1ey3IMOn6lCb2zSpNnOLcoT+7+P7sNaNhhjk4apwZrGZVIwoh1Jd4vasr5zKmz5SzNg3kJ82m IqefYaiEIULPjFci7w9PQYfmZPixZk2kWhOhTwrn04rtg3rEI3quVs/utcegdDE+Q0MDFRDI79 gWJKdWuq6l5LwZqLj98E+jdP
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On Tue, Nov 02, 2021 at 12:19:13PM +0100, Jan Beulich wrote:
> On 26.10.2021 12:52, Roger Pau Monné wrote:
> > On Thu, Sep 30, 2021 at 10:52:20AM +0300, Oleksandr Andrushchenko wrote:
> >> --- a/xen/drivers/vpci/header.c
> >> +++ b/xen/drivers/vpci/header.c
> >> @@ -451,6 +451,32 @@ static void cmd_write(const struct pci_dev *pdev,
> >> unsigned int reg,
> >> pci_conf_write16(pdev->sbdf, reg, cmd);
> >> }
> >>
> >> +static void guest_cmd_write(const struct pci_dev *pdev, unsigned int reg,
> >> + uint32_t cmd, void *data)
> >> +{
> >> + /* TODO: Add proper emulation for all bits of the command register. */
> >> +
> >> + if ( (cmd & PCI_COMMAND_INTX_DISABLE) == 0 )
> >> + {
> >> + /*
> >> + * Guest wants to enable INTx. It can't be enabled if:
> >> + * - host has INTx disabled
> >> + * - MSI/MSI-X enabled
> >> + */
> >> + if ( pdev->vpci->msi->enabled )
> >> + cmd |= PCI_COMMAND_INTX_DISABLE;
> >> + else
> >> + {
> >> + uint16_t current_cmd = pci_conf_read16(pdev->sbdf, reg);
> >> +
> >> + if ( current_cmd & PCI_COMMAND_INTX_DISABLE )
> >> + cmd |= PCI_COMMAND_INTX_DISABLE;
> >> + }
> >
> > This last part should be Arm specific. On other architectures we
> > likely want the guest to modify INTx disable in order to select the
> > interrupt delivery mode for the device.
>
> We cannot allow a guest to clear the bit when it has MSI / MSI-X
> enabled - only one of the three is supposed to be active at a time.
> (IOW similarly we cannot allow a guest to enable MSI / MSI-X when
> the bit is clear.)
Sure, but this code is making the bit sticky, by not allowing
INTX_DISABLE to be cleared once set. We do not want that behavior on
x86, as a guest can decide to use MSI or INTx. The else branch needs
to be Arm only.
Regards, Roger.
|