Re: [Xen-ia64-devel][PATCH][VTD] add head files and helper functions for VTD/ia64

2008-10-22 Thread Isaku Yamahata
Applied, thanks.

On Tue, Oct 21, 2008 at 06:17:00PM +0800, Xu, Anthony wrote:
> Updated one per your comments
> 
> Thanks,
> Anthony
> 
> Isaku Yamahata wrote:
> > On Tue, Oct 21, 2008 at 11:02:08AM +0800, Xu, Anthony wrote:
> >> Add head files and helper functions for VTD/ia64.
> >>
> >> Signed-off-by; Anthony Xu < [EMAIL PROTECTED] >
> >>
> >>
> >> #Cset 18649 -- 18653 in xen-devel tree are needed.
> >> So you may need to pull from xen-devel, then apply this patch.
> >>
> >> Thanks,
> >> Anthony
> >>
> >>
> >>
> >
> > This looks mostly good. Except hvm_{pci, isa}_xxx() should be
> > defined under xen/arch/ia64/vmx/.
> >
> > thanks,
> >
> >> Add head files and helper functions for VTD/ia64
> >>
> >> Signed-off-by; Anthony Xu < [EMAIL PROTECTED] >
> >>
> >>
> >>
> >>
> >>
> >>
> >> diff -r fc74f8f81e1e xen/arch/ia64/linux-xen/irq_ia64.c
> >> --- a/xen/arch/ia64/linux-xen/irq_ia64.c  Tue Oct 21 10:20:39
> >> 2008 +0800 +++ b/xen/arch/ia64/linux-xen/irq_ia64.c  Tue Oct 21
> >> 10:37:33 2008 +0800 @@ -334,3 +334,49 @@
> >>
> >>   writeq(ipi_data, ipi_addr);
> >>  }
> >> +
> >> +void hvm_pci_intx_assert(
> >> + struct domain *d, unsigned int device, unsigned int
> >> intx) +{ + struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq; +
> >> unsigned int gsi; +
> >> + ASSERT((device <= 31) && (intx <= 3));
> >> +
> >> + if ( __test_and_set_bit(device*4 + intx, &hvm_irq->pci_intx.i)
> >> ) + return; + gsi = hvm_pci_intx_gsi(device, intx);
> >> + if ( ++hvm_irq->gsi_assert_count[gsi] == 1 ){
> >> + viosapic_set_irq(d, gsi, 1);
> >> + }
> >> +}
> >> +
> >> +void hvm_pci_intx_deassert(
> >> + struct domain *d, unsigned int device, unsigned int
> >> intx) +{ + struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq; +
> >> unsigned int gsi; +
> >> + ASSERT((device <= 31) && (intx <= 3));
> >> +
> >> + if ( !__test_and_clear_bit(device*4 + intx,
> >> &hvm_irq->pci_intx.i) ) + return; +
> >> +gsi = hvm_pci_intx_gsi(device, intx);
> >> +
> >> + if (--hvm_irq->gsi_assert_count[gsi] == 0)
> >> + viosapic_set_irq(d, gsi, 0);
> >> +}
> >> +
> >> +void hvm_isa_irq_assert(
> >> + struct domain *d, unsigned int isa_irq) +{
> >> + /* dummy */
> >> +}
> >> +
> >> +
> >> +void hvm_isa_irq_deassert(
> >> + struct domain *d, unsigned int isa_irq) +{
> >> + /* dummy */
> >> +}
> >> diff -r fc74f8f81e1e xen/arch/ia64/vmx/viosapic.c
> >> --- a/xen/arch/ia64/vmx/viosapic.cTue Oct 21 10:20:39 2008 +0800
> >> +++ b/xen/arch/ia64/vmx/viosapic.cTue Oct 21 10:37:33 2008 +0800
> >>  @@ -314,10 +314,6 @@ out:
> >>  spin_unlock(&viosapic->lock);
> >>  }
> >> -
> >> -#define hvm_pci_intx_gsi(dev, intx)  \
> >> -(dev) << 2) + ((dev) >> 3) + (intx)) & 31) + 16) -
> >>
> >>  void viosapic_set_pci_irq(struct domain *d, int device, int intx,
> >> int level)  {
> >> diff -r fc74f8f81e1e xen/arch/ia64/xen/mm.c
> >> --- a/xen/arch/ia64/xen/mm.c  Tue Oct 21 10:20:39 2008 +0800
> >> +++ b/xen/arch/ia64/xen/mm.c  Tue Oct 21 10:37:33 2008 +0800 @@
> >>  -3414,18 +3414,6 @@ __xencomm_mark_dirty(current->domain, addr,
> >> len);  }
> >>
> >> -int iommu_map_page(struct domain *d, unsigned long gfn, unsigned
> >> long mfn) -{
> >> -/* STUB to compile */
> >> -return -ENOSYS;
> >> -}
> >> -
> >> -int iommu_unmap_page(struct domain *d, unsigned long gfn) -{
> >> -/* STUB to compile */
> >> -return -ENOSYS;
> >> -}
> >> -
> >>  /*
> >>   * Local variables:
> >>   * mode: C
> >> diff -r fc74f8f81e1e xen/arch/ia64/xen/xensetup.c
> >> --- a/xen/arch/ia64/xen/xensetup.cTue Oct 21 10:20:39 2008 +0800
> >> +++ b/xen/arch/ia64/xen/xensetup.cTue Oct 21 10:37:33 2008 +0800
> >>  @@ -740,3 +740,15 @@ }
> >>  }
> >>
> >> +int xen_in_range(paddr_t start, paddr_t end)
> >> +{
> >> +start = max_t(paddr_t, start, xen_pstart);
> >> +end = min_t(paddr_t, end, xen_pstart + XENHEAP_DEFAULT_SIZE); +
> >> +return start < end;
> >> +}
> >> +
> >> +int tboot_in_range(paddr_t start, paddr_t end)
> >> +{
> >> +return 0;
> >> +}
> >> diff -r fc74f8f81e1e xen/include/asm-ia64/domain.h
> >> --- a/xen/include/asm-ia64/domain.h   Tue Oct 21 10:20:39 2008 +0800
> >> +++ b/xen/include/asm-ia64/domain.h   Tue Oct 21 10:37:33 2008 +0800
> >>  @@ -42,6 +42,8 @@ /* Cleanly crash the current domain with a
> >>  message.  */ extern void panic_domain(struct pt_regs *, const char
> >>   *, ...) __attribute__ ((noreturn, format (printf, 2, 3))); +
> >> +#define has_arch_pdevs(d)(!list_empty(&(d)->arch.pdev_list))
> >>
> >>  struct mm_struct {
> >>   volatile pgd_t * pgd;
> >> @@ -166,6 +168,7 @@
> >>  unsigned char rid_bits;  /* number of virtual rid bits
> >>  (default: 18) */ int breakimm;   /* The imm value
> >> for hypercalls.  */
> >>
> >> +struct list_head pdev_list;
> >>  struct virtual_platform_def vmx_platform;
> >>  #define 

RE: [Xen-ia64-devel][PATCH][VTD] add head files and helper functions for VTD/ia64

2008-10-21 Thread Xu, Anthony
Updated one per your comments

Thanks,
Anthony

Isaku Yamahata wrote:
> On Tue, Oct 21, 2008 at 11:02:08AM +0800, Xu, Anthony wrote:
>> Add head files and helper functions for VTD/ia64.
>>
>> Signed-off-by; Anthony Xu < [EMAIL PROTECTED] >
>>
>>
>> #Cset 18649 -- 18653 in xen-devel tree are needed.
>> So you may need to pull from xen-devel, then apply this patch.
>>
>> Thanks,
>> Anthony
>>
>>
>>
>
> This looks mostly good. Except hvm_{pci, isa}_xxx() should be
> defined under xen/arch/ia64/vmx/.
>
> thanks,
>
>> Add head files and helper functions for VTD/ia64
>>
>> Signed-off-by; Anthony Xu < [EMAIL PROTECTED] >
>>
>>
>>
>>
>>
>>
>> diff -r fc74f8f81e1e xen/arch/ia64/linux-xen/irq_ia64.c
>> --- a/xen/arch/ia64/linux-xen/irq_ia64.c  Tue Oct 21 10:20:39
>> 2008 +0800 +++ b/xen/arch/ia64/linux-xen/irq_ia64.c  Tue Oct 21
>> 10:37:33 2008 +0800 @@ -334,3 +334,49 @@
>>
>>   writeq(ipi_data, ipi_addr);
>>  }
>> +
>> +void hvm_pci_intx_assert(
>> + struct domain *d, unsigned int device, unsigned int
>> intx) +{ + struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq; +
>> unsigned int gsi; +
>> + ASSERT((device <= 31) && (intx <= 3));
>> +
>> + if ( __test_and_set_bit(device*4 + intx, &hvm_irq->pci_intx.i)
>> ) + return; + gsi = hvm_pci_intx_gsi(device, intx);
>> + if ( ++hvm_irq->gsi_assert_count[gsi] == 1 ){
>> + viosapic_set_irq(d, gsi, 1);
>> + }
>> +}
>> +
>> +void hvm_pci_intx_deassert(
>> + struct domain *d, unsigned int device, unsigned int
>> intx) +{ + struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq; +
>> unsigned int gsi; +
>> + ASSERT((device <= 31) && (intx <= 3));
>> +
>> + if ( !__test_and_clear_bit(device*4 + intx,
>> &hvm_irq->pci_intx.i) ) + return; +
>> +gsi = hvm_pci_intx_gsi(device, intx);
>> +
>> + if (--hvm_irq->gsi_assert_count[gsi] == 0)
>> + viosapic_set_irq(d, gsi, 0);
>> +}
>> +
>> +void hvm_isa_irq_assert(
>> + struct domain *d, unsigned int isa_irq) +{
>> + /* dummy */
>> +}
>> +
>> +
>> +void hvm_isa_irq_deassert(
>> + struct domain *d, unsigned int isa_irq) +{
>> + /* dummy */
>> +}
>> diff -r fc74f8f81e1e xen/arch/ia64/vmx/viosapic.c
>> --- a/xen/arch/ia64/vmx/viosapic.cTue Oct 21 10:20:39 2008 +0800
>> +++ b/xen/arch/ia64/vmx/viosapic.cTue Oct 21 10:37:33 2008 +0800
>>  @@ -314,10 +314,6 @@ out:
>>  spin_unlock(&viosapic->lock);
>>  }
>> -
>> -#define hvm_pci_intx_gsi(dev, intx)  \
>> -(dev) << 2) + ((dev) >> 3) + (intx)) & 31) + 16) -
>>
>>  void viosapic_set_pci_irq(struct domain *d, int device, int intx,
>> int level)  {
>> diff -r fc74f8f81e1e xen/arch/ia64/xen/mm.c
>> --- a/xen/arch/ia64/xen/mm.c  Tue Oct 21 10:20:39 2008 +0800
>> +++ b/xen/arch/ia64/xen/mm.c  Tue Oct 21 10:37:33 2008 +0800 @@
>>  -3414,18 +3414,6 @@ __xencomm_mark_dirty(current->domain, addr,
>> len);  }
>>
>> -int iommu_map_page(struct domain *d, unsigned long gfn, unsigned
>> long mfn) -{
>> -/* STUB to compile */
>> -return -ENOSYS;
>> -}
>> -
>> -int iommu_unmap_page(struct domain *d, unsigned long gfn) -{
>> -/* STUB to compile */
>> -return -ENOSYS;
>> -}
>> -
>>  /*
>>   * Local variables:
>>   * mode: C
>> diff -r fc74f8f81e1e xen/arch/ia64/xen/xensetup.c
>> --- a/xen/arch/ia64/xen/xensetup.cTue Oct 21 10:20:39 2008 +0800
>> +++ b/xen/arch/ia64/xen/xensetup.cTue Oct 21 10:37:33 2008 +0800
>>  @@ -740,3 +740,15 @@ }
>>  }
>>
>> +int xen_in_range(paddr_t start, paddr_t end)
>> +{
>> +start = max_t(paddr_t, start, xen_pstart);
>> +end = min_t(paddr_t, end, xen_pstart + XENHEAP_DEFAULT_SIZE); +
>> +return start < end;
>> +}
>> +
>> +int tboot_in_range(paddr_t start, paddr_t end)
>> +{
>> +return 0;
>> +}
>> diff -r fc74f8f81e1e xen/include/asm-ia64/domain.h
>> --- a/xen/include/asm-ia64/domain.h   Tue Oct 21 10:20:39 2008 +0800
>> +++ b/xen/include/asm-ia64/domain.h   Tue Oct 21 10:37:33 2008 +0800
>>  @@ -42,6 +42,8 @@ /* Cleanly crash the current domain with a
>>  message.  */ extern void panic_domain(struct pt_regs *, const char
>>   *, ...) __attribute__ ((noreturn, format (printf, 2, 3))); +
>> +#define has_arch_pdevs(d)(!list_empty(&(d)->arch.pdev_list))
>>
>>  struct mm_struct {
>>   volatile pgd_t * pgd;
>> @@ -166,6 +168,7 @@
>>  unsigned char rid_bits;  /* number of virtual rid bits
>>  (default: 18) */ int breakimm;   /* The imm value
>> for hypercalls.  */
>>
>> +struct list_head pdev_list;
>>  struct virtual_platform_def vmx_platform;
>>  #define  hvm_domain vmx_platform /* platform defs are not vmx
>> specific */
>>
>> diff -r fc74f8f81e1e xen/include/asm-ia64/linux-xen/asm/iosapic.h
>> --- a/xen/include/asm-ia64/linux-xen/asm/iosapic.hTue Oct 21
>> 10:20:39 2008 +0800 +++
>>  b/xen/include/asm-ia64/linux-xen/asm/iosapic.hTue Oct 21
>>  10:37:33 2008 +0800 @@ -175,5 +175,8 @@ extern unsigned long
>> ia64

Re: [Xen-ia64-devel][PATCH][VTD] add head files and helper functions for VTD/ia64

2008-10-21 Thread Isaku Yamahata
On Tue, Oct 21, 2008 at 11:02:08AM +0800, Xu, Anthony wrote:
> Add head files and helper functions for VTD/ia64.
> 
> Signed-off-by; Anthony Xu < [EMAIL PROTECTED] >
> 
> 
> #Cset 18649 -- 18653 in xen-devel tree are needed.
> So you may need to pull from xen-devel, then apply this patch.
> 
> Thanks,
> Anthony
> 
> 
> 

This looks mostly good. Except hvm_{pci, isa}_xxx() should be
defined under xen/arch/ia64/vmx/.

thanks,

> Add head files and helper functions for VTD/ia64
> 
> Signed-off-by; Anthony Xu < [EMAIL PROTECTED] >
> 
> 
> 
> 
> 
> 
> diff -r fc74f8f81e1e xen/arch/ia64/linux-xen/irq_ia64.c
> --- a/xen/arch/ia64/linux-xen/irq_ia64.c  Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/arch/ia64/linux-xen/irq_ia64.c  Tue Oct 21 10:37:33 2008 +0800
> @@ -334,3 +334,49 @@
>  
>   writeq(ipi_data, ipi_addr);
>  }
> +
> +void hvm_pci_intx_assert(
> + struct domain *d, unsigned int device, unsigned int intx)
> +{
> + struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
> + unsigned int gsi;
> +
> + ASSERT((device <= 31) && (intx <= 3));
> +
> + if ( __test_and_set_bit(device*4 + intx, &hvm_irq->pci_intx.i) )
> + return;
> + gsi = hvm_pci_intx_gsi(device, intx);
> + if ( ++hvm_irq->gsi_assert_count[gsi] == 1 ){
> + viosapic_set_irq(d, gsi, 1);
> + }
> +}
> +
> +void hvm_pci_intx_deassert(
> + struct domain *d, unsigned int device, unsigned int intx)
> +{
> + struct hvm_irq *hvm_irq = &d->arch.hvm_domain.irq;
> + unsigned int gsi;
> +
> + ASSERT((device <= 31) && (intx <= 3));
> +
> + if ( !__test_and_clear_bit(device*4 + intx, &hvm_irq->pci_intx.i) )
> + return;
> +
> +gsi = hvm_pci_intx_gsi(device, intx);
> +
> + if (--hvm_irq->gsi_assert_count[gsi] == 0)
> + viosapic_set_irq(d, gsi, 0);
> +}
> +
> +void hvm_isa_irq_assert(
> + struct domain *d, unsigned int isa_irq)
> +{
> + /* dummy */
> +}
> +
> +
> +void hvm_isa_irq_deassert(
> + struct domain *d, unsigned int isa_irq)
> +{
> + /* dummy */
> +}
> diff -r fc74f8f81e1e xen/arch/ia64/vmx/viosapic.c
> --- a/xen/arch/ia64/vmx/viosapic.cTue Oct 21 10:20:39 2008 +0800
> +++ b/xen/arch/ia64/vmx/viosapic.cTue Oct 21 10:37:33 2008 +0800
> @@ -314,10 +314,6 @@
>  out:
>  spin_unlock(&viosapic->lock);
>  }
> -
> -#define hvm_pci_intx_gsi(dev, intx)  \
> -(dev) << 2) + ((dev) >> 3) + (intx)) & 31) + 16)
> -
>  
>  void viosapic_set_pci_irq(struct domain *d, int device, int intx, int level)
>  {
> diff -r fc74f8f81e1e xen/arch/ia64/xen/mm.c
> --- a/xen/arch/ia64/xen/mm.c  Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/arch/ia64/xen/mm.c  Tue Oct 21 10:37:33 2008 +0800
> @@ -3414,18 +3414,6 @@
>  __xencomm_mark_dirty(current->domain, addr, len);
>  }
>  
> -int iommu_map_page(struct domain *d, unsigned long gfn, unsigned long mfn)
> -{
> -/* STUB to compile */
> -return -ENOSYS;
> -}
> -
> -int iommu_unmap_page(struct domain *d, unsigned long gfn)
> -{
> -/* STUB to compile */
> -return -ENOSYS;
> -}
> -
>  /*
>   * Local variables:
>   * mode: C
> diff -r fc74f8f81e1e xen/arch/ia64/xen/xensetup.c
> --- a/xen/arch/ia64/xen/xensetup.cTue Oct 21 10:20:39 2008 +0800
> +++ b/xen/arch/ia64/xen/xensetup.cTue Oct 21 10:37:33 2008 +0800
> @@ -740,3 +740,15 @@
>  }
>  }
>  
> +int xen_in_range(paddr_t start, paddr_t end)
> +{
> +start = max_t(paddr_t, start, xen_pstart);
> +end = min_t(paddr_t, end, xen_pstart + XENHEAP_DEFAULT_SIZE);
> + 
> +return start < end; 
> +}
> +
> +int tboot_in_range(paddr_t start, paddr_t end)
> +{
> +return 0;
> +}
> diff -r fc74f8f81e1e xen/include/asm-ia64/domain.h
> --- a/xen/include/asm-ia64/domain.h   Tue Oct 21 10:20:39 2008 +0800
> +++ b/xen/include/asm-ia64/domain.h   Tue Oct 21 10:37:33 2008 +0800
> @@ -42,6 +42,8 @@
>  /* Cleanly crash the current domain with a message.  */
>  extern void panic_domain(struct pt_regs *, const char *, ...)
>   __attribute__ ((noreturn, format (printf, 2, 3)));
> +
> +#define has_arch_pdevs(d)(!list_empty(&(d)->arch.pdev_list))
>  
>  struct mm_struct {
>   volatile pgd_t * pgd;
> @@ -166,6 +168,7 @@
>  unsigned char rid_bits;  /* number of virtual rid bits (default: 
> 18) */
>  int breakimm;   /* The imm value for hypercalls.  */
>  
> +struct list_head pdev_list;
>  struct virtual_platform_def vmx_platform;
>  #define  hvm_domain vmx_platform /* platform defs are not vmx specific */
>  
> diff -r fc74f8f81e1e xen/include/asm-ia64/linux-xen/asm/iosapic.h
> --- a/xen/include/asm-ia64/linux-xen/asm/iosapic.hTue Oct 21 10:20:39 
> 2008 +0800
> +++ b/xen/include/asm-ia64/linux-xen/asm/iosapic.hTue Oct 21 10:37:33 
> 2008 +0800
> @@ -175,5 +175,8 @@
>  extern unsigned long ia64_xen_vector[];
>  #endif /* XEN */
>  
> +#define IO_APIC_BASE(idx) ((unsigned int *)iosapic_lists[idx].addr)
> +#define IO_APIC_ID(idx