Re: [Xen-ia64-devel][PATCH][VTD] add head files and helper functions for VTD/ia64
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
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
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