All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>,
	qemu-devel@nongnu.org,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [Qemu-devel] [PATCH 4/6] xen/pass-through: correctly deal with RW1C bits
Date: Tue, 16 Jun 2015 15:19:58 +0100	[thread overview]
Message-ID: <alpine.DEB.2.02.1506161512200.21829@kaball.uk.xensource.com> (raw)
In-Reply-To: <5571AC2E020000780008156B@mail.emea.novell.com>

On Fri, 5 Jun 2015, Jan Beulich wrote:
> Introduce yet another mask for them, so that the generic routine can
> handle them, at once rendering xen_pt_pmcsr_reg_write() superfluous.
> 
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> 
> --- a/qemu/upstream/hw/xen/xen_pt.h
> +++ b/qemu/upstream/hw/xen/xen_pt.h
> @@ -105,6 +105,8 @@ struct XenPTRegInfo {
>      uint32_t res_mask;
>      /* reg read only field mask (ON:RO/ROS, OFF:other) */
>      uint32_t ro_mask;
> +    /* reg read/write-1-clear field mask (ON:RW1C/RW1CS, OFF:other) */
> +    uint32_t rw1c_mask;
>      /* reg emulate field mask (ON:emu, OFF:passthrough) */
>      uint32_t emu_mask;
>      xen_pt_conf_reg_init init;
> --- a/qemu/upstream/hw/xen/xen_pt_config_init.c
> +++ b/qemu/upstream/hw/xen/xen_pt_config_init.c
> @@ -176,7 +176,8 @@ static int xen_pt_byte_reg_write(XenPCIP
>      cfg_entry->data = XEN_PT_MERGE_VALUE(*val, cfg_entry->data, writable_mask);
>  
>      /* create value for writing to I/O device register */
> -    *val = XEN_PT_MERGE_VALUE(*val, dev_value, throughable_mask);
> +    *val = XEN_PT_MERGE_VALUE(*val, dev_value & ~reg->rw1c_mask,
> +                              throughable_mask);
>  
>      return 0;
>  }
> @@ -193,7 +194,8 @@ static int xen_pt_word_reg_write(XenPCIP
>      cfg_entry->data = XEN_PT_MERGE_VALUE(*val, cfg_entry->data, writable_mask);
>  
>      /* create value for writing to I/O device register */
> -    *val = XEN_PT_MERGE_VALUE(*val, dev_value, throughable_mask);
> +    *val = XEN_PT_MERGE_VALUE(*val, dev_value & ~reg->rw1c_mask,
> +                              throughable_mask);
>  
>      return 0;
>  }
> @@ -210,7 +212,8 @@ static int xen_pt_long_reg_write(XenPCIP
>      cfg_entry->data = XEN_PT_MERGE_VALUE(*val, cfg_entry->data, writable_mask);
>  
>      /* create value for writing to I/O device register */
> -    *val = XEN_PT_MERGE_VALUE(*val, dev_value, throughable_mask);
> +    *val = XEN_PT_MERGE_VALUE(*val, dev_value & ~reg->rw1c_mask,
> +                              throughable_mask);
>  
>      return 0;
>  }
> @@ -611,6 +614,7 @@ static XenPTRegInfo xen_pt_emu_reg_heade
>          .init_val   = 0x0000,
>          .res_mask   = 0x0007,
>          .ro_mask    = 0x06F8,
> +        .rw1c_mask  = 0xF900,
>          .emu_mask   = 0x0010,
>          .init       = xen_pt_status_reg_init,
>          .u.w.read   = xen_pt_word_reg_read,
> @@ -910,6 +914,7 @@ static XenPTRegInfo xen_pt_emu_reg_pcie[
>          .size       = 2,
>          .res_mask   = 0xFFC0,
>          .ro_mask    = 0x0030,
> +        .rw1c_mask  = 0x000F,
>          .init       = xen_pt_common_reg_init,
>          .u.w.read   = xen_pt_word_reg_read,
>          .u.w.write  = xen_pt_word_reg_write,
> @@ -930,6 +935,7 @@ static XenPTRegInfo xen_pt_emu_reg_pcie[
>          .offset     = PCI_EXP_LNKSTA,
>          .size       = 2,
>          .ro_mask    = 0x3FFF,
> +        .rw1c_mask  = 0xC000,
>          .init       = xen_pt_common_reg_init,
>          .u.w.read   = xen_pt_word_reg_read,
>          .u.w.write  = xen_pt_word_reg_write,
> @@ -966,26 +972,6 @@ static XenPTRegInfo xen_pt_emu_reg_pcie[
>   * Power Management Capability
>   */
>  
> -/* write Power Management Control/Status register */
> -static int xen_pt_pmcsr_reg_write(XenPCIPassthroughState *s,
> -                                  XenPTReg *cfg_entry, uint16_t *val,
> -                                  uint16_t dev_value, uint16_t valid_mask)
> -{
> -    XenPTRegInfo *reg = cfg_entry->reg;
> -    uint16_t writable_mask = 0;
> -    uint16_t throughable_mask = get_throughable_mask(s, reg, valid_mask);
> -
> -    /* modify emulate register */
> -    writable_mask = reg->emu_mask & ~reg->ro_mask & valid_mask;
> -    cfg_entry->data = XEN_PT_MERGE_VALUE(*val, cfg_entry->data, writable_mask);
> -
> -    /* create value for writing to I/O device register */
> -    *val = XEN_PT_MERGE_VALUE(*val, dev_value & ~PCI_PM_CTRL_PME_STATUS,
> -                              throughable_mask);
> -
> -    return 0;
> -}
> -
>  /* Power Management Capability reg static information table */
>  static XenPTRegInfo xen_pt_emu_reg_pm[] = {
>      /* Next Pointer reg */
> @@ -1016,11 +1002,12 @@ static XenPTRegInfo xen_pt_emu_reg_pm[] 
>          .size       = 2,
>          .init_val   = 0x0008,
>          .res_mask   = 0x00F0,
> -        .ro_mask    = 0xE10C,
> +        .ro_mask    = 0x610C,
> +        .rw1c_mask  = 0x8000,
>          .emu_mask   = 0x810B,
>          .init       = xen_pt_common_reg_init,
>          .u.w.read   = xen_pt_word_reg_read,
> -        .u.w.write  = xen_pt_pmcsr_reg_write,
> +        .u.w.write  = xen_pt_word_reg_write,
>      },
>      {
>          .size = 0,

I can see that the code change doesn't cause a change in behaviour for
PCI_PM_CTRL, but it does for PCI_STATUS, PCI_EXP_DEVSTA and
PCI_EXP_LNKSTA. Please explain why in the commit message.

  parent reply	other threads:[~2015-06-16 14:20 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-05 11:55 [Qemu-devel] [PATCH 0/6] xen/pass-through: XSA-120, 128...131 follow-up Jan Beulich
2015-06-05 11:59 ` [Qemu-devel] [PATCH 1/6] xen/MSI-X: latch MSI-X table writes Jan Beulich
2015-06-05 11:59   ` Jan Beulich
2015-06-16 13:35   ` Stefano Stabellini
2015-06-16 13:35   ` [Qemu-devel] " Stefano Stabellini
2015-06-16 14:04     ` Jan Beulich
2015-06-16 14:48       ` Stefano Stabellini
2015-06-16 14:48       ` [Qemu-devel] " Stefano Stabellini
2015-06-16 14:04     ` Jan Beulich
2015-06-05 12:01 ` [Qemu-devel] [PATCH 2/6] xen/MSI-X: drive maskall and enable bits through hypercalls Jan Beulich
2015-06-05 12:01   ` Jan Beulich
2015-06-16 14:03   ` Stefano Stabellini
2015-06-16 14:03   ` [Qemu-devel] " Stefano Stabellini
2015-06-16 14:19     ` Jan Beulich
2015-06-16 14:19     ` [Qemu-devel] " Jan Beulich
2015-06-16 14:56       ` Stefano Stabellini
2015-06-16 16:03         ` Jan Beulich
2015-06-16 16:03           ` Jan Beulich
2015-06-16 14:56       ` Stefano Stabellini
2015-06-05 12:02 ` [Qemu-devel] [PATCH 3/6] xen/MSI-X: really enforce alignment Jan Beulich
2015-06-05 12:02   ` Jan Beulich
2015-06-16 14:08   ` Stefano Stabellini
2015-06-16 14:08   ` [Qemu-devel] " Stefano Stabellini
2015-06-05 12:03 ` [Qemu-devel] [PATCH 4/6] xen/pass-through: correctly deal with RW1C bits Jan Beulich
2015-06-05 12:03   ` Jan Beulich
2015-06-16 14:19   ` Stefano Stabellini
2015-06-16 14:19   ` Stefano Stabellini [this message]
2015-06-16 14:38     ` [Qemu-devel] " Jan Beulich
2015-06-16 14:38     ` Jan Beulich
2015-06-05 12:04 ` [Qemu-devel] [PATCH 5/6] xen/pass-through: log errno values rather than function return ones Jan Beulich
2015-06-05 12:04   ` Jan Beulich
2015-06-16 14:23   ` Stefano Stabellini
2015-06-16 14:23   ` [Qemu-devel] " Stefano Stabellini
2015-06-05 12:04 ` [Qemu-devel] [PATCH 6/6] xen/pass-through: constify some static data Jan Beulich
2015-06-05 12:04   ` Jan Beulich
2015-06-16 14:27   ` Stefano Stabellini
2015-06-16 14:27   ` [Qemu-devel] " Stefano Stabellini
2015-06-16 14:41     ` Jan Beulich
2015-06-16 14:43       ` Stefano Stabellini
2015-06-16 14:43       ` [Qemu-devel] " Stefano Stabellini
2015-06-16 14:41     ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.02.1506161512200.21829@kaball.uk.xensource.com \
    --to=stefano.stabellini@eu.citrix.com \
    --cc=JBeulich@suse.com \
    --cc=qemu-devel@nongnu.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.